一,struts2的简介
struts2是在webWork2的基础上发展而来的,和struts1一样,struts2也是属于MVC框架,但是struts2不是struts1的升级版,尽管在名字上面很让人这么觉得;
struts2中的Action是线程安全的,struts1的线程是线程不安全的;
strust2的优点:
1,无侵入式:struts2不和struts1一样,struts2不依赖于ServletAPI;
2,struts2的拦截器,利用拦截器可以进行AOP编程,如权限的控制
3,struts2提供了类型转换器
4,支持多种表现层技术:jsp,freeMarker,Velocity等
5,struts2的校验功能可以对指定的方法校验
6,提供了全局范围,包范围和Action访问的国际化资源文件管理实现
二,struts2的开发环境的搭建
1,拷贝相应的jar包
struts2-core-2.x.x.jar: struts2框架的核心类库
xwork-2.x.x.jar:xwork类库,struts2在其上构建
ognl-2.x.x.jar:对象导航语言,struts2通过其读写对象的属性
freemarker-2.x.x.jar:struts2的ui标签模板使用FreeMarker编写
commons-logging-1.x.x.jar:ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后必须加入此文件
commons-io-1.x.x.jar 用于文件上传是的一个工具类的实现
2,在类文件夹下建立struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//ApacheSoftware Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!—- 这里要注意的是namespace里面要以/开头 -->
<package name="… " namespace="/… " extends="struts-default">
<action name="…" class="… " method="…" >
<result name="… ">…. </result>
</action>
</package>
<!— 配置多个配置文件 -->
<include file="struts-user.xml"/>
<includefile="struts-order.xml"/>
</struts>
3,在web.xml中配置
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.action</url-pattern>
<!-- 注意要大写,这里如果不配置FORWARD那么就不能使用<jsp:forward/> 标签了
-->
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
注意,在struts2中是配置过滤器,但是在struts1中是使用的Servlet的配置
三,Action的搜索顺序
假如说url地址为:http://localehost:8080//工程名/path1/path2/path3/test.action
那么
1,首先去找namespace=”/path1/path2/path3”的package下的Action
2,如果在上一步找不到,那么再去找namespace=”/path1/path2”的package下面的Action
3,如果上一步还是没有找到,那么就去找namespace=”/path1”的package下面的Action
4,如果上一步还是没有找到,那么就会去默认的package下找,也就是没有写namespace属性的或者写了namespace=”/”的
5,再找不到,就会在页面提示找不到Action
四,配置<action>中的默认值
<package name="hwt" namespace="/test"extends="struts-default">
<action name="helloworld" >
<result>/WEB-INF/page/hello.jsp</result>
</action>
</package>
1>如果没有为action指定class,默认是ActionSupport。
2>如果没有为action指定method,默认执行action中的execute() 方法。
3>如果没有指定result的name属性,默认值为success。
为Action中的属性注入值:
在有的时候,我们要为Action里面的值注入属性,可以便于以后的修改,比如说配置路径:
<action name="test2" class="hwt.action.Demo2Action"method="testType">
<paramname="path">/WEB-INF/upload</param>
<result name="source"type="plainText">
<param name="location">/show.jsp</param>
<param name="charSet">UTF-8</param><!-- 指定读取文件的编码 -->
</result>
</action>
五,<result/> 中的转发类型
·dispatcher(默认):转发到页面
·redirect :重定向到页面,与dispatcher相对应
·chain:转发到另一个Action,带上参数
·redirectAction:重定向到另一个Action,不带参数
·plainText:显示原始文件内容,例如:当我们需要原样显示jsp文件源代码的时候,我们可以使用此类型
<result name="source"type="plainText ">
<paramname="location">/xxx.jsp</param><!—需要读取的页面-->
<paramname="charSet">UTF-8</param><!-- 指定读取文件的编码 -->
</result>
·stream:流的形式传输;在下载的时候会用到,后面讲文件下载的时候会讲到