首页 > 代码库 > Struts===

Struts===

Struts2是在WebWork2基础上发展而来的,和struts1一样,struts2也属于MVC框架。不过有一点大家需要注意的是:尽管Struts2和Struts1在名字上的差别不是很大,但是Struts2和Struts1在代码风格上几乎是不一样的。那么既然有Struts1,为何还要推出Sturts2?
1>在软件设计上Struts2没有像Struts1那样个ServletApi跟SturtsApi有着紧密的耦合,Struts2的应用可以不依赖于ServletApi和StrutsApi,Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。
public class OrderListAction extends Action
{
public ActionForward execute(ActionMapping mapping ,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception{

}
}
2>Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截功能
3>Struts2提供了类型转换器,我们可以把特殊的请求参数转换为需要的类型,在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。
4>Struts2提供支持多种表现层技术,如:JSP,freeMaiker,Velocity等等。
5>Struts2的输入校验可以对指定的方法进行校验,解决了Struts1长久之痛。
6>提供了全局范围,包范围和Action范围的国际化资源文件管理实现。

搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做一下几个步骤的工作
1》找到开发Struts2应用需要的jar文件
2》编写Struts2的配置文件
3》在web.xml中加入Sturts2 MVC 框架启动配置
搭建Struts2开发环境--开发Struts2应用依赖的jar文件
struts1-core-2.x.x.jar:Struts2框架的核心类库

xwork-2.x.x.jar:xwork类库,Struts2在其构建
ognl-2.6.x.jar:对象图导航语言,struts2框架通过其读写对象的属性
freemarker-2.3.x.jar:struts2的UI标签的模板使用FreeMarker编写
commons-logging-1.1.x.jar:ASF出品的日志包,Struts2框架使用这个日志包支持Log4J和JDK1.4的日志记录
commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此文件
Struts2应用的配置文件
Struts2默认的配置文件为struts.xml,该文件需要存放在web-inf/classes下,该文件的配置模板如下:
Struts2在web中的启动配置
在struts1.x中,struts框架是通过Servlet启动的,在struts2中,struts框架是通过Filter启动的,他在web.xml中的配置如下
在strutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml,完成初始化操作。
注意,struts2读取到struts.xml的内容后,以javabean形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件
Struts.xml配置中的包的介绍
在struts2框架中使用包来管理Action,包的作用和java中的类包是非常相似的,它主要用于管理一组业务功能先关的action,在实际应用中,我们应该把一组业务功能相关的action,在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。
配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,他不对应java的类包,如果其他包要继承该包,必须通过该属性进行引用,包的namespace属性用于定义该包的命名空间,命名空间作为访问该包下Action的路径的一部分,如访问上面例子的Action,访问路径为:/test/helloworld.action。namespace属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为""。(空字符串)
通常每个包都应该继承struts-default包,因为struts2很多核心的功能都是拦截器来实现的,如:从请求中把请求参数封装到action,文件上传和数据验证等等都是通过拦截器来实现的,可以这么说,当包继承了struts-default才能使用struts2提供的核心功能,struts-default包是在strust2-core-2.x.x.jar文件中的struts-default.xml中定义。struts-default.xml也是struts2默认配置文件。Struts2每次都会自动加载struts-default.xml文件。
包还可以通过abstract="true"定义为抽象包,抽象包中不能包含action。

Action名称的搜索顺序
1,获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action
2,首先寻找namespace为/path1/path2/path3的package,如果不存在这个package则执行步骤3:如果存在这个package,则在这个package中寻找名字为test的action,当该package下寻找不到action时就会直接跑到默认的namespace的package里面寻找action(默认的命名空间为空字符串),如果在默认namespace的package里面还寻找不到该action,页面提示找不到action。

 

<package name="itcast" namespace="/test" extends="struts-default">
<action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
1》如果没有为action指定class,默认是ActionSupport。
2》如果没有为action指定method,默认执行action中的execute()方法。
3》如果没有指定result的name属性,默认值success。

Struts===