您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 达内stuts2学习笔记
struts2day011.Struts2历史、与Struts1关系Struts2是基于WebWork框架发展而来。Struts2与Struts1可以说没有太直接关系。2.Struts2特点(1)由Action组件承担Struts1中ActionForm和Action的功能。(2)Action非常灵活,可以使用一个普通的Class来充当。(3)Action可测性强。(4)提供了大量的Result组件,简化了响应处理的实现。(5)提供了大量的拦截器(封装共通的处理)组件。(6)易于扩展、整合和维护。struts2基本流程图3.Struts2的MVC实现控制器实现:FilterDispatcher(早期),StrutsPrepareAndExecuteFilter(新)视图实现:各种类型Result,支持各种视图组件的响应。Struts2标签:提供了分支、循环、显示等功能。模型实现:普通的POJO(Action),更加灵活。ValueStack组件(存储值):用于封装请求相关信息,如request、session、action对象等*4.Struts2开发入门(1)创建WebProject,引入struts2开发基本包(见右图)。(2)在web.xml中配置控制器,添加控制器的配置文件struts.xml。(3)编写JSP、Action组件。(4)编写struts.xml配置,定义Action组件和请求的对应关系。struts2默认支持两种请求名:①带.action扩展名的;②不带action扩展名,就只一个名字;如果此时还用.do结尾的请求名,struts2是不认的。web.xmlweb-appversion=2.4……filterfilter-nameStruts2Controller/filter-name!--这个名字是可以随便取的--filter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class/filterfilter-mappingfilter-nameStruts2Controller/filter-name!--这个名字要跟上面定义的拦截器名字相同--url-pattern/*/url-pattern!--/*表示请求都会被拦截到上面定义的filter-class类进行处理--/filter-mappingwelcome-file-listwelcome-fileindex.jsp/welcome-file/welcome-file-list/web-appstruts.xmlstrutspackagename=struts2-demo1extends=struts-default!--name属性是随便取的--actionname=loginclass=tarena.action.Loginmethod=executeresultname=successtype=dispatcher/ok.jsp/resultresultname=logintype=redirect/index.jsp/result/*type类型可以在struts-default.xml中找到*//action/package/strutsaction的name属性表示客户端向服务器发出的请求的名字。action的class属性指定响应该请求的类名。action的method属性指定响应请求的响应类中的方法,省略此属性的话默认是execute()方法。result/ok.jsp/result和resultname=”success”type=”dispatcher”/ok.jsp/result的效果是一样的,因为name的默认属性值就是”success”,type默认就是dispatcher!Login.javapublicclassLogin{privateStringname;privateStringpassword;/*省略set/get方法*/publicStringexecute(){if(scott.equals(name)&&1234.equals(password)){returnsuccess;}returnlogin;}}struts2的工作流程:一启动tomcat就加载工程的web.xml文件,创建出filter对象,告诉服务器发出什么样的请求时就调用这个filter对象;页面点击登录,发出login.action请求,服务器收到请求就会调用filter对象控制器,如果这个请求是.action或不带action的请求,控制器就认为这是struts2的请求,然后就会根据struts.xml里面的信息去找相应的action做处理;如果请求是其它比如login.jsp,filter就不会去调action了,filter收到请求后得判断一下什么样的请求才会根据配置去调用相应的action进行处理。上例中发出login.action请求后,filter发现有相应的action与之相对应,然后就创建这个action对象,创建了action对象后,就得接收请求信息,实际上是由拦截器来做的。struct.xml放在src目录下*5.Struts2配置文件(1)struts-default.xml(框架自带,只读)定义了一些框架自带的Result组件、拦截器组件。(2)struts.xml(开发创建并使用)定义开发者编写的Result组件,拦截器组件、Action组件。(3)default.properties(框架自带)定义了框架的一些系统参数。如下:①struts.action.extension=action,,配置了默认接受.action的请求或者什么都不加②struts.i18n.encoding=UTF-8配置了框架处理的时候使用的字符格式是utf-8(4)struts.properties(开发创建并使用,只读)用于覆盖default.properties中的系统配置。例如我们新建一个struts.properties文件在其中写上struts.action.extension=do那么struts默认认*.do的请求,如果是acion请求将找不到。(5)struts-plugin.xml整合插件包中带的配置文件。(1)(2)(5)的DTD是一样的,都去struts-default.xml中copy即可。*6.Struts2中Action相关配置(1)package元素的namespace属性用于指定package中的action对应的请求路径。请求路径格式:工程名+namespace属性+action元素的name属性有了namespace后我们可以为一个模块写一个package。(2)action元素的method属性用于指定action中的业务方法名,默认为execute。(3)param元素可以出现在action/action里也可以在result/result里;作用就是为Action,Result或拦截器等组件的属性指定值。例如:actionname=loginclass=tarena.action.Loginmethod=executeparamname=dirD:\\image/paramresultname=successtype=dispatcher/ok.jsp/resultresultname=logintype=redirect/index.jsp/result/action收到login请求时,struts创建tarena.action.Login类的对象时会调用对象中的setDir方法将D:\\image属性值传进去!应用:例如分页,有些action一次要显示5条,有些action一次要显示10条,这时我们就可以传一个值进去,不同action指定不同的值。resultname=”success”type=”dispatcher”/ok.jsp/result的完整写法应该是:resultname=”success”type=”dispatcher”paramname=”location”/ok.jsp/param/result表示在创建dispatcher组件对象的时候,它里面有一个location属性方法将这个属性值传进去。然后在组件内部,用request等实现跳转。(4)通配符*的使用为了简化配置,struts2允许使用通配符。action的name属性可以使用若干个*号,其他属性可以使用{1},{2}格式指定。{N}表示引用前面的第几个通配符的值。例如:actionname=opt_*method={1}class=tarena.action.OptActionresult/WEB-INF/opt.jsp/result/actionname属性里的通配符的值在method属性里可以使用,在class属性里面也可以使用。例如:actionname=”*_*”method={2}class=”tarena.action.{1}”/action第一个通配符指定类名,第二个通配符指定方法名。(5)动态方法调用通过请求格式指定业务方法名。格式:请求名!方法名.action例如:服务器端的配置:actionname=optclass=tarena.action.OptActionresult/WEB-INF/opt.jsp/result/action客户端请求格式:ahref=opt!update.do更新/abr/ahref=opt!delete.do删除/abr/ahref=opt!add.do添加/abr/如果不想浏览器地址栏显示.jsp的路径,而是始终显示.do或.action,我们可以这样配置:actionname=”index”/*不写处理类默认会返回”success”*/resultindex.jsp/result/action这样写了之后,地址栏的路径就会以index.do或index.action结尾了。如果把jsp页面直接放在WebRoot目录下,外部访问者能够直接访问得到jsp页面,如果不想这样可以把jsp页面放在WEB-INF目录下,通过上面的配置方式以.do/.action的请求方式访问jsp页面。WEB-INF这一层外部是无法直接访问的,输入路径也不行。*7.ValueStack,ActionContext,ServletActionContext(1)ValueStack主要用于存储请求相关信息,内部结构如下:root区域:被称为根存储区,是一个栈结构,栈顶元素为当前请求的Action对象context区域:被称为变量存储区,是一个Map结构,存储了request,session,application等对象(2)ActionContext用于获取context存储区内容,可以将request、session、application对象以Map结构返回。ActionContext.getContext().getSession();ActionContext.getContext().getApplication();ActionContext.getContext().get(request);(3)ServletActionCont
本文标题:达内stuts2学习笔记
链接地址:https://www.777doc.com/doc-6365682 .html