第八struts2.0.ppt_第1页
第八struts2.0.ppt_第2页
第八struts2.0.ppt_第3页
第八struts2.0.ppt_第4页
第八struts2.0.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,本讲主要内容,主要内容 1.了解Struts2 2. 搭建Struts2环境 3.建立一个简单的基于Struts2的 Web应用程序,2,了解Struts2.0,Struts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全不同于Struts1.x的方式(当然,Struts2仍然是基于MVC模 式的,也是动作驱动的)。Struts2在xwork基础上发展进来的WEB框架,利用了xwork的先进解决方案,加上Struts长期聚积的名声和人气,合二为一,形成Struts2. Struts2的源代码中很多都是直接使用的xwork(Webwork的核心技术)的包。 Struts2需要的

2、类包:struts2-core-.jar xwork-2.0.4.jar commons-logging-1.0.4.jar freemarker-2.3.8.jar ognl-2.6.11.jar commons-fileupload-1.2.1.jar,3,Struts2的体系结构,4,Struts2特点,基于Action的MVC框架 拥有由积极活跃的开发人员与用户组成的成熟社区 Annotation和XML配置选项 基于POJO并易于测试的 Action 与Spring,SiteMesh 和Tiles的集成 与OGNL达式语言的集成 基于主题的标签库与Ajax标签 多种视

3、图选项(JSP,Freemarker,Velocity 和 XSLT) 使用插件来扩展或修改框架特性,Struts2的过滤器和拦截器充当控制器的角色(拦截请求、流程控制) Action组件充当模型(封装数据、处理业务) JSP页面或其他模板充当视图结果,5,Struts2基本的工作原理: 由Struts框架的过滤器StrutsPrepareAndExecuteFilter (早些版本为FilterDispatcher)拦截所有请求,如果请求的是Action组件,则按照默认的拦截器栈中的配置的拦截器(在struts.xml文件中配置)逐个对请求进行拦截处理,其中params拦截器可将请求中的参数

4、信息封装到Action组件对应的属性中 拦截器处理完毕,会调用Action组件的默认业务方法execute()进行业务请求处理 最后根据业务方法返回结果值来选择适当的视图,视图页面可从Action组件中的属性中获取处理结果并显示以回应客户端。,6,1 struts2的环境搭建,1.1开发Struts2依赖的jar 到下载struts-2.x.x-all.zip(最新版本为struts-2.1.8),目前最新版为2.1.8。下载完后解压文件,开发struts2应用需要依赖的jar文件在解压目录的lib文件夹下。不同的应用需要的JAR包是不同的。下面给

5、出了开发Struts 2程序最少需要的JAR。 struts2-core-2.x.x.jar :Struts 2框架的核心类库 xwork-2.x.x.jar :XWork类库,Struts 2在其上构建 ognl-2.6.x.jar :对象图导航语言(Object Graph Navigation Language),Struts 2框架使用的一种表达式语言 freemarker-2.3.x.jar :Struts 2的UI标签的模板使用FreeMarker编写 commons-logging-1.1.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JD

6、K 1.4+的日志记录。 Commons-fileupload,用于文件上传 拷备到你所建的工程的lib目录下,7,1.2 Struts2的启动配置 在struts1.x中, struts框架是通过Servlet启动的。在struts2中,struts框架是通过Filter启动的。他在web.xml中的配置如下: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* 注意: struts2读取到struts.xml的内容后,会将内容封装进javabean对象并存放在内存中

7、,对于用户每次请求的处理将使用内存中的数据,而不是每次请求都读取struts.xml文件,8,1.3 Struts2的配置文件struts.xml 注意:该文件需自己建立并放在你的工程的src目录下,9,2. 建立第一个struts2程序,2.1 建立步骤 新建一个web工程,名称为struts2first 拷贝相关的jar包到工程的lib目录下 配置web.xml文件(启动struts2) 建立一个Action类(普通类,pojo) 新建一个struts.xml文件(注意位置放在src目录下),配置刚才建立的Action类 发布调试程序,10,2.2 例子中使用到的com.action.He

8、lloWorldAction类如下: public class HelloWorldAction private String message; public String getMessage() return message; public void setMessage(String message) this.message = message; public String execute() throws Exception this.message = 我的第一个struts2应用; return success; ,11,2.3 例子中使用到的hello.jsp如下: 第一个st

9、ruts2应用 $message 使用EL表达式访问Action中的属性。 ,12,2.4 在Struts.xml配置包, /hello.jsp 在struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。配置包时必须指定name属性,如果其他包要继承该包,必须通过该属性进行引用。 包的namespace属性用于定义该包的命名空间。该属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“”(空字符串)。 通常每个包都应该继承struts-de

10、fault包, struts-default包是由struts内置的,它定义了struts2内部的众多拦截器和Result类型。Struts2很多核心的功能都是通过这些内置的拦截器实现的。如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了struts-default包才能使用struts2提供的这些功能。 struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义。 struts-default.xml也是Struts2默认配置文件。 Struts2每次都会自动加载 struts

11、-default.xml文件。 包还可以通过abstract=“true”定义为抽象包,抽象包中不能包含action。,13,2.5 发布和调试程序,发布程序 在浏览器中输入: http:/localhost:8080/ struts2first/helloworld.action,14,2.6 思考(1),配置文件中增加namespace /hello.jsp 此时浏览路径该如何? 用于Action模块化管理,在package中,不能有相同名称的action,但是不同的命名空间中允许有相同名称的action,了解Action名称的搜索顺序。,15,Action名称的搜索顺序,1获得请求路径的

12、URI,例如url是:http:/server/struts2test/path1/path2/path3/test.action 2首先寻找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,如

13、果存在这个package,则在这个package中寻找名字为test的action,如果仍然不存在这个package,就去默认的namaspace的package下面去找名字为test的action,如果还是找不到,页面提示找不到action。,16,2.6 思考(2),对于hello.jsp,正常流程是通过helloworld.action跳转,试试是否可以直接浏览,即输入http:/localhost:8080/struts2test/hello.jsp 如何能避免客户做类似这样的操作,最简单的做法 把文件放在/WEB-INF/目录下 注意:此时在struts.xml文件中配置该如何修改?

14、,17,3 请求参数接收,在Action类中定义与请求参数同名属性,便能够使struts2自动接收请求参数并赋予同名属性。 (1)表单中输入的数据接收 实现系统登录例子 (i)不采用JavaBean (ii)采用JavaBean (2)请求中的参数 如:http:/localhost:8080/struts2test/test.action?id=6,如何在action中获取id值?,18,补充,也可以这么获取,但不建议这样做HttpServletRequest request = ServletActionContext.getRequest(); System.out.println(re

15、quest.getParameter(“id); (3)执行action下的其他方法,非execute方法 方法1:在Action中定义多个与execute功能相似的方法(方法名不同),通过下面的方式进行访问: action名!方法名.action 方法2:使用*达到通配效果 /action,看下面例子,19,使用通配符定义action, /WEB-INF/page/hello.jsp public class HelloWorldAction private String message; . public String execute() throws Exception this.mes

16、sage = 我的第一个struts2应用; return success; public String other() throws Exception this.message = 第二个方法; return success; 要访问other()方法,可以通过这样的URL访问:/struts2test/helloworld_other.action,20,4 struts.xml的一些常用配置,struts.xml文件的主要作用: 就是配置Action和请求之间的对应关系,并匹配逻辑视图(在Action中返回的String值)名和物理视图资源(就是自己写的JSP页面)之间的对应关系; 配

17、置常量 导入其它配置文件 。,21,4.1 指定需要Struts 2处理的请求后缀 StrutsPrepareAndExecuteFilter(FilterDispatcher)是Struts 2框架的核心控制器,它负责拦截由/*指定的所有用户请求,当用户请求到达时,该Filter会过滤用户请求。默认情况下,如果用户请求的路径以.action结尾,该请求将被转入Struts 2框架处理,否则该请求将略过Struts 2框架的处理。 默认处理的后缀是可以通过常量”struts.action.extension“进行修改的,如下面配置Struts 2只处理以.do为后缀的请求路径: 如果用户需要指

18、定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如: ,22,常用类似的相关常量配置 (1)中文乱码 注:I18N作为“国际化”的简称,其来源是英文单词 internationalization的首末字符i和n。18为中间的字符数。 (2) 该属性设置是否每次HTTP请求到达时,系统都重新加载资源文件。该属性默认值是false。在开发阶段将该属性设置为true会更有利于开发,但在产品发布阶段应将该属性设置为false。 除此外,还有很多设置属性.,23,4.2 指定多个配置文件,在大部分应用里,随着应用规模的增加,系统中Action数量也大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过元素指定多个配置文件: 通过这种方式,我们就可以将Struts 2的Action按模块配置在多个配置文件中。,24,4.4 在Struts.xml配置Action的result, /WEB-INF/page/hello.jsp result配置类似于struts1中的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论