




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts在MVC流程中,有一些操作是每次都要做,而且这些操作是通用1.通过request.getParameter得到请求参数2.将请求参数进行类型转换3.数据输入校验4.文件上传。框架:在N个项目中通用的,重复性的代码“抽取”出来,组成一个“类库”我们为什么要使用开源框架?为什么要学习Struts2?为什么我们不自己写一个框架?1.使用的人少,测试的机会少,有很多未知的错误和bug2.技术实力没有别人强MVC框架:Struts2SpringMVCJSF(Sun公司推荐的MVC规范)Struts2历史:2001年,有一个Java大神写了Struts1(全世界第一个MVC框架)捐献给了Apache(开源组织)开源的其他的MVC框架,WebWork(2003)(XWork+Web前端)由于出身不好,作者不够有名开源OpenSymphony(OS)已经解散2007年,由WebWork分化出了Struts22011年,OS解散/*.jarN个.class文件方便管理一堆.class文件*.war一个Web应用的包*.ear一个企业应用包包含N个jar包和N个war包这些包都是用jar命令来压缩的,和zip文件格式是兼容*/=使用Struts2=1.下载Struts2的框架文件Struts2解压之后,得到4个文件夹apps:包括5个war包struts2-blank.war Struts2空应用struts2-rest-showcase.war Struts2中REST技术的例子struts2-showcase.war Struts2中的小例子docs:API文档lib:Struts2的jar包,以及编译和运行所需要的第三方jar包src:Struts2的源代码=安装Struts2=1.考jar包(全考过来是错的)appsstruts2-blank.warWEB-INFlib下所有的jar包2.修改web.xml文件,加载Struts2核心Filter让核心Filter过滤所有的用户请求3.在classes目录下增加一个Struts2的配置文件把struts.xml文件放在src目录下即可=Struts2开发步骤=1.先定义一个能发送请求的页面,可以是超链接,也可以是表单2.开发ActionStruts2对Action要求很低A.Action实现Action接口,或者是继承ActionSupport类ActionSupport也实现了Action接口B.为每个请求参数都提供Field,并提供相应的setter和getter方法C.该Action类应该有无参数的构造方法3.配置Action类=如何在Action中访问Servlet API=总有些时候,我们需要访问Servlet API比如我们需要把数据存入到sessionStruts2提供关了两种方式访问ServletAPI伪访问:借助于ActionContext提供了getSession()-模拟访问session提供了getApplication()-模拟访问application真访问:借助于ServletActionContext- static PageContext getPageContext()- static HttpServletRequest getRequest()- static HttpServletResponse getResponse()- static ServletContext getServletContext()常量配置:Struts2常量,也叫Struts2属性控制整个Struts2应用的特性形式:常量名对应常量值配置常量有3种方式:1.在web.xml中(需要4行)常量名常量值2.在struts.xml中,每一行配置一个常量3.额外增加一个perties文件常量名=常量值(name=value)每行配置一个常用常量:struts.devMode- 设置是否处于开发模式,开发模式提示更多错误信息,帮助排错自动重新加 载配置文件,开发模式truestruts.i18n.encoding- 设置编码字符struts.action.extension- 设置action默认的后缀名,默认值是actionstruts.serve.static.browserCache- 设置浏览器是否缓存静态内容,开发阶段设置false,运行阶段truestruts.i18n.reload- 设置是否每次请求都重新加载资源文件struts.configuration.xml.reload- 设置是否每次struts.xml修改之后,应用自动重新加载struts.custom.i18n.resources- 加载国际化资源文件=包配置=企业开发模块化开发开发阶段:安全,每个人都维护自己的配置文件销售阶段:软件做成模块化A-B模块,免费的C-E模块,20万C-G模块,50万配置包:每个package标签定义了一个包的配置- name:必填,指定了包的名字,该名字是该包被其他包引用时使用key- extends:可选,继承其他包,可以继承action- namespace:可选,定义包的命名空间- abstract:可选,定义一个抽象包(抽象包里不能包含action)结果配置:Action中处理用户请求的方法1.方法不能有形参2.返回值必须是String之前我们学的ServletMVC(1)调用Model方法之后,跳转页面的地址硬编码(2)导致程序在以后需要维护、修改时候非常麻烦,必须手动修改源代码Struts2的做法:1.Action调用业务逻辑层方法后,返回一个String类型的“逻辑视图名”2.通过struts.xml文件中定义了逻辑视图名真实的物理视图标准的result标签全局结果.顺序:先扫描action内部的result,如果没有匹配的result,才扫描全局结果动态方法调用(DMI - dynamic method invoke)用处不大,大概了解就可以在提交请求的时候,直接提交给action指定的方法处理在页面上指定请求的地址:action名!方法名LoginAction!loginUser为什么要少用1.动态方法调用安全性不高2.其实完全可以用action标签中的method属性来指定方法名=Struts2国际化=程序国际化(i18n,internationalization)程序可以根据机器所在的国家、语言环境,自动显示当前国家、语言的内容国际化的本质:查找、替换国际化的步骤:1.为不同的国家,语言环境提供资源文件如果在资源文件中出现了非西欧字符,要使用native2ascii命令来处理该文件2.在程序中输出的是国际化消息的keyStruts2国际化1.支持模块化加载2.支持自动加载国际化资源文件1.JSP页面的国际化A.需要手动的加载国际化消息使用需要国际化的页面部分B.在页面上显示文字使用如果是在表单元素中实现国际化,使用“key”属性指定国际化消息的key2.Action的国际化A.自动加载资源文件让国际化消息资源文件的baseName与Action的类名相同而且要放在同一个包中B.在Action类中要继承ActionSupport,使用getText()方法用来加载国际化消息3.包范围内的国际化A.自动加载让国际化消息资源文件baseName为package4.全局国际化资源文件A.struts.custom.i18n.resources常量来加载国际化资源文件=Struts2的异常处理=try/业务代码catch(XXXException e)/处理XXX异常的代码forward(a.jsp);catch(YYYException e)/处理YYY异常的代码forward(b.jsp);对于Action的处理方法,处理结果可能有两种情况:1.正常执行结束,会返回一个String的逻辑视图2.遇到异常,返回一个异常对象Struts2异常配置的本质:为不同的异常类,“起一个”逻辑视图名Struts2设计的处理方法完全不需要处理任何异常,可以声明抛出异常=OGNL=在JSP学过EL表达式:访问数据的工具$requestScope.abcOGNL- 对象图导航语言(Object-Graph Navigation Language)要访问数据,就得有容器,这个容器就是“Stack Context”可以理解为一个Map集合1.它里面的每个对象,都应该有个名字,根据名字来访问对象使用#访问假如OGNL Context中有三个对象:foo,bar,test#bar.abc- 访问bar对象中的getAbc()返回值#test.xyz.abc.def- 访问test对象中的getXyz().getAbc().getDef()的返回值2.OGNL Context中有一个根(root)对象如果我们要访问根(root)对象,可以省略对象名假如OGNL Context中有三个对象:foo,bar,test, 但其中foo是根对象abc.xyz.defcontext map:1.application2.session3.value stack(root)4.request5.parameters6.attr(依次搜索page/request/session/application)3.OGNL创建List集合对象obj1, obj2, obj3, obj4.4.OGNL创建Map集合对象key1:value1, key2:value2, key3:value3.5.OGNL可以获取指定集合的子集合person.cats- 获取person所养的猫的集合person.cats.? #this.age2- 获取person所养的猫中age大于2的所有猫person.cats. #this.age2- 获取person所养的猫中age大于2的第一个猫person.cats.$ #this.age2- 获取person所养的猫中age大于2的最后一个猫6.OGNL还支持直接调用静态方法和属性- 需要将struts.ognl.allowStaticMethodAccess常量设置为true才可以类名静态属性类名静态方法(参数列表)控制标签:if/elseif/else分支结构test属性指定要判断的条件iterator迭代集合value属性指定被迭代的集合,被迭代的集合通常用OGNL表达式指定如果不指定value属性,迭代ValueStack栈顶的集合status属性指定将迭代对象的IteratorStatus对象以该名称存入到Stack Context中通过该对象可判断当前迭代元素的属性begin属性指定一个索引值,指定从该索引对应的元素开始迭代,默认值是0end属性指定一个索引值,指定迭代到该索引值对应的元素结束,默认值集合元素个数-1step属性指定迭代集合元素的步长(增量)append/merge把两个或两个异常的集合合并成新的集合var属性指定新集合的名字标签内可以写多个append合并方式:第一个集合中的第一个元素第一个集合中的第二个元素第一个集合中的第三个元素第二个集合中的第一个元素第二个集合中的第二个元素第二个集合中的第三个元素merge合并方式:第一个集合中的第一个元素第二个集合中的第一个元素第一个集合中的第二个元素第二个集合中的第二个元素第一个集合中的第三个元素第二个集合中的第三个元素generator按某种规则把字符串分割成一个集合separator属性指定用于解析分隔字符串的分隔符val指定被解析的字符串var将生成的Iterator对象以该名称放入Stack Contextsubset截取子集合source指定源集合,如果不指定,默认取得ValueStack栈顶元素start指定子集从源集合的第几个元素开始截取,默认值0count指定子集元素的个数,默认取得源集合中的所有元素sort对集合元素进行排序comparator属性指定进行排序的Comparator对象source属性指定被排序的集合数据标签:set定义一个变量property输出指定表达式的值value属性指定表达式,然后输出该表达式的值如果不指定value属性,输出ValueStack栈顶的值bean创建一个bean对象,var指定对象名,name指定类型i18n为指定页面加载国际化资源文件,name指定国际化资源文件的baseNametext输出国际化消息,通过name属性指定国际化消息的keyaction可以直接在JSP页面中调用Action,可以直接把Action的处理结果包含在本页面中name和namespace确定要调用哪个actionexecuteResult指定是否把被调用的Action处理结果完全包含到页面中includevalue属性用于包含指定的JSP页面date对日期进行格式化输出name指定要格式化的日期对象format指定格式化字符串param用于设置参数删除push用于将某个值放入ValueStack的顶端当我们的对象所在对象图“很深”时,可以将该对象“推入”ValueStack栈顶UI标签主题与模版当我们使用标签时,它生成了两列布局,并提供了label标签因为struts2为所有标签都提供了一个模版每个标签所表现出来的效果由它对应的模版来决定如果为所有的标签都提供了模版,这系列的模版就组成了主题Struts2默认提供了3个主题:simple:没有额外的附加行为的主题只生成最核心的HTML元素,其他附加的东西(比如两列布局、label)都没有xhtml:默认主题1.两列布局2.生成label3.输出错误提示4.客户端校验支持css_xhtml:就是在xhtml增加了一些css样式如果有需要,我们也可以针对自己的项目开发自定义主题如何设置主题?1.直接通过struts.ui.theme来设置默认的主题2.通过page/request/session/application范围内的theme来设置主题3.为标签设置theme属性,子标签默认使用父标签的theme属性所设置的主题这些UI标签都可指定cssClass、cssStyle来使用css样式还可以指定大量的onXxx属性,用于绑定JavaScript函数表单标签:checkbox只是生成复选框head引入一些辅助的CSS样式和JS脚本file生成一个文件域form表单,默认post提交hidden隐藏域label文字域password密码reset重置按钮submit提交按钮textarea文本域textfield文本框checkboxlist/radio/select/optgroup用法都一样combobox生成一个文本框与列表框的组合updownselect加强版的selectoptiontransferselect两个updownselect的组合doubleselect两个列表框,有级联效果token防刷新默认情况下,如果没有进行防刷新控制,每次刷新都会添加一条完全相同的记录1.需要在表单页面上增加标签2.在action配置中增加一个token拦截器它会检测用户是否刷新了页面当它检测用户刷新页面时,系统会返回一个invalid.token的逻辑视图3.还需要为invalid.token的逻辑视图配置一个物理视图资源文件上传传统的文件上传1.需要将form的enctype设置为multipart/form-data此时会将整个表单以二进制流的方式进行提交2.需要启用一个文件上传的组件(SmartUpload、Common-FileUpload)3.Servlet通过文件上传组件来获取请求参数,获取上传的文件得到上传的文件后,以IO流的方式把文件写入磁盘即可Servlet 3.0以后1.只需要在Servlet中增加一个MultipartConfig的注解2.可以用request.getParameter()获取普通请求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 胆道恶性肿瘤免疫检查点抑制剂治疗中国专家共识(2025版)解读
- 酒店部门安全培训内容课件
- 国企纪律督查方案范本
- 2025合同地板选购指南分享
- 全国大学生职业规划大赛《司法信息技术》专业生涯发展展示【高职(专科)】
- 《2025劳动合同解除简易协议书》
- 2025三人合伙人合同协议书范本
- 2025医疗器械(配件)采购合同(汇编)
- 2025标准版中介服务合同
- 2025年塔城地区市级机关遴选考试笔试试题(附答案)
- 《公共机构建筑机电系统调适技术导则》
- 各类质谱仪的优缺点分析 质谱仪解决方案
- 测控技术与仪器技术面试
- 三年级数学简便计算300题及答案
- 生涯发展报告
- 企业活跃度分析报告
- 管理学原理说课课件
- 关于自愿放弃缴纳社保协议书
- 梦想课程《去远方》(版)分享课程
- 2023年政府采购评审专家考试真题模拟汇编(共681题)
- 年6万吨废植物油回收利用项目立项申请报告
评论
0/150
提交评论