struts2学习小结

[size=large]

什么是struts2?
    struts2是一个基于MVC架构的,用于Java web开发的一个框架. struts2的内核是基于webwork框架, 和struts1不同.


为什么要使用struts2?
      使用struts2可以提高开发效率, 因为struts2框架替使用者完成了绝大部分的参数传递工作, 提供了一套强大的struts标签,等等,极大的简化了开发过程.
      使用struts2还可以提高程序的可维护性和拓展性. 在后期的维护过程中, 给程序添加新的功能会因为使用了struts2而变得十分方便: 只需要添加新的action组件并配置, 而不需要修改原来的代码. 若只使用servlet, 则需要修改servlet类的代码.


struts2的工作流程
     1.浏览器向服务器发送请求, 由struts2的控制器处理;
     2.控制器创建值栈, 初始化context;
    3.控制器根据struts.xml文件中的信息创建相应的interceptor和action对象,并将action对象放入值栈栈顶.
    4.控制器依次调用interceptor,action,results组件完成请求处理;
     5.解析jsp页面中的标签,生成静态页面
     6.执行拦截器的后续操作
     7.将响应页面输出给客户端.


基本使用方法:
    1.在web.xml文件中添加过滤器:
<filter>
<filter-name>struts_filter</filter-name>
<filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts_filter</filter-name>
<url-pattern>/*</url-pattern>  	
</filter-mapping>


    2.在src下创建struts.xml文件
    3.编写action类处理请求
    4.在struts.xml文件中配置action
   5.若有拦截器, 添加拦截器类并在struts.xml中配置
    6.调试.


      使用框架时都有一个不可避免的工作-----配置文件.相比于hibernate, struts2配置文件的结构较为简单(但hibernate的配置文件大部分可以自动生成,只有很小的一部分需要自己写).
      下面详细介绍struts.xml文件的基本配置.

<struts>	
<package name="" extends="" namespace="">
<action name="" class="">
<result name="" type=""></result>
</action>
<action name="" class="">
<result name="" type=""></result>
</action>
</package>
</struts>


      一个package 包含一组action.  name属性指定它的包名. namespace指定它的命名空间, 默认为"/", 即整个应用程序. 当明确指定namespace后, 在访问该包下的action时, 必须在url中的action名字前加上namespace. 比如,一个action的名字为regist, 它所在包的命名空间为"/user", 则访问这个action的url为:域名/应用名/user/regist.action.  extends属性指定package继承的xml, 一般为struts-default, 但若需要使用json类型的result,则应继承于json-default. (json-default也继承于struts-default).name和extends为必写属性.

      action的name和class属性分别对应于action的名字和类.控制器根据action的name找到它对应的类, 并创建实例.它还有一个method属性, 指定调用action类的哪个方法, 默认为execute()方法.

      result的name默认为"success", type指定result的类型, struts2框架提供了十种现成的类型, 有redirect, redirectAction, dispatcher, stream,chain等, 默认为dispatcher,即转发. 标签的值为目的页面,可以是一个JSP页面, 也可以为另一个action. 假如一个action中有一个这样的result组件
<result name="success">/WEB-INF/list.jsp</result>

      当action的execute方法(或其它指定的业务处理方法)返回值为"success"时, action 中的属性值就能通过转发的方式到达 /WEB-INF/list.js p页面.


      在web应用中一般会把JSP文件放在web-inf目录下, 而这个目录下的文件不能通过URL直接访问,比如路径app/WEB-INF/jsp/regist.jsp,  通过域名/app//WEB-INF/jsp/regist.jsp  访问regist.jsp会报404错误(找不到页面). 若要直接访问此JSP页面,必须在struts.xml文件中为其定义一个简化版的action.
<action name="regist">
	<result>/WEB-INF/jsp/regist.jsp</result>
</action>


      这个action元素没有class属性, result的name默认为"success". 此时regist.jsp 页面的访问方式为:  ...../app/regist.action.
当然,也可以费力不讨好地为它单独写一个类, execute方法里只需写一句:
return  "success" ; 
[/size]

猜你喜欢

转载自keepcrazy.iteye.com/blog/1748568