资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Struts2Struts2初体验本章目标本章目标掌握MVC设计模式基本概念掌握Struts 2的使用方法使用Struts 2实现用户登录掌握Struts 2的配置Model IModel I模式简介模式简介Model I模式将业务逻辑与页面显示融合在一起的开发模式开发形式纯JSP文件形式开发使用JSP+JavaBean形式开发纯纯JSPJSP开发方式开发方式开发形式在JSP文件中直接嵌入Java脚本适合初学者学习适合初学者学习JSP相关知识相关知识纯纯JSPJSP开发方式开发方式优点简单方便缺点JSP页面中多种语言代码混合,增加了开发难度不易于系统后期维护和扩展系统出现运行异常时,不易于代码调试JSP+JavaBeanJSP+JavaBean开发方式开发方式开发形式使用JavaBean封装业务处理及数据库操作JSP调用JavaBean实现内容显示JSP+JavaBeanJSP+JavaBean开发方式开发方式优点页面代码相对简洁业务处理和数据库操作封装到JavaBean中,提高了代码的重用性通过对JavaBean的修改,提高了系统的扩展性便于系统调试缺点业务逻辑依然有JSP来完成JSP页面依然需要嵌入Java代码如何解决如何解决Model IModel I模式的弊端模式的弊端 1、在你所写的程序中,很多、在你所写的程序中,很多JSP页面直接页面直接访问数据库,如果数据库表名改变了,访问数据库,如果数据库表名改变了, 你所要做的工作是什么?你所要做的工作是什么? 2、你的程序中所有的页面都需要美工进行、你的程序中所有的页面都需要美工进行美化,但是他不懂美化,但是他不懂Java怎么办?怎么办? 顾客点菜顾客点菜顾客点菜顾客点菜厨师厨师菜肴菜肴服务员服务员加工菜肴加工菜肴服务员服务员把菜单给厨师把菜单给厨师服务员上菜服务员上菜把菜单给服务员把菜单给服务员把菜给服务员把菜给服务员以各自的功以各自的功能进行分工能进行分工生活中的解决方案生活中的解决方案什么是设计模式什么是设计模式是一套被反复使用、多数人知晓的、代码设计经验的是一套被反复使用、多数人知晓的、代码设计经验的总结总结模式必须是典型问题(不是个别问题)的解决方案模式必须是典型问题(不是个别问题)的解决方案设计模式的作用设计模式的作用解决一类问题的成功经验解决一类问题的成功经验是为了可重用代码、让代码更容易被他人理解、保证是为了可重用代码、让代码更容易被他人理解、保证代码可靠性代码可靠性设计模式设计模式MVC设计模式设计模式模型模型 - Model接收视图请求数据,进行业务处理,返回处理结果接收视图请求数据,进行业务处理,返回处理结果视图视图 - View交互界面,负责数据采集和处理、用户的请求交互界面,负责数据采集和处理、用户的请求控制器控制器 - Controller接收用户端请求,将模型和视图联系在一起,实现用户请求的接收用户端请求,将模型和视图联系在一起,实现用户请求的功能功能承上启下的枢纽承上启下的枢纽MVCMVC设计模式设计模式2-12-1MVCMVC设计模式设计模式2-22-2MVC模式的编程思路模式的编程思路开发基于开发基于MVCMVC模式的应用程序模式的应用程序2-12-1如何使用如何使用MVC模式实现用户登录?模式实现用户登录?根据根据MVC编程思路逐步实现编程思路逐步实现视图视图模型开发模型开发控制器控制器开发基于开发基于MVCMVC模式的应用程序模式的应用程序2-22-2编写用户登录控制器编写用户登录控制器public class Login extends HttpServlet public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException String name = request.getParameter(name); String password = request.getParameter(password); UserBiz ub = new UserBizImpl(); User user = ub.login(name, password); /判断用户是否存在判断用户是否存在 if(user = null) request.setAttribute(message, 用户名或密码错误用户名或密码错误); request.getRequestDispatcher(/page/login.jsp).forward(request, response); else /用户存在,保存用户状态,跳转到用户中心页面用户存在,保存用户状态,跳转到用户中心页面 优点优点各司其职、互不干涉各司其职、互不干涉有利于开发中的分工有利于开发中的分工有利于组件的重用有利于组件的重用缺点缺点系统结构和实现复杂系统结构和实现复杂视图和控制器过于紧密视图和控制器过于紧密适合大型应用程序适合大型应用程序MVCMVC模式优缺点模式优缺点Struts 2Struts 2及其优势及其优势 Struts 2是一个MVC框架,以WebWork设计思想为核心,吸收了Struts 1的部分优点Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架下开发的程序提供很好的兼容性Struts 2Struts 2的资源获取的资源获取 Struts官方地址:http:/www.apache.com选取最新版Struts 2.3.4进行讲解Struts 2 目录结构apps目录:Struts2示例应用程序docs目录:Struts2指南、向导、API文档lib目录:Struts 2的发行包及其依赖包src目录:Struts 2项目源代码使用Struts 2 开发程序的基本步骤加载Struts2 类库配置web.xml开发视图层页面开发控制层Action配置Struts 2的配置文件(struts.xml)部署、运行项目Struts 2Struts 2初体验初体验7-27-2Struts 2初体验初体验7-3第一步:加载Struts2 类库文件名说 明struts2-core-2.3.4.1.jarStruts 2框架的核心类库框架的核心类库Xwork-core-2.3.4.1.jarXWork类库,类库,Struts 2的构建基础的构建基础Ognl-3.0.5.jarStruts 2使用的一种表达式语言类库使用的一种表达式语言类库freemarker-2.3.19.jarStruts 2的标签模板使用类库的标签模板使用类库commons-fileupload-1.2.2.jarStruts 2文件上传依赖包文件上传依赖包javassist-3.11.0.GA.jar代码生成工具包代码生成工具包commons-lang3-3.1.jarApache语言包,是语言包,是java.lang包的扩展包的扩展commons-io-2.0.1.jarApache IO包包必须加载的必须加载的8个个jar文件文件第二步:配置web.xmlStruts 2Struts 2初体验初体验7-47-4 struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* 将全部请求定位到指定的将全部请求定位到指定的Struts 2过滤器中过滤器中第三步:开发视图层页面-index.jspStruts 2Struts 2初体验初体验7-57-5Hello World$message请输入您的姓名:请输入您的姓名:第四步:开发控制层Action-HelloActionStruts 2Struts 2初体验初体验7-67-6public class HelloWorldAction private String name = ; / 用户输入的姓名用户输入的姓名private String message = ; / 向用户显示的信息向用户显示的信息/* * 当当Struts 2处理用户请求时,在默认配置下调用的方法处理用户请求时,在默认配置下调用的方法 */public String execute() / 根据用户输入的姓名,进行根据用户输入的姓名,进行“Hello,XXXX!”的封装的封装this.setMessage(Hello,+this.getName()+!);/ 处理完毕,返回处理完毕,返回“ok”字符串字符串return “ok;/省略省略setter、getter方法方法第五步:创建struts.xml文件在项目的src目录下面创建struts.xml文件:第六步:部署、运行项目Struts 2Struts 2初体验初体验7-77-7/index.jsp演示示例:第一个演示示例:第一个Struts 2程序程序使用Struts 2实现:用户登录验证实现步骤和Struts 2初体验相同Struts 2Struts 2再体验再体验4-14-1Struts 2再体验再体验4-2第一步:加载Struts2 类库第二步:配置web.xml第三步:开发视图层页面登录页面login.jsp登录成功页面success.jsp登录失败页面fail.jsp用户名:用户名:密码:密码:登录成功登录成功欢迎您,欢迎您,$username!登录失败登录失败用户名为空,或用户名密码不匹配用户名为空,或用户名密码不匹配第四步:开发控制层Action-LoginAction Struts 2Struts 2再体验再体验4-34-3public class LoginAction private String username = ;private String password = ;public String execute() if(jbit.equals(username) & bdqn.equals(password) return success; else return fail; /省略省略setter和和getter方法方法第五步:配置Struts 2配置文件(struts.xml)第六步:部署、运行项目Struts 2Struts 2再体验再体验4-44-4success.jspfail.jsp演示示例:使用演示示例:使用Struts 2实现用户登录实现用户登录Struts.xmlStruts.xml文件详解文件详解1 1package节点类似JAVA中的包,STRUTS2引用包的概念;name属性就是包名,可以根据业务或功能分类定义不同的包,避免命名冲突;namespace类似于命名空间,决定内部所有的ACTION访问URL的父级地址, 如(namespace=“/demo/page”,以下访问的路径就需要加上“http:/localhost:8080/项目名/demo/page/”);extends属性必须写上,而且值必须是“struts-default”,这样才能够实现struts2的功能。action节点可以有多个,表示同个包中多个动作指向URL;action节点中的name属性是指定访问时的URL文件名,如上所示的的完整URL是:http:/localhost:8080/项目名/demo/page/hello;class属性是指定当前URL所指向的action的完整类名,如果不指定值,则默认是XWORK包中的ActionSupport类;method属性是指向action类中的执行方法,该方法可以自定义,但返回值必须是字符串,如果不指定值,默认是:execute方法。result节点中的name属性值是指定action类中的method所指定的方法返回的字符串值,节点中的文本是指向当接收到name的值时转发的URL路径。1获得请求路径的URI,例如url是:http:/localhost:8080/struts2/path1/path2/path3/test.action2首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这个package则转步骤3;3寻找namespace为/path1/path2的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这个package,则转步骤4;4寻找namespace为/path1的package,如果存在这个package,则在这个package中寻找名字为test的action,如果仍然不存在这个package,就去默认的namaspace的package下面去找名字为test的action(默认的命名空间为空字符串 ),如果还是找不到,页面提示找不到action。ActionAction名称的搜索顺序名称的搜索顺序 /hello.jsp 1如果没有为action指定class,默认是ActionSupport。2如果没有为action指定method,默认执行action中的execute() 方法。3如果没有指定result的name属性,默认值为success。ActionAction配置中的各项默认值配置中的各项默认值配置配置Result一个result代表了一个可能的输出。当Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出。在com.opensymphony.xwork2.Action接口中定义了一组标准的结果代码,可供开发人员使用,如下所示:public interface Actionpublic static final String SUCCESS = “success”;public static final String NONE = “none”;public static final String ERROR = “error”;public static final String INPUT = “input”;public static final String LOGIN = “login”;配置配置Result在Struts2中,预定义了一些Result的字符串常量,如下:SUCCESS:表示Action执行成功,显示结果视图给用户,值为字符串success。NONE:表示Action执行成功,不需要显示视图给用户,值为字符串none。ERROR:表示Action执行失败,显示错误页面给用户,值为字符串error。INPUT:表示执行Action需要更多的输入信息,回到input对应的页面,值为字符串input。LOGIN:表示因用户没有登陆而没有正确执行,将返回该登陆视图,值为字符串login。当然,你可以不使用这些字符串常量,而是使用自己定义的字符串,这样做是没有问题的,只要你在Action里面返回的字符串,跟在struts.xml里面配置的result的name属性值一样就可以了。配置配置 result映射映射在result映射的配置中,在指定实际资源的位置时,可以使用绝对路径,也可以使用相对路径。绝对路径以斜杠(/)开头,相对于当前的Web应用程序的上下文路径;相对路径不以斜杠(/)开头,相对于当前执行的action的路径。例如: success.jsp /error.jsp 如果当前Web应用程序的上下文路径是/Shop,那么请求/Shop/admin/login.action,执行成功后,转向的页面路径为:/Shop/admin/success.jsp;执行失败后,转向的页面路径为/Shop/error.jsp.result结果类型在框架调用Action对请求进行处理之后,就要向用户呈现一个结果视图。Struts2支持多种类型的视图,这些视图是由不同的结果类型来管理的。一个结果类型就是实现了com.opensymphony.xwork2.Result接口的类,在struts2中,预定义了多种结果类型,如表:结果类型在包中使用result-type元素来定义,上面的结果类型都是在框架的默认配置文件struts-default.xml中定义的。Struts.xmlStruts.xml文件详解文件详解2 2result节点中有type属性,用于指定指向URL路径的方式,主要值有:dispatcher(默认值),redirect,redirectAction,plainText等。其中当使用redirectAction值时,是直接写重定向到其他action,如果是指向当前包下面的其他ACTION,则中间节点直接写ACTION名称即可,如果是指向其他包中的ACTION,则需要添加PARAM节点,如:其他ACTION的名称ACTION所在的命名空间其中当使用plainText值时,一般是应用于将某个页面的源代码直接输出到页面,如:/index.jsputf-8使用继承实现设置全局视图Struts.xmlStruts.xml文件详解文件详解3 3package节点中还可以设置全局的视图,如:/err.jsp但如果其他包也想实现这样的视图,就需要使用继承的方式实现,如:/err.jsp然后其他包分别继承当前的基础包,如:/index.jsp依赖注入属性Struts.xmlStruts.xml文件详解文件详解4 4Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属性必须提供setter方法。public class HelloActionprivate String savePath;public String getSavePath() return savePath;public void setSavePath(String savePath) this.savePath = savePath;!-这里的param就是提供了依赖注入的功能,其中name的值为savePath,则对应的就是ACTION类中添加的set和get属性的方法名称/upload/index.jsp指定struts2处理请求的后缀Struts.xmlStruts.xml文件详解文件详解5 5struts2可以通过设置常量“struts.action.extension”进行修改所请求的路径后缀,如:以上的value属性指的意思,如果用户请求的文件后缀分别是.do或.go都将进入struts2来处理,设置多个以英文逗号隔开。struts2的常量Struts.xmlStruts.xml文件详解文件详解6 6常量可以在struts.xml或struts.properties两个文件中配置,建议使用struts.xml中配置,在struts.xml中的配置常量如下:在struts.properties中配置常量如下:常量名称=值因为常量可以在下面多个配置文件中进行定义,所以需要了解struts2加载常量的搜索顺序:struts-default.xmlstruts-plugin.xmlstruts.xmlstruts.propertiesweb.xml如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值。struts2的常量Struts.xmlStruts.xml文件详解文件详解7 7常用的常量介绍:struts.i18n.encoding=utf-8 :指定默认编码集,作用于httpservletrequest的setcharacterencoding方法struts.serve.static.browserCache=true:设置浏览器是否缓存静态内容,默认值是true,开发阶段设置falsestruts.configuration.xml.reload=true:当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段设置为truestruts.devMode=true:开发模式下使用,这样可以打印出更详细的错误信息struts.ui.theme=simple:默认的视图主题 struts.objectFactory=spring:与spring集成时,指定由spring负责 action对象的创建struts.enable.DynamicMethodlnvocation=false:该属性设置struts2是否支持动态方法调用,默认值是truestruts.multipart.maxSize=10240000:用于限制上传文件的大小为应用指定多个struts配置文件Struts.xmlStruts.xml文件详解文件详解8 8在大部分应用里,随着应用规模的增加,系统中的action的数量也会大量增加,导致struts.xml配置文件非常庞大,可读性及维护性差,所以可以将一个struts.xml文件分解成多个配置文件,然后在struts.xml中包含其他配置文件,如:动态方法的调用和使用通配符定义actionStruts.xmlStruts.xml文件详解文件详解9 9如果action中存在多个方法时,可以使用“!+方法名”调用指定方法,如下:public class HelloActionpublic String execute()public String other()如果访问上面的action的URL路径为:/abc/hello,如果要访问other()方法,可以这样调用:/abc/hello!other,如果不想使用动态方法调用,可以通过设置常量关闭。也可以使用通配符定义action,如下:如果要访问other()方法,可以通过这样的URL访问:/abc/hello_other总结总结什么Model I模式?什么是Model II模式?什么是MVC模式?使用Struts 2 开发程序的基本步骤是什么?
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号