《ch10 Struts2编程》由会员分享,可在线阅读,更多相关《ch10 Struts2编程(110页珍藏版)》请在金锄头文库上搜索。
1、 MVC模式 Struts2概念 深入理解Struts2的配置文件 Action访问Servlet API Struts2校验框架 Struts2拦截器 Struts2转换器 Struts2国际化 Struts2上传下载 Struts2标签使用MVC(Model-View-Controller),把一个Java应用的输入、输出 、处理流程按照Model、View、Controller的方式进行分离,这 样一个应用被分成三个层-模型层、视图层、控制层。视图(View):代表用户交互界面,对于Web应用来说,可以 概括为HTML、JSP界面。一个应用可能有很多不同的视图, MVC设计模式对于视图的
2、处理仅限于视图上数据的采集和处理 ,以及用户的请求,并不包括在视图上的业务流程的处理。业 务流程的处理交予模型(Model)处理。比如一个订单的视图只接 受来自模型的数据并显示给用户,以及将用户界面的输入数据 和请求传递给控制和模型。模型(Model):就是业务流程/状态的处理以及业务规则的制定 。业务流程的处理过程对其它层来说是黑箱操作,模型接受视 图请求的数据,并返回最终的处理结果。业务模型的设计可以 说是MVC最主要的核心。做具体业务时我们将应用的模型按一 定的规则抽取出来,抽取的层次很重要,这也是判断开发人员 是否优秀的设计依据。业务模型还有一个很重要的模型那就是 数据模型。数据模型主
3、要指实体对象的数据保存(持续化)。 比如将一张订单保存到数据库,从数据库获取订单。我们可以 将这个模型单独列出,所有与订单相关数据库的操作(查询、 删除、增加、修改订单)只限制在该模型中。控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配 在一起,共同完成用户的请求。划分控制层的作用也很明显, 它清楚地告诉你,它就是一个分发器,选择什么样的模型,选 择什么样的视图,可以完成什么样的用户请求。控制层并不做 任何的数据处理。例如,用户点击一个连接,控制层接受请求 后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模 型做什么,选择符合要求的视图返回给用户。因此,一个模型
4、 可能对应多个视图,一个视图可能对应多个模型。我们举个例子说明MVC架构。如果我们要做个用户注册业务 。View就是HTML注册界面。该界面有个表单让用户输入注册信 息。按提交按钮,这些注册信息被提交给一个Servlet。该 Servlet就是控制层,接收用户的输入但Servlet并不将用户信息 保存到数据库中。保存用户信息这属于业务逻辑。该业务逻辑 可以通过JavaBean实现。该JavaBean就是Model层。MVC运行 流程如图10.1所示。MVC模式框架基于MVC的Java EE Web开发过程基于纯JSP一层架构基于JSP和Servlet两层架构基于JSP、JavaBean及Ser
5、vlet三层架构Struts2是Struts的下一代产品。Struts2对 Struts1 和 WebWork的技术进行了整合,推出了全新的Struts 2框架。 Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2 以WebWork为核心,采用拦截器的机制来处理用户的请求,这 样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开 。Struts1采用Servlet的机制来处理用户的请求。Struts 2框架中有很多新的特性。Struts 2的所有类都基于接 口,核心接口独立于HTTP。Struts 2配置文件中的大多数配置 元素都会有默认值,所以不
6、需要设定值,除非需要不同的值。 这有助于减少在XML文件中需要进行的配置。Struts 2实现了MVC的各项特性,是一个非常典型 的MVC框架与Struts 2紧密相关的两个概念 Action:Action是由开发人员编写的类,负责Web应用程 序中实现页面跳转的具体逻辑 Interceptor:拦截器(Interceptor)是动态拦截Action 时调用的对象Struts 2使用多个拦截器来处理用户的请求,实现 用户的业务逻辑代码与Servlet API分离用户请求提交后经过多个拦截器拦截后交给核心控制 器FilterDispatcher处理。核心控制器读取配置文件struts.xml,根
7、据配置文件 中的信息指定由一个业务控制器Action(POJO类) 来处理用户数据。业务控制器调用某些业务组件进行处理,在处理过程 中可以调用其他模型组件共同完成数据的处理。Action处理完后会返回给核心控制器 FilterDispatcher一个处理结果,核心控制器根据返 回的处理结果读取配置文件struts.xml,根据配置文 件中的配置,决定下一步跳转到某一个页面或者某一 个Action。Struts2框架主要由三部分组成:核心控制器 (StrutsPrepareAndExecuteFilter)、业务控制器和用户定义的业 务逻辑组件。(注意也有核心控制器使用FilterDispatc
8、her)。1、核心控制器FilterDispatcher是早期struts2的过滤器,可以对客户端URL请 求进行过滤,即将request请求,转发给对应的action去处理。 作为核心控制器,该filter将负责处理用户所有以.action结尾的 请求。从2.1.3版本以后官方推荐使用 StrutsPrepareAndExecuteFilter。2、业务控制器业务控制器组件就是用户实现的Action类实例。Action类通常 包含一个execute方法,返回一个字符串作为逻辑视图名。在创 建了Action类之后我们还需要在struts.xml文件中配置此Action 的相关信息。3、业务逻辑
9、组件业务逻辑组件通常是指用户自己针对系统功能开发的功能模块 组件。被业务控制器组件所调用来处理业务逻辑的。Struts2体 系结构如图Struts2框架的处理流程如下第1步:客户端浏览器发送一个请求。 第2步: web服务器如Tomcat收到该请求,读取配置文件 ,将该请求导向Struts2的核心控制器 StrutsPrepareAndExecuteFilter,StrutsPrepareAndExecuteFilter 根据请求决定调用合适Action。 第3步:StrutsPrepareAndExecuteFilter在调用Action之前被 Struts2的拦截器拦截,拦截器自动对请求应
10、用通用功能,如数 据转换,校验等。第4步:调用Action的execute方法,该方法根据请求的参数 来执行一定的操作。第5步:依据Action的execute方法处理结果,导向不同的 URL。如在execute中验证用户,验证成功可以导向成功的页面 。否则重新登录Struts2框架的处理流程Struts2入门(login1.jsp)第1步:新建一个web工程,向工程中导入struts核心包。 提示:可以将包复制到WEB-INFlib目录中,MyEclipse直接将 包导入工程了。 commons-logging-1.0.4.jar、 freemarker-2.3.8.jar、 ognl-2.
11、6.11.jar、 Struts2-core-2.0.11.jar、 xwork-2.0.4.jarStruts2入门第2步:编写一个登陆界面login.jsp。注意使用Struts2的标签 。第3步:编写一个登陆成功后导向的页面 success.jsp.Struts2入门:第4步:在src目录中添加一个配置文件struts.xml。 在web服务器启动时读取该文件。Struts2入门:第5步:改写网站配置文件web.xml,添加Struts2过 滤器。有了过滤器Web服务器就可以将Struts2的控制器请求交 给struts组件进行处理。Struts2入门:第6步:建立控制器类LoginAc
12、tion,页面输入后导 向该Action。文件名为LoginAction.java。在Struts2中,控制器 类和普通类没有太大的区别,Action如果继承ActionSupport类 可以使用该父类中的一些功能如用户验证等。 package com.action; import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport/ Action类公用私有变量,用来做页面导航标志 private static String FORWARD = null; private St
13、ring username; private String password; public String getUsername() return username; public void setUsername(String username) this.username = username;public String getPassword() return password;public void setPassword(String password) this.password = password;public void validate() if (getUsername(
14、) = null | getUsername().trim().equals(“) /返回错误信息键值,user.required包含具体内容见messageResource.propertiesaddFieldError(“username“, getText(“user.required“);if (getPassword() = null | getPassword().trim().equals(“) addFieldError(“password“, getText(“pass.required“); /* execute方法为继承过来的方法,为控制器的核心方法,负责处理用户的请求操
15、作。用到了username,password,在这里username, password为外部传入数据,具体如何传入,看下面。execute方法的返回类型为字符串,根据返回值的结果可以到struts.xml配置文件中查找转向路径。*/public String execute() throws Exception username = getUsername(); /属性值即JSP页面上输入的 值 password = getPassword(); /属性值即JSP页面上输入的值try / 判断输入值是否是空对象或没有输入if (username.equals(“admin“) else /
16、根据标志内容导航到操作失败页面FORWARD = “input“; catch (Exception ex) ex.printStackTrace();return FORWARD; Struts2入门 第7步:在src目录创建一个属性文件。属性文件中描述了资源 文件名。文件名为struts.properties。内容为 struts.custom.i18n.resources=messageResource 第8步: 在src目录添加一个资源属性文件。该资源文件描述了 页面验证错误,错误提示信息。这里是unicode编码,所以中文 使用unicode编码。文件名为messageResource.propertiesuser.required=用户名必填pass.required=密码必填注意应该把上述“用户名必填“,