第03章Struts2应用课堂.ppt
《第03章Struts2应用课堂.ppt》由会员分享,可在线阅读,更多相关《第03章Struts2应用课堂.ppt(102页珍藏版)》请在三一文库上搜索。
1、1,Java EE应用技术基础,济南大学信息学院 刘鹍 ,2,第3章 Struts 2应用,3.1 Struts 2概述 3.2 Struts 2基本应用及工作流程 3.3 Struts 2标签库应用 3.4 Struts 2拦截器 3.5 Struts 2国际化应用 3.6 Struts 2文件上传 3.7 Struts 2综合应用实例添加学生信息,3,3.1 Struts 2概述,3.1 Struts 2概述,3.1.1 MVC简介 MVC有以下优点: 多个视图可以对应一个模型。 模型返回的数据与显示逻辑分离。 应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。 控制层的概念也
2、很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求,因此控制层可以说是包含了用户请求权限的概念。 MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。,5,3.1.2 Struts 2体系结构,Struts 2的基本流程如下: Web浏览器请求一个资源。 过滤器Dispatcher查找请求,确定适当的Action。 拦截器自动对请求应用通用功能,如验证和文件上传等操作。 Action的execute方法通常用来存储和(或)重新获得信息(通过数据库)。 结果被返回到浏览器。可能是HTML、图片、PDF或其他。,6
3、,3.1.2 Struts 2体系结构,Struts 2框架的应用着重在控制上。简单的流程是:页面控制器页面。最重要的是控制器的取数据与处理后传数据的问题。Struts 2的体系结构还可以参考图3.1,更直观地展现出其流程。,图3.1 Struts 2体系结构,7,3.2 Struts 2基本应用及工作流程,8,3.2 Struts 2基本应用及工作流程,3.2.1 简单Struts 2实例开发 1. 下载Struts 2框架 MyEclipse 6没有对Struts 2的支持,所以需要用户自己下载Struts 2开发包。登录http:/struts.apache.org/下载Struts 2
4、完整版,本书使用的是Struts 2.0.14。将下载的Zip文件解压缩,它是一个典型的Web结构。打开其文件夹,里面包含以下4个文件: apps:包含基于Struts 2的示例应用,是学习Struts 2非常有用的资料。 docs:包含Struts 2的相关文档,如Struts 2快速入门、Struts 2文档、API文档等内容。 lib:包含Struts 2框架的核心类库,以及Struts 2的第三方插件类库。 src:包含Struts 2框架的全部源代码。 2. 建立一个Web项目 打开MyEclipse,建立一个Web项目,命名为“Struts 2.0”。,9,3.2.1 简单Stru
5、ts 2实例开发,3. 加载Struts 2基本类库 下面把这几个类库添加到项目中。 右击项目名,选择【Build Path】【Configure Build Path】菜单项,出现如图3.2所示的对话框。单击【Add External JARs】按钮,进入下载的Struts 2目录的lib文件夹,选中上面的5个Jar包,单击【OK】按钮完成类库的添加。,图3.2 添加Struts 2的Jar包,10,3.2.1 简单Struts 2实例开发,4. 修改web.xml文件 打开项目中的WebRoot/WEB-INF/web.xml文件,修改其代码如下:, struts 2 org.apache
6、.struts2.dispatcher.FilterDispatcher struts 2 /* ,11,3.2.1 简单Struts 2实例开发,5. 创建hello.jsp 选择【WebRoot】【new】【jsp】菜单项,在File Name中输入文件名“hello.jsp”,修改后的代码如下:, struts 2应用 请输入姓名: ,12,3.2.1 简单Struts 2实例开发,6. Action实现类 右击src文件夹,选择【new】【Package】菜单项,在name框中输入包名“org.action”,右击该包,依此类推,建立class,命名为“StrutsAction”,修改
7、后的代码如下:, public class StrutsAction extends ActionSupport private String name; public String getName() return name; public void setName(String name) this.name=name; public String execute() throws Exception if(!name.equals(“HelloWorld“) Map request=(Map)ActionContext.getContext().get(“request“); reque
8、st.put(“name“,getName(); return “success“; else return “error“; ,13,3.2.1 简单Struts 2实例开发,7. 创建并配置struts.xml文件 任何一个Struts 2程序都不能缺少struts.xml文件,它是Struts 2运行的核心。右击src文件夹,选择【new】【file】菜单项,在File name框中输入“struts.xml”,修改后的代码如下:, /welcome.jsp /hello.jsp ,14,3.2.1 简单Struts 2实例开发,8. 创建welcome.jsp 创建welcome.js
9、p,其步骤和上面创建hello.jsp类似,这里不再重复叙述。其代码如下:, struts 2应用 hello ! ,15,3.2.1 简单Struts 2实例开发,9. 部署和运行 启动Tomcat后,在浏览器中输入“http:/localhost:8080/Struts2.0/hello.jsp”,会看到如图3.3所示的界面。当在输入框中输入“张三”时,会出现如图3.4所示界面。如果输入“HelloWorld”,就会返回当前页面。,图3.3 运行界面 图3.4 运行成功界面,16,3.2.2 Struts 2工作流程及各种文件详解,1. Struts 2的工作流程 Struts 2框架中的
10、配置文件struts.xml会起映射作用,它会根据“*”来决定调用用户定义的哪个Action类。例如在项目Struts 2.0中,请求为struts.action,前面“*”的部分是“struts”,所以在struts.xml中有个Action类的name为“struts”,这表示该请求与这个Action来匹配,就会调用该Action中class属性指定的Action类。但是在Struts 2中,用户定义的Action类并不是业务控制器,而是Action代理,其并没有和Servlet API耦合。所以Struts 2框架提供了一系列的拦截器,它负责将HttpServletRequest请求中的
11、请求参数解析出来,传入到用户定义的Action类中。,17,3.2.2 Struts 2工作流程及各种文件详解,2. Struts 2中各种文件详解 (1)web.xml文件 后面的webapp标签中配置了下面这样一段: 可以看出,里面配置了一个过滤器,那么就先来介绍过滤器的使用。 Filter过滤器是Java项目开发中的一种常用技术。它是用户请求和处理程序之间的一层处理程序。它可以对用户请求和处理程序响应的内容进行处理,通常用于权限控制、编码转换等场合。, struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* ,1
12、8,3.2.2 Struts 2工作流程及各种文件详解,所有过滤器必须实现java.Serlvet.Filter接口,这个接口中含有3个过滤器类必须实现的方法: init(FilterConfig):Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。 doFilter(ServletRequest,ServletResponse,FilterChain):完成实际的过滤操作,当用户请求与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法,返回响应之前也会调用此方法。FilterChain参数用于访问过滤器链上的下一个过滤
13、器。 destroy():Servlet容器在销毁过滤器实例前调用该方法,这个方法可以释放Servlet过滤器占用的资源,过滤器类编写完成后,必须要在web.xml中进行配置,格式如下:, 过滤器名 过滤器对应类 参数名称 参数值 ,19,3.2.2 Struts 2工作流程及各种文件详解,过滤器的关联方式有3种:与一个URL关联、与一个URL目录下的所有资源关联、与一个Servlet关联。 与一个URL资源关联: 与一个URL目录下的所有资源关联: 与一个Servlet关联:, 过滤器名 xxx.jsp , 过滤器名 /* , 过滤器名 Servlet名称 ,20,3.2.2 Struts
14、2工作流程及各种文件详解,(2)struts.xml文件 struts.xml文件通常放在Web应用程序的WEB-INF/classes目录下,该目录下的struts.xml将被Struts 2框架自动加载。 struts.xml文件是一个XML文件,文件前面是XML的头文件,然后是标签,位于Struts 2配置的最外层,其他标签都是包含在它里面的。 (3)package元素 与Java中的包不同的是,Struts 2中的包可以扩展另外的包,从而“继承”原有包的所有定义,并可以添加自己包的特有配置,以及修改原有包的部分配置。从这一点上看,Struts 2中的包更像Java中的类。package
15、有以下几个常用属性: name:该属性是必选的,指定包的名字,这个名字将作为引用该包的键。 extends:该属性是可选的,允许一个包继承一个或多个先前定义的包。 abstract:该属性是可选的,将其设置为true,可以把一个包定义为抽象的。 namespace:该属性是可选的,将保存的action配置为不同的名称空间。,21,3.2.2 Struts 2工作流程及各种文件详解,例子:, /foo.jsp /bar.jsp /moo.jsp /bar.jsp ,22,3.2.2 Struts 2工作流程及各种文件详解,(4)Action元素 当一个请求匹配到某个Action名字时,框架就使用
16、这个映射来确定如何处理请求。 如果一个请求要调用Action类中的其他方法,就需要在Action配置中加以配置。例如,如果在org.action.StrutsAction中有另外一个方法为: 那么如果想要调用这个方法,就必须在Action中配置method属性,其配置方法为:, /welcome.jsp /hello.jsp ,public String find() throws Exceptionreturn SUCCESS;, /welcome.jsp /hello.jsp ,23,3.2.2 Struts 2工作流程及各种文件详解,(5)result元素 一个result代表一个可能的
17、输出。当Action类中的方法执行完成时,返回一个字符串类型的结果代码,框架根据这个结果代码选择对应的result,向用户输出。 param中的name属性有两个值: location:指定逻辑视图。 parse:是否允许在实际视图名中使用OGNL表达式,参数默认为true。 result中的name属性有如下值: success:表示请求处理成功,该值也是默认值。 error:表示请求处理失败。 none:表示请求处理完成后不跳转到任何页面。 input:表示输入时如果验证失败应该跳转到什么地方(关于验证后面会介绍)。 login:表示登录失败后跳转的目标。, 参数值 ,24,3.2.2 S
18、truts 2工作流程及各种文件详解,type(非默认类型)属性支持的结果类型有以下几种:,chain:用来处理Action链。 chart:用来整合JFreeChart的结果类型。 dispatcher:用来转向页面,通常处理JSP,该类型也为默认类型。 freemarker:处理FreeMarker模板。 httpheader:控制特殊HTTP行为的结果类型。 jasper:用于JasperReports整合的结果类型。 jsf:JSF整合的结果类型。 redirect:重定向到一个URL。 redirect-action:重定向到一个Action。 stream:向浏览器发送InputS
19、tream对象,通常用来处理文件下载,还可用于返回AJAX数据。 tiles:与Tiles整合的结果类型。 velocity:处理Velocity模板。 xslt:处理XML/XLST模板。 plaintext:显示原始文件内容,如文件源代码。,25,3.2.2 Struts 2工作流程及各种文件详解,redirect-action类型用于当一个Action处理结束后,直接将请求重定向到另一个Action。如下列配置:, /welcome.jsp /hello.jsp struts ,26,3.2.2 Struts 2工作流程及各种文件详解,(6)ActionSupport类 ActionSu
20、pport类为Action提供了一些默认实现,主要包括预定义常量、从资源文件中读取文本资源、接收验证错误信息和验证的默认实现。 下面是ActionSupport类所实现的接口: Action接口同样位于com.opensymphony.xwork2包,定义了一些常量和一个execute()方法。,public interface Action public static final String SUCCESS=“success“; public static final String NONE=“none“; public static final String ERROR=“error“;
21、 public static final String INPUT=“input“; public static final String LOGIN=“login“; public String execute() throws Exception; ,public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider,Serializable ,27,3.2.2 Struts 2工作流程及各种文件详解,由于3.2.1节的例子中继承了ActionSu
22、pport类,所以可以看出,在execute的返回值中,其代码可以改为:, public String execute() throws Exception if(!name.equals(“HelloWorld“) Map request=(Map)ActionContext.getContext().get(“request“); request.put(“name“,getName(); return SUCCESS; else return ERROR; ,public interface Action public static final String SUCCESS=“succe
23、ss“; public static final String NONE=“none“; public static final String ERROR=“error“; public static final String INPUT=“input“; public static final String LOGIN=“login“; public String execute() throws Exception; ,28,3.2.3 Struts 2数据验证及验证框架的应用,1. 数据校验 下面来看其实现,可以把3.2.1节的例子中的Action类改写成。 如果执行该方法之后,Acti
24、on类的fieldErrors中已经包含了数据校验错误信息,将把请求转发到input逻辑视图处,所以要在Action配置中加入以下代码:, /welcome.jsp /hello.jsp /hello.jsp ,29,3.2.3 Struts 2数据验证及验证框架的应用,把JSP页面改写一下(标签的具体应用会在3.3节具体讲解):, struts 2 ,30,3.2.3 Struts 2数据验证及验证框架的应用,修改之后,部署运行。不输入任何姓名直接提交,将会看到如图3.5所示的界面。,图3.5 校验结果,31,3.2.3 Struts 2数据验证及验证框架的应用,2. Struts 2验证框
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 03 Struts2 应用 课堂
链接地址:https://www.31doc.com/p-2503649.html