概述:Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于MVC框架。不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的。
一、搭建Struts2环境时,我们一般需要做以下几个步骤的工作:
a) 找到开发Struts2应用需要使用到的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),struts2框架通过其读写对象的属性
freemarker-2.3.x.jar :Struts 2的UI标签的模板使用FreeMarker编写
commons-logging-1.1.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后必须加入此文件
javassist-3.11.0.GA.jar、commons-lang-2.5.jar、commons-io-2.0.1.jar
b) 编写Struts2的配置文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
c) 在web.xml中加入Struts2 MVC框架启动配置
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
二、struts文件中的配置
a) Package包的简介及属性简介
name:配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,
他不对应java的类包,如果其他包要继承该包,必须通过该属性进行引用。
namespace 属性用于定义该包的命名空间,命名空间作为访问该包下的Action的路径的一部分
例如:/test/helloworld.action。 namespace属性可以不配置
extends 必须的 继承 struts-default定义了这些拦截器和Result类型。
包还可以通过abstract=“true”定义为抽象包,抽象包中不能包含action。
-->
<package name="test" extends="struts-default" namespace="/cs"></package>
b) Action便签及属性
<action></action>
name属性表示构成访问action的路径, 这个例子访问路径应该是 cs/hello
也可以在后面加上.action访问
class 指定action的java类,带包名 如果不指定,默认会指向ActionSupport
method :指定方法名 如果不指定默认的是execute
c) Result标签及属性
name:需要在指定的方法中返回的字符串 默认的是SUCCESS
type :执行跳转页面的类型 默认是dispatcher 指定的是jsp 其他可在struts-default.xml中找到标签体内action执行后跳转的页面
Chain 指定的是执行完自己的方法后跳转到指定的action中,标签内应该指定对应的action的name属性,不可以带参数、
D)设置全局的result
<global-results>
<result name="msg">./index.jsp</result>
</global-results>
如果指定上在下面的action标签中则不用指定result标签。如果返回的结果是msg就可以使用全部的results属性了
四、action类中的写法
A)在action类中。需要继承ActionSupport这个类,在action标签内指定的method方法与类中的自定义方法名应相同,返回类型必须是string,如果返回是SUCCESS,则可以在result中的name可以缺省,也可以返回自定义的字符串。
B)依赖注入,在action中设置相应的属性,这个属性如果设置对应的set方法,就表示使用set方法注入进来,但是属性名需要跟对应的jsp中input中的name属性一致。
C)将对应的值传入jsp页面,需要设置对应的属性的get方法,需要给它赋值,就可以在对应的jsp页面中得到这个数据