Struts2.1备课教案第一章Struts2概述一、MVC1、Model1和Model22、常用MVC框架(1)JSF(2)Tapestry(3)SpringMVC二、Struts21、Struts1存在的问题(1)支持的表现层技术单一(2)与ServletAPI严重耦合,难于测试。(3)代码严重依赖Struts1API,属于侵入式设计。(4)FormBean与实体类的重复。2、Struts2框架架构第二章HelloWorld一、基本功能1、下载与安装Struts2框架(1)下载:下载最近版本的开发包。FullDistributionStruts2完整版(推荐)。ExampleApplicationsStruts2实例,完整版已经包含此选项的全部内容。EssentialDependenciesOnlyStruts2的核心库,完整版已经包含此选项的全部内容。DocumentStruts2相关文档,包含Struts2的使用文档、参考手册和API文档,完整版已经包含此选项的全部内容。SourceStruts2源码,完整版已经包含此选项的全部内容。注:由于Struts2必须需要依赖于XWork,而Struts2源代码并没有包含XWork的源码,因此想要阅读,还需要登录站点下载。(2)安装所需JAR包将所需要的jar文件复制到工程的WEB-INF/lib目录下。最小开发包为:struts2-core-2.x.x.jarStruts2框架的核心类库xwork-2.x.x.jarXWork类库,Struts2在其上构建ognl-2.6.x.jar对象图导航语言(ObjectGraphNavigationLanguage),Struts2框架使用的一种表达式语言freemarker-2.3.x.jarStruts2的UI标签的模板使用FreeMarker编写commons-logging-1.1.x.jarASF出品的日志包,Struts2框架使用这个日志包来支持Log4J和JDK1.4+的日志记录。commons-fileupload-1.2.x.jar文件上传组件commons-io-1.3.x.jarStruts2.13、配置web.xml修改web.xml文件,在web.xml文件中配置Struts2的核心Filter文件地址:“/工程/WEB-INF/web.xml”?xmlversion=1.0encoding=GBK?web-appxmlns=:xsi=:schemaLocation=://java.sun.com/xml/ns/javaee/web-app_2_5.xsdversion=2.5!--定义Struts2的核心控制器:FilterDispatcher--filterfilter-namestruts2/filter-namefilter-classorg.apache.struts2.dispatcher.FilterDispatcher/filter-class/filterfilter-mappingfilter-namestruts2/filter-nameurl-pattern/*/url-pattern/filter-mapping/web-app4、登录页面文件地址:/工程/login.jsp 普通HTML标签实现JSP页面%@pagecontentType=text/html;charset=GBKlanguage=javaerrorPage=%!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Transitional//EN=登录页面/title/headbodyformaction=login.actionmethod=posttablealign=centercaptionh3用户登录/h3/captiontrtd用户名:inputtype=textname=username//td/trtrtd密 码:inputtype=textname=password//td/trtralign=centertdcolspan=2inputtype=submitvalue=登录/inputtype=resetvalue=重填//td/tr/table/form/body/html注:Struts2默认后缀为.action的所有请求(XWork的习惯)。 采用Struts2标签实现JSP页面%@pagecontentType=text/html;charset=GBKlanguage=javaerrorPage=%%@taglibprefix=suri=/struts-tags%!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Transitional//EN=登录页面/title/headbody!--使用form标签生成表单元素--s:formaction=login!--生成一个用户名文本输入框--s:textfieldname=usernamelabel=用户名/!--生成一个密码文本输入框--s:textfieldname=passwordlabel=密码/!--生成一个提交按钮--s:submitvalue=登录//s:form/body/html5、实现控制器Struts2不在像Struts1的控制器一样需要继承一个父类,甚至可以不需要实现任务接口,Struts2的控制器就是一个普通的POJO类。实际上,Struts2的Action就是一个包含execute()方法和封装属性的普通Java类。文件地址:/工程/WEB-INF/classes/cn/qrsx/action/LoginAction.javapackagecn.qrsx.action;publicclassLoginAction{//下面是Action内用于封装用户请求参数的两个属性privateStringusername;privateStringpassword;//username属性的getter和setter方法publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}//password属性的getter和setter方法publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}//处理用户请求的execute方法publicStringexecute()throwsException{//成功返回success字符串,否则返回error字符串if(getUsername().equals(admin)&&getPassword().equals(123)){returnsuccess;}else{returnerror;}}}6、配置Action编写struts.xml配置文件文件地址:/工程/WEB-INF/classes/struts.xml?xmlversion=1.0encoding=GBK?!--指定Struts2配置文件的DTD信息--!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN!--struts是Struts2配置文件的根元素--struts!--Struts2的Action必须放在指定的包空间下定义--packagename=struts2extends=struts-default!--定义login的Action,该Action的实现类为cn.qrsx.action.LoginAction类--actionname=loginclass=cn.qrsx.action.LoginAction!--定义处理结果和视图资源之间映射关系--resultname=error/error.jsp/resultresultname=success/welcome.jsp/result/action/package/struts7、完成转向页面成功转向页面,文件地址:/工程/welcome.jsp%@pagecontentType=text/html;charset=GBKlanguage=javaerrorPage=%!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Transitional//EN=成功页面/title/headbody欢迎,${requestScope.username},登录。!--${username}或s:propertyvalue=username--/body/html失败转向页面,文件地址:图:Struts2响应处理流程常见错误: Noresultdefinedforactioncn.qrsx.action.LoginActionandresulterror可能出现的原因:(1)action的名称(如:login.action)与Struts2关键字冲突二、代码重构1、改进控制器Struts2控制器可能通过实现Action接口更好的实现Action类,Action接口定义如下:publicinterfaceAction{//定义了下面5个字符串常量publicstaticfinalStringSUCCESS=success;publicstaticfinalStringNONE=none;publicstaticfinalStringERROR=error;publicstaticfinalStringINPUT=input;publicstaticfinalStringLOGIN=login;//定义了处理请求的execute()方法Stringexecute()throwsException;}从定义可以看出,Action接口中定义了5个标准的字符中常量SUCCESS、NONE、ERROR、INPUT和LOGIN,它可以简化execute()方法的