您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作范文 > 第3章 Struts2基础入门资料
基于Struts框架实现企业级WEB应用第三章Struts2基础入门课程回顾•DispatchAction类是Action的子类,在该类中我们无需重写execute方法,而是可以自定义多个业务处理方法,这就避免了每个业务都需要一个Action的情况•使用实体对象简化ActionFrom•Struts1的异常处理可以方便的处理异常•在程序中引入国际化的目的是为了给不同国家(地区)的用户提供自适应、更友好的界面学习内容Struts2体系结构Struts2运行流程Struts2与Struts1的对比Struts2入门示例Struts2访问ServletAPI能力目标熟悉struts2的体系结构和运行流程熟练使用MyEclipse进行Struts2开发1.Struts2优势publicclassLoginActionextendsAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){returnmapping.findForward(“success”):...}}代码严重依赖Struts1API,属于侵入式设计Struts1框架存在的问题有哪些?支持的表现层技术单一与ServletAPI严重耦合,难于测试2.Struts2与Struts1的对比Struts1要求Action类需继承org.apache.struts.action.Action父类;Struts2中的Action无需任何特定要求,只有一个包含execute方法的POJO类都可以用作Struts2的ActionStruts1仅有Action的一个实例来处理所有请求,所以在Action中定义的资源必须是线程安全的或同步的;Struts2中的Action对象会为每个请求产生一个实例,因此没有线程安全问题2.Struts2与Struts1的对比Struts1使用ActionForm对象封装用户的请求参数,Struts2直接使用Action属性来封装用户请求参数,避免了开发者需要大量开发ActionForm类Struts1整合了JSTL,因此可使用JSTL表达式语言。Struts2可以使用JSTL,但同时整合了一种更强大和灵活的表达式语言:OGNL(ObjectGraphNotationLanguage对象图形导航语言)Struts1使用标签JSP机制把对象绑定到视图页面;Struts2使用ValueStack(值栈)技术,使标签库能够访问值,而不需要将对象和视图页面绑定在一起5.2Struts2体系结构核心控制器FilterDispatcherStrutsPrepareAndExecuteFilter•控制器组件业务控制器Action过滤*.action请求作为一个Filter运行在Web应用程序中生成代理,以用户定义的Action为目标publicclassLoginAction{//封装用户请求参数的uid属性privateStringuid;//封装用户请求参数的pwd属性privateStringpwd;//处理用户请求的execute方法publicStringexecute()throwsException{//如果登录成功,则进入主页面if(scott.equals(this.uid)&&tiger.equals(this.pwd)){returnsuccess;}//否则进入登录失败错误提示页面returnfail;}//getter、setter方法…}完全是一个POJO类,因此具有很好的代码重用性无需与任何ServletAPI耦合,因此进行单元测试非常简单execute方法仅返回一个字符串作为处理结果,该处理结果可映射到任何的视图Struts2体系结构•Struts2的配置文件配置Action的struts.xml文件该文件默认放在classpath下。struts!--Struts2的Action都必须配置在package里面--packagename=defaultextends=struts-default!--继承自默认包--!--定义一个login的Action类,实现类为LoginAction--actionname=loginclass=com.web.struts.action.LoginAction!--定义结果与视图资源的映射关系--resultname=success/index.jsp/resultresultname=fail/fail.jsp/result/action/package/strutsStruts2体系结构•Struts2的标签库%@pagelanguage=javaimport=java.util.*pageEncoding=UTF-8%!—导入struts2标签库--%@tagliburi=/struts-tagsprefix=s%htmlbodys:formaction=login用户名:s:textfieldname=uid/br/密码:s:textfieldname=pwd/br/s:submitvalue=登录/s:resetvalue=重置//s:formbodyhtml创建HTML表单创建HTML输入框导入Struts2标签库1.3Struts2运行流程ActionContextCleanUp其它的过滤器(如SiteMesh等)FilterDispatcherAction代理配置管理器struts.xmlActionInvocation拦截器1拦截器2拦截器3ActionResult拦截器3拦截器2拦截器1Action映射器标签库视图模板-jsp-FreeMarker-等等HTTP响应HTTP请求浏览器发送请求,例如请求/login.action核心控制器FilterDispatcher根据请求决定调用合适的ActionWebWork的拦截器链自动对请求使用通用功能,例如workflow、validation或文件上传等功能回调Action的execute方法,该方法先获取用户请求参数并调用业务逻辑组件来处理用户请求Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像,也可以是PDF文档或其它文档。此时支持的视图技术非常多,既支持JSP,也支持Velocity、FreeMarker等模板技术3.使用Struts2重构用户登录分析示例需求接受用户输入的用户名、密码,并判断用户登录是否成功登录成功进入主页面,显示成功登录提示登录失败返回登录页面重新登录失败成功3.1导入Struts2框架jar包•下载Struts2库文件,下载后解压,在apps目录下找到struts2-blank-2.1.6.war文件•将struts2-blank-2.1.6.war文件解压缩,把其中lib目录下面的9个jar包,复制到项目的”WEB-INF/lib”3.2创建模型publicclassUserInfoimplementsjava.io.Serializable{privateStringuid;//用户名privateStringpwd;//密码publicUserInfo(){}publicUserInfo(Stringuid,Stringpwd){super();this.uid=uid;this.pwd=pwd;}//getter、setter方法省略…}•UserInfo.java:用于描述用户的实体类创建模型•UserService.java:用于处理业务逻辑的JavaBean。为了简化操作,本JavaBean模拟数据库来判断登录是否成功publicUserInfologin(Stringuid,Stringpwd){if(user.getUsername().equals(zhangsan)&&user.getPassword().equals(1234)){returnnewUserInfo(uid,pwd);}elsereturnnull;}3.3创建控制器•创建LoginAction控制器publicclassLoginAction{privateStringuid;privateStringpwd;publicStringexecute()throwsException{UserInfouserInfo=UserService.newInstance().login(this.uid,this.pwd);if(userInfo!=null){//如果登录成功returnsuccess;}//转发到失败页面,该fail与struts.xml配置文件中result相对应returnfail;}//getter、setter方法…}封装用户请求参数的uid属性必须存在一个返回字符串类型的execute方法转发到成功页面,该success与struts.xml配置文件中result相对应3.4创建视图•login.jsp:用于提供登录页面•index.jsp:登录成功后的主页面,用于显示登录的用户信息bodyformaction=login.actionmethod=post用户名:inputtype=textname=uid/br/密码:inputtype=textname=pwd/br/inputtype=submitvalue=提交/inputtype=resetvalue=重置//form/bodybodyh2恭喜你,登录成功!/h2/body提交到LoginAction控制器这里要与Action的属性方法名保持一致3.5配置Struts2应用程序•添加web.xml文件并配置FilterDispatcher!--配置Struts2的核心控制器FilterDispatcher--filter!--filter名称--filter-namestruts2/filter-name!--filter实现类--filter-classorg.apache.struts2.dispatcher.FilterDispatcher/filter-class!--org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter--/filter!--配置filter的映射部分--filter-mapping!--filter名称--filter-namestruts2/filter-name!--所有用户请求,都会被FilterDispatcher拦截--url-pattern/*/url-pattern/filter-mapping!--配置Struts2的核心控制器FilterDispatcher--filter!--filter名称--filter-namestruts2/filter-name!--filter实现类--filter-classorg.apache.struts2.dispatcher.FilterDispatcher/filter-classinit-paramparam-nameconfig/param-name!--指定struts.xml在WEB-INF目录下--param-valuestruts-default.xml,struts-plugin.xml,../str
本文标题:第3章 Struts2基础入门资料
链接地址:https://www.777doc.com/doc-3611749 .html