通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例.doc

上传人:啊飒飒 文档编号:10610688 上传时间:2021-05-25 格式:DOC 页数:27 大小:1,018KB
返回 下载 相关 举报
通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例.doc_第1页
第1页 / 共27页
通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例.doc_第2页
第2页 / 共27页
通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例.doc_第3页
第3页 / 共27页
通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例.doc_第4页
第4页 / 共27页
通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例.doc》由会员分享,可在线阅读,更多相关《通过代码实例跟我学Struts2框架从入门到精通——Struts2框架入门示例.doc(27页珍藏版)》请在三一文库上搜索。

1、杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料1.1 通过代码实例跟我学Struts2框架从入门到精通Struts2框架入门示例1.1.1 Struts2 框架的入门示例1、新建立一个Web项目 (1)项目名称为sshwebcrm、并且添加 JSTL标签库但最好将项目的J2EE系统库的版本选择为J2EE5.0版,以便能够应用MyEclipse的可视化帮助。(2)设置编译环境为JDK1.6Struts2默认需要Java5的运行环境,和支持Servlet API 2.4,JSP API 2.0的Web容器。2、在项目中添加图片等资源文件(1)各个资源文件所在的目录当然,如果没有这些资源文

2、件也是可以的,只是更符合实际的应用项目。(2)最终的结果目录及文件3、在项目中添加index.jsp页面 蓝梦集团CRM系统首页 这是蓝梦集团CRM系统(客户关系系统)的首页内容 在该页面中应用动作标签包含其它的公共资源文件,从而形成一个完整结构的页面。4、将项目部署到Tomcat服务器中5、部署和测试本示例(1)在浏览器中输入相关的URL地址(2)执行系统的首页,如果没有出现错误,则表明前面的环境搭建是正确的。1.1.2 手动构建出Struts2框架系统的Web应用环境1、在该项目中添加所需要的Struts2的各个系统*.jar包文件(1)主要的9个文件如下1) commons-fileup

3、load-1.2.2.jar2) commons-io-1.3.2.jar3) commons-lang-2.3.jar4) commons-logging-1.1.1.jar5) freemarker-2.3.18.jar6) javassist-3.11.0.GA.jar(Javassist是一个开源的分析、编辑和创建Java字节码的类库。通过使用Javassist对字节码操作为Struts2实现动态AOP框架)7) ognl-3.0.4.jarl struts2-core-2.3.1.2.jarl xwork-core-2.3.1.2.jarOGNL是Object-Graph Navig

4、ation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。(2)添加后的结果2、在项目的web.xml文件中添加Struts2的前端控制器StrutsPrepareAndExecuteFilter组件的部署项目(1)对于Struts2的2.1.6以上版的主要的配置项目如下struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrep

5、areAndExecuteFilter struts2 /* 注意:最好采用/* 形式的请求映射,否则如果改变为*.action 时,在进行表单映射时会出现下面的错误。(2)关于Action请求URL的后缀我们知道,在一般的Web框架中,前端控制器会将特定后缀的请求URL映射到对应的Action请求中。而我们这里的前端控制器会接受任意的请求,但它默认是将.action结尾的URL映射为Struts2的Action请求。我们可以在struts.properties文件中,设置我们自己的后缀名,多个后缀名可以用逗号隔开。例如:struts.action.extension=action,do另外A

6、ctionContextCleanUp类是用来与StrutsPrepareAndExecuteFilter协同工作来整合SiteMesh的,因此,当在Struts2的应用中需要整合SiteMesh时,通常都把ActionContextUp(SiteMesh模板所需要的过滤器组件)过滤器排在第一位,而将StrutsPrepareAndExecuteFilter排在第二位。注:SiteMesh OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration)的框架组件,能够帮助网站开发人员较容易实现页面中动态内容和静态装饰外观的

7、分离。该项目主页:http:/ 2框架能够为客户端进行请求服务。当然,默认条件下我们也可以只过滤*.action下的请求来使之工作(也就是可以把/*修改为*.action)。StrutsPrepareAndExecuteFilter是Struts2的主要的Filter过滤器组件,负责四个方面的功能:执行Actions、清除ActionContext、维护静态内容、清除request生命周期内的XWork的interceptors。(4)Struts2建立在Xwork之上,处理HTTP的请求和响应因此,所有的HTTP请求都会被它的前端控制器(FilterDispatcher)截获。前端控制器对请

8、求的数据进行包装,初始化上下文数据,根据配置文件查找请求URL对应的Action类,执行Action,将执行结果转发到相应的展现页面。由于Struts2支持多视图表示实现的技术,因此视图部分的具体实现形式可以使用JSP、Velocity、 FreeMarker、JasperReports和XML等形式。(5)Struts2.0中的标签库Struts2.0中所有的标签都在中定义,因此如果在JSP页面中需要应用Struts2.0中的标签库中的相关标签,则需要在JSP页面的开始标签处引用该。1.1.3 在项目中应用Struts2框架实现用户信息管理功能的应用实例1、在项目中添加一个userLogin

9、.jsp页面(1)添加userManage目录(2)在该目录中添加userLogin.jsp页面(3)设计该userLogin.jsp页面的内容 蓝梦集团CRM系统在线用户登录功能页面 输入右面的认证码: 用户类型: 前台用户 后台管理员 您的名称: 您的密码: 也可以部署和测试本页面的效果http:/127.0.0.1:8080/sshwebcrm/userManage/userLogin.jsp2、在userManage目录中再添加一个显示登陆成功的页面loginSuccess.jsp(1)loginSuccess.jsp页面(2)页面内容如下 蓝梦集团CRM系统在线登录成功信息显示页面

10、在这个页面中,使用了Struts 2的标签库来获取Action类中所定义的resultMessage成员属性。而其中的就是从地址/struts-tags下面寻找标签库(它定义在Struts 2库文件struts2-core-2.1.6.jar里面的文件META-INF/struts-tags.tld中。如下为文件中的部分内容:2.2.31.2s/struts-tags.大家可以注意到粗斜体的/struts-tags刚好与JSP文件引入taglib声明里面的uri属性匹配,这样就找到了对应的标签定义位置了。Tomcat等Web服务器会自动加载所有jar文件下的META-INF子目录下的.tld标

11、记定义文件,这也是为什么好多框架不需要把tld文件复制到WEB-INF目录下的原因。在 JSP页面中,Struts 2的标签库不需要在 web.xml 中定义,在页面中通过如下的代码直接引用: 上面的也可以写成作为变量的表达式语言最好应该放在%中,利用property 标签,它通过表达式语言,打印 Action 暴露出的数据对象。在这个文件的开头有下面的这么一段代码: 2.2.3 1.2 s /struts-tags . 大家可以注意到粗斜体的/struts-tags刚好与JSP文件引入taglib声明里面的uri属性匹配,这样就能够找到对应的标签定义的位置了。Tomcat等Web服务器会自动

12、加载所有jar文件下的META-INF子目录下的.tld标记定义文件,这也是为什么好多框架不需要把tld文件复制到WEB-INF目录下的原因。(3)尽可能用EL表达式和JSTL,而抛弃框架自带的那些非标准和容易变动的自定义标签库“面向标准”和“尽量独立于框架编程”是我们在应用框架时所应该把握的基本原则,“可维护性”和“移植性”远远好于绑定某个特定标签库的,开发不能只看眼前,要尽量多地考虑系统在以后的可能的扩展和维护方面的要求。可以将前面的改变为使用EL表达式将resultMessage属性的值读取出来。$requestScope.resultMessage。1.1.4 构建出示例项目中的控制层

13、Action组件类的应用实例1、添加系统中的Action组件类(类似Servlet组件)(1)类名称为UserInfoAction,包名称为com.px1987.sshwebcrm.action这可以通过选择菜单File New Class,或者点击工具栏上的按钮,在打开的新建类的对话框中,输入Package名称为com.px1987.struts2.action,而类名称UserInfoAction,点击Finish按钮后即可将此类创建。(2)在该Action组件类中添加一个属性、并提供get/set方法private String resultMessage;(3)重写该类中的execut

14、e方法Action代表一次请求或调用,在Struts2中的Action类一般都需要实现Action接口,或者直接继承基础类ActionSupport、并且要实现默认的execute方法,并返回一个在配置文件中定义的Result(也就是一个自定义的字符串而已)。当然,Action也可以只是一个POJO(普通Java对象),不用继承任何类也不用实现任何接口本示例采用该方式。(Plain Ordinary Java Objects)(Plain Old Java Object)。Action是一次请求的控制器,同时也可以充当数据模型(下面将要介绍的字段驱动的Action类)的角色,但不应该系统的业务

15、逻辑功能实现放在Action中由JavaBean组件实现。package com.px1987.sshwebcrm.action;public class UserInfoAction private String resultMessage;public String getResultMessage() return resultMessage;public void setResultMessage(String resultMessage) this.resultMessage = resultMessage;public UserInfoAction() public String

16、execute() resultMessage = 您好!您登陆成功!; return success;Struts2的Action处理完用户请求后,将返回一个普通字符串,整个普通字符串就是一个逻辑视图名(该名称将在struts.xml文件中进行配置定义,并与最终的物理视图实现产生联系)。Struts2通过配置逻辑视图名和物理视图资源之间的映射关系,一旦系统收到Action返回的某个逻辑视图名,系统就会把对应的物理视图资源呈现给浏览者。这样的实现方式,可以使得应用系统本身的显示输出与具体的物理显示实现相互分离。注意:Struts2中的action不再继承于任何类或需要实现任何接口(Struts

17、 2支持POJO形式的也就是普通Java类的Action),返回值不再是向Struts框架那样的“ActionForward”,而是String类型的一个名称。开发人员只要在编写的类中提供编写public java.lang.String execute() throws java.lang.Exception这个方法就可以了,无需继承或者实现其它任何接口。这样大大的方便了开发人员,从而使Action类更加的易于单元测试和独立于Web框架本身,便于以后的重用和迁移。该Action类没有调用任何一个 JavaServlet 的 API ,它是如何获得请求的数据并将执行结果暴露给输入页面的呢?它是

18、通过值堆栈和表达式语言来实现(后面将会进一步详细介绍)。8、在classes/struts.xml文件中对本Action组件类进行配置(1)添加一个struts.xml文件(也支持多配置文件)在项目的src目录下,添加一个名为struts.xml的文件,当项目发布以后,这个文件将会被复制到WEB-INF/classes下。这可以直接在src目录上点击右键,选择菜单New File,接着在弹出的对话框中的File name右侧输入框中输入文件名struts.xml,点击Finish按钮关闭对话框后,即可创建出一个空的struts.xml文件。 (2)该文件的内容如下(Struts2.1版) /u

19、serManage/loginSuccess.jsp 其中的“name”参数用于请求的 URL 。例如: http:/localhost:8080/userInfoAction.action/,这样通过请求的 URL,Struts2的系统程序就可以在配置文件中找到对应的目标实现的Action程序类。如果在JSP页面直接使用Struts2的表单标签,则可以直接使用Action的逻辑名称关联目标Action程序类。如下标签示例中的标签内的action属性值定义: 如果在Action的逻辑名称字符串中包含有“/”符号,比如示例标签:。此时需要在struts.xml配置文件中增加一个定义项目:。尽可能

20、在Action的逻辑名称字符串中不要包含有点号“.”和分隔符“-”,这些符号会导致名称产生歧义。但允许在Action的逻辑名称字符串中采用下划线。如果在标签中没有指定class属性值,如下示例标签: /userManage/loginSuccess.jsp等同于如下示例标签的效果,此时将应用com.opensymphony.xwork2.ActionSupport作为请求处理的Action程序类: /userManage/loginSuccess.jsp(3)理解标签的主要作用其中的是一个结果页面的定义,它用来指示Action执行之后,如何显示执行的结果。Result Type表示如何以及用哪

21、种视图技术展现结果。通过Result Type,Struts2可以方便的支持多种视图技术;而且这些视图技术可以互相切换,Action部分不需做任何改动。Result 的“ name ”对应 Action 方法返回的字符串。(4)注意默认的“result”名字(name)属性都为“success”在配置某个Action时,如果没有为其“result”定义一个名字(name)属性,则默认都为“success”(注意为小写)。Struts 2.0中的result是Struts 1.x中forward的别名。(5)利用项目来包含Struts2中默认的XML配置文件在Struts2中支持两种形式的“re

22、sult”定义:l 局部结果:将作为元素的子元素配置。l 全局结果:将作为元素的子元素配置。Struts 2.0有两个配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。 l struts.xml用于应用程序相关的配置 l struts.properties用于Struts 2.0的运行时(Runtime)的各种工作参数的配置(6)其次注意配置文件中出现了package它不同于Java中的package。主要是实现将Action分类,划分到不同的package中(包是一种用来对action, result, result type, 拦

23、截器, 以及拦截器栈进行组织,使它们成为一个逻辑上的配置单元的方式),更主要的是这些包之间可以互相继承,包括拦截器,action映射等等都可以继承。为Struts2中的包管理机制,通过Struts2的配置文件的包管理功能,可以实现对不同的Action类进行分块。(7)再次注意extends=struts-default这是个继承,那么继承的这个包定义在哪里呢?打开文件WEB-INF/lib/struts2-core-2.0.11.jar文件包里根目录下有个struts-default.xml文件里面定义了一个包:,它为我们的应用程序提供了大量的默认配置,Strus 2解析配置文件的时候,会自动

24、从类路径的根目录下依次先加载struts-default.xml里面的包定义,再解析我们自己编写的struts.xml。9、部署本系统(1)配置出Tomcat服务器和部署本Web系统(2)启动Tomcat服务器10、输入 http:/127.0.0.1:8080/sshwebcrm/userManage/userLogin.jsp(1)将能够看到下面的提示(2)点击提交按钮后的结果(3)执行的过程说明表单提交后,将产生出http:/127.0.0.1:8080/Struts2Web/userInfoAction.action请求,Struts运行时(Runtime)根据struts.xml里的

25、Action映射集(Mapping) 解析到name为userInfoAction的action定义,实例化UserInfoAction类,并调用其execute方法,并根据其返回值success到action定义处找到name为success的result定义,而它的真正地址是/userManage/loginSuccess.jsp,所以接着就跳转到JSP页面进行显示。11、Struts 2仍是以前端控制器框架为主体的(1)Actions仍然是通过URL触发的 (2)数据仍然是通过URL请求参数和Form参数传送到服务端的 (3)所有Servlet对象(如request、response和s

26、ession等)仍在Action类中可用 同时由于Struts Actions(扩展名“.do”)和Struts 2 Actions(扩展名“.action”)两者的扩展名命名空间不一样,所以Struts和Struts 2可以在同一个Web应用系统中无碍地共存。12、错误的情况一在Action类程序返回的“结果名称”和再配置文件中“定义的结果名称”不一致性。13、错误的情况二目标文件名不存在或者文件名称不正确14、错误的情况三请求的URL地址不正确。1.1.5 在应用Struts2框架时所必须的系统库*.jar包文件1、commons-fileupload-1.2.1.jar将出现下面的错误并且在页面中出现下面的错误2、commons-logging-1.0.4.jar3、freemarker-2.3.13.jar因此,freemarker-2.3.13.jar是可选的!1.1.6 体验标签中的name命名的规则1、name命名的规则 由开发者自己定义,但要求达到“见名知意”。2、可以定义多个不同名称的标签/errorDeal/showWebAppError.jsp杨教授工作室,版权所有,盗版必究, 27/27页

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1