Struts2.doc_第1页
Struts2.doc_第2页
Struts2.doc_第3页
Struts2.doc_第4页
Struts2.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、总体介绍:Struts是由Apache开源联盟()提供的一套用于构建Java Web应用程序的框架。它的目标是希望分离Web程序的表示层、控制层和模型层,即MVC模式,使程序员将更多的精力投入后台的业务逻辑设计,而不是底层的Web基础框架。Struts的所有功能都是建立在已有的Java Web组件上,如Servlet、JSP或是JavaBean,它只是利用一种方式将这些元素组织起来,使他们协同工作。总之,Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。Struts实现的重点在C(Controller),包括ActionServlet / RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(Custom Tag)。Struts几乎没有涉及M(Model),所以Struts可以采用Java实现的任何形式的商业逻辑。Struts基本模型: Action Service Dao DBStruts-config.xml客户端浏览器 DB ActionServletActionJSP模型 组件Action二、Struts的基本元素(编写步骤):1、Action (C层)package tarena.struts.basic;import org.apache.struts.action.*;import javax.servlet.http.*;public class LoginAction extends Actionpublic ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) ActionForward forward = mapping.findForward(fail); LoginForm loginForm = (LoginForm)form; if(loginForm.getUserName().equals(admin) & loginForm.getPassword().equals(123) forward = mapping.findForward(success); return forward; 继承org.apache.struts.action.Action类,并覆盖execute()方法,注意其四个参数各自含义:代表与此Action相关的配置2、ActionForm (M层,为M层做贡献) 表单数据的封装对象,具备表单数据验证功能继承org.apache.struts.acton.ActionForm类,按照JavaBean规范写出属性以及它们的get/set方法。package tarena.struts.basic; import org.apache.struts.action.*;public class LoginForm extends ActionForm private String userName; private String password; public void setUserName(String userName) this.userName = userName; public String getUserName() return userName; public void setPassword(String password) this.password = password; public String getPassword() return password; 一个FromBean可以服务多个Action,或多个表单3、XML文件(web.xml、sturts-config.xml) struts-config.xml 起到类似站点地图的功能 进FormBean出Action的配置信息详解 Action标签中的属性:1) name=”loginForm”, 如果要使用ActionForm则必须指明,否则可以省略。2) input=”/basic/login.jsp”, 如果需要验证,input表示验证失败后转向的页面。3) validate=”true/false”, 指定是否进行校验,默认为true。4) redirect=”true/false”, 是否重定向,默认为false。5) scope=”request/session”, ActionForm的范围,默认为session。web.xml action org.apache.struts.action.ActionServlet 1 action *.do 4、写JSP实现View的功能。5、一些开发包:antlr.jar commons-beanutils.jar commons-digester.jar commons-fileupload.jar commons-logging.jar commons-validator.jar jakarta-oro.jar jstl.jar standard.jar struts.jar关于表单验证:数据格式 用JavaScript处理;(客户端校验)可减少服务器端的负担,但不够安全逻辑验证 在Action中进行,也可以做数据格式验证。(服务器端校验)避免跳过客户端的校验验证分开写一个FormBean表单验证步骤:3、struts-config.xml- - Input - 错误页面 Validate=”true”4、view- 错误页面 1、 建立目录结构2、 - Action-FormBeansetter gettervalidate() ActionErrors ActionMessage message pertityvaliadate() 返回一个ActionErrors。ActionErrors 是Map实现,其value有为List实现。ActionErrors对象为null或对象内元素个数为0,表示不包含任何ActionMessage实例(异常信息/普通信息),也就是没有发生错误,表单验证通过。Struts基本流程状态图三、异常处理:处理流程:调用业务方法时。抛出异常。在控制层的action中把异常处理,调用struts中的封装的错误类保存异常,最后再在页面中使用标签,读取信息。编程方式异常处理:在action类中在catch中,ActionErrors errors=new ActionErrors();ActionMessage message= new ActionMessage(“errors.”,values)Errors.add(“message”,message);SaveErrors(request,errors);在页面中就写读取错误信息声明式异常处理:在struts-config.xml中加一个标签把全局的声明标签 四、动态ActionForm:ActionForm的缺点:对于大型的struts应用,必须以编程的方式创建大量的ActionForm类,表单的改动会触发FormBean的大量改动(FromBean维护量大)。动态FormBean是指,Struts已提供给我们DynaActionForm(是ActionForm的子类),我们只需通过配置文件进行配置。 Type 表示属性类型,注意若为基本类型时要用其包装类。访问动态ActionForm与访问普通ActionForm的最大区别:属性的访问方式不同。普通ActionForm get/set 方法。动态ActionForm DynaActionForm把所有属性保存在Map中。 public Object get(String name) public void set(String name, Object value)动态ActionForm表单验证:DynaActionForm的基类的validate()方法没有提供任何默认的验证行为。需要继承DynaActionForm定义子类来覆盖validate()方法,但是以编程的方式来验证动态ActionForm违背了Struts框架提供动态ActionForm的初衷。所以可以采用Validator框架来完成验证。 五、重要的几个Action:目的,减少Action类的数目;便于代码的维护1、DispatchAction希望在同一个Action类中完成一组相关的业务操作可以使用此类,例如,与购物车相关的业务操作包括:查看购物车,添加商品、修改商品及数量等。 DispatchAction类是Action类的子类; 共享同一个Action的路径;注意不要覆盖execute()方法 共享一个ActionForm,多个不同action path,可以在同一个类中。 创建一个扩展DispatchAction的子类的写法:public class MyDispatchAction extends DispatchActionActionForward login(ActionForm form, HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws Exception return mapping.findForward(“sucess”); struts-config.xml中使用 DispatchAction时的配置文件:parameter属性是和表单中隐藏域的名字相对应的,即请求中参数的名称 使用DispatchAction的页面: login2、MappingDispatchAction MappingDispatchAction类是DispatchAction的子类 可以匹配多个action路径 可以不共享同一个ActionForm MappingDispatchAction的写法public class MyMappingDispatchAction extends MappingDispatchAction ActionForward login(ActionForm form,HttpServletRequest request,HttpServletResponse response,ActionMapping mapping) throws Exception return mapping.findForward(“success) struts-config.xml中使用MappingDispatchAction的配置文件:parameter属性是指定调用方法的名字 使用MappingDispatchAction的页面:注意:在JSP页面中不需要再使用隐藏域来传递参数了,在form中的action就可以直接使用xxx.do匹配了。3、LookupDispatchAction LookupDispatchAction类也是DispatchAction类的子类。 解决一个表单的多个同名提交按钮的问题。 通过使用资源文件,用submit按钮的value来作为资源文件中的key所对应的值,通过这个值来找到对应的key,再使用这个key来获得指定Map中所对应的值,这个值就是要调用的方法名。 注意:在继承LookupDispatchAction时,要覆盖getKeyMethodMap()方法,并定义Map,向Map中放入指定的键值对。 缺点:不能做业务相关的处理。否则会带来更多的麻烦。客户需求会常变化。 LookupDispatchAction的写法public class MyLookupDispatchAction extends LookupDispatchActionActionForward login(ActionForm form,HttpServletRequest request,HttpServletResponse response,ActionMapping mapping) throws Exception return mapping.findForward(“success); public Map getKeyMethodMap()Map map= new HashMap(); /key为资源文件的key值,value为action中的方法名。 map.put(“submit.login, “login);return map; LookupDispatchAction资源文件MessageRperties submit.login=login struts-config.xml中使用LookupDispatchAction的配置文件: LookupDispatchAction页面: 5.ForwardAction写Action的一些注意事项: 线程安全问题。尽量不要在Action类中使用(静态)成员变量,如果使用要加上同步。 例如,单线程 List; 多线程 用Vector,加了同步,线程安全。 不要在Action中写复杂的业务方法。 可以把请求封装好向业务逻辑层调用。 尽量使各模块间的耦合性降低,最大限度的针对接口编程。六、Struts中事务验证 Transaction Tokens 逻辑上的检验,跟客户端的校验是不一样的。如:判断用户名是不是正确 ,防止重复注册等 要写Token码的编程步骤。void saveToken(HttpServletRequest request)方法用于将在客户端生成的token码,保存在session中。void resetToken(HttpServletRequest request)方法用于重置token码,生成新的token码。boolean isTokenValid(HttpServletRequest request,boolean reset)判断token码是否相等,并且是否重置token码。设置token码 public ActionForward toadd(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception saveToken(request);/在当前会话中创建一个token码 return mapping.findForward(next); 验证token码。 public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throw

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论