struts2学习小结[sizelarge]什么是struts2?struts2是一个基于MVC架构的,用于Java web开发的一个框架.stru
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="" type=""></result></action><action 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]