您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作范文 > 关于Struts2原理的小结
建立第1个Struts2小项目:Struts2_0100_Introduction1.拷贝struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\classes\struts.xml至项目的源文件夹src目录下2.拷贝struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\lib下的所有jar文件至/Struts2_0100_Introduction/WebRoot/WEB-INF/lib目录3.修改web.xml文件如下(从struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\web.xml拷贝的):4.修改struts.xml文件如下:5.在浏览器输入,即可输出Hello.jsp的内容6.如何为jar包中的class文件建立源码以及javadoc?-选择jar包,右击选择Properties-建立源代码目录-在ReferencedLibraries的struts2-core-2.2.1.1.jar上右键-建立javadoc目录-建立一个java文件,选择其中的一个类,按F1键即可弹出对应类的javadoc7.如何struts.xml自动提示?-解压struts-2.1.8.1\lib\struts2-core-2.1.8.1.jar-得到我们修改struts.xml的参照:struts-2.1.8.1\lib\struts2-core-2.1.8.1\struts-2.0.dtd-Key:工作原理:将请求与显示相分离建立第2个Struts2小项目:Struts2_0200_Namespace1、关于Namespace的小结,修改struts.xml如下:2、copy项目的时候,如copy项目Struts2_0200_Namespace为项目T,则右键选择properties,需要修改:3、如何导入项目?1)右击选择Import…2)必须勾选“Copyprojectsintoworkspace”3)唯一可能出现的问题:拷贝项目的JRESystemLibrary的存储路径,重新ConfigureBuildPath即可建立第3个Struts2小项目:Struts2_0300_Action1、关于Action的详述1)action如果不包含class属性,则会自动默认调用-xwork-core-2.1.6.jar-com.opensymphony.xwork2.ActionSupportActionSupportimplementsActionAction是一个含publicStringexecute()方法的接口-这个class必须含publicStringexecute()方法2)result如果不包含name属性,则会自动默认设置name=success;否则name等于execute()方法的返回值3)如何编写一个Action的类?-含execute()方法的普通类-implementsAction接口的类,则必须实现execute()方法-extendsActionSupport的类2、重申Struts2的工作原理1)client提交一个客户端请求2)服务器接收到这个请求后,会根据web.xml中的filter寻找filter-class,调用doFilter()方法3)strtus2filter根据struts2.xml检查-namespace-action:根据class来处理-result:根据name来处理4)读出result中的.jsp页面,并返回给客户端建立第4个Struts2小项目:Struts2_0400_Path1、struts2中的路径问题是根据action的路径而不是JSP的路径来确定,所以尽量不要使用相对路径,统一使用绝对路径2、可以由如下生成绝对路径!--request.getContextPath():获得工程名--!--request.getScheme():http--!--request.getServerName():localhost--!--request.getServerPort():8080,端口号--%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;%head!--设置base标签,当前页面的所有超链接前面都会自动加上basePath--basehref=%=basePath%//headbodyahref=index.jspindex.jsp/a/body建立第5个Struts2小项目:Struts2_0500_ActionMethod1、可以为Action指定method属性,而class属性的类UserAction中只有一个add()方法packagename=”user”class=”com.action.Useraction”1)输入,则根据(名为userAdd的action)userAdd的method方法调用class属性类中相应方法。忘掉2)输入!add,则根据user!add调用相应class属性类中的法中DMI动态方法调用,user!add:调用user下的(名为user的action)user的方法add,实现多个方法时,只需要配一个action就可以了2、总结1)Action执行的时候并不一定要执行execute方法只要是返回值是String的方法,想调什么就调什么2)可以在配置文件中配置Action的时候用method=来指定执行哪个方法,也可以在url地址中动态指定(动态方法调用DMI)(推荐),而前者会产生太多的action,所以不推荐使用建立第6个Struts2小项目:Struts2_0600_ActionWildcard1、关于通配符(Wildcard),请先看struts2的配置文件,其中包com.struts2.action中存在两个类:StudentAction,TeacherAction,均含add()和delete()方法输入,*会匹配add,而{1}则匹配出现的第一个*输入,*_*会一次匹配为Teacher和add,{1}{2}则匹配相对应的*2、使用通配符,将配置量降到最低;不过,一定要遵守约定优于配置的原则:类名相似,且方法同名,如StudentAction,TeacherAction,均含add()和delete()方法建立第7个Struts2小项目:Struts2_0700_ActionAttrParamInput建立第8个Struts2小项目:Struts2_0800_DomainModelParamInput建立第9个Struts2小项目:Struts2_0900_ModelDrivenParamInput1、用Action的属性接收参数-在自定义的Action中设置属性,以及Setters和Getters方法-先看struts.xml文件,其中class属性的类UserAction含有add方法,两个私有属性:privateStringname;privateintage;以及get和set方法:publicStringgetName()publicvoidsetName(Stringname)publicintgetAge()publicvoidsetAge(intage)-在浏览器中输入:!add?name=a&age=8,将会调用user下的add方法,并传递name和age两个参数,这里有一个好处,就是不需要再对接受到的int参数转型。-接收参数赋值时,调用的是属性的setUser、getUser方法,而不是直接调用属性2、使用用DomainModel(域模型)接收参数-实际上就是先封装成一个类,即域,然后作为一个属性传递给自定义的Action类-如下struts.xml,其中class属性类中存在一个add方法以及一个私有属性和对应setUser、getUser方法:privateUseruser;而User是包com.struts2.user.model中的一个类,含有同1中的属性和方法-在浏览器中输入:!add?user.name=a&user.age=8,会自动将参数赋给域User-想初始化DomainModel,可以自己new,也可以参数传值,但这时候需要保持参数为空的构造方法。-如果传递的参数和域不匹配,则需要借助DTO(DateTransferObject)或者VO(ValueObject)进行中转,如注册界面,用户只需要用户名和密码,但是注册界面肯定还有个密码确认,这就需要进行中转匹配了。新建一个类DTO类用于中间匹配。3、使用ModelDriven(模型驱动)传递参数1)分析自定义的Action类-实现了ModelDriven接口,而ModelDriven一个接口,仅含一个TgetModel()方法,则自定义Action必须实现这个getModel()方法-此时,User对象必须自己去new一个2)Struts2重点在MVC的M层,即编写自定义的Action去协同Model和View的衔接3)工作原理:-Filter类接收到Client传递的参数,然后首先会new一个User对象-检查Action,发现已实现了ModelDriven接口,然后调用getModel()方法,为返回的Model调用set和get进行封装-得到User对象的值4)在浏览器输入:!add?name=a&age=8,则可跟第一种使用Action属性传参方式的输入形式一样,不再赘述建立第10个Struts2小项目:Struts2_1000_CharacterEncoding1、观察web.xml中的filter的配置2、观察Struts.xml的配置说明:constantname=struts.i18n.encodingvalue=GBK/,即可解决中文乱码问题,但是,Struts2.1.6中存在Bug,所以,在web.xml将filter改为Struts2.0的Filter,即可重新解决中文乱码问题,而使用新的版本Struts2.1.8,则可以顺利修正Struts2.1.6中的Bug,此时web.xml中的filter配置
本文标题:关于Struts2原理的小结
链接地址:https://www.777doc.com/doc-3448610 .html