Struts2框架-1
来源:互联网 发布:小程序第三方平台源码 编辑:程序博客网 时间:2024/06/11 23:06
struts2框架
struts2是一个用来开发MVC应用程序的框架,它提供了web应用程序开发过程中的一些常见问题的解决方法。a:对于用户输入数据进行合法性验证
b:统一的布局
c:国际化和本地化
d:支持Ajax
e:表单的重复提交
f:文件的上传下载...
Struts1和struts2的对比
struts2中类更少,更高效,不需要使用ActionForm(struts1中特有)封装请求参数。struts2通过拦截器完成框架的大部分工作,每一个拦截器对应着不同的功能,可以自定义拦截器实现自定义功能。(不使用浏览器可以测试struts2代码)
struts1使用ActionServlet作为控制器,struts2使用过滤器作为控制器。
struts1中每个表单都对应一个ActionForm实例,struts2中HTML表单将直接映射到一个POJO。
struts1的验证逻辑编写在ActionForm中;struts2中的验证逻辑编写在Action中。
搭建struts2框架环境
1:导入jar包(下载地址 http://struts.apache.org/download.cgi#struts2513)
2:在web.xml文件中配置struts2
<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> *.do</url-pattern>
</filter-mapping>
3:在当前web应用的classpath下添加 struts2的配置文件(struts2.xml)
在src目录下创建struts2配置文件
<!-- package包,用来代表一个独立的模块,常用来管理一组action元素
name:必填属性,用于其它包引用该包
extends:当前包所继承的包,继承某个配置文件,通常继承struts-default
namespace:可选属性,指定命名空间,若给,访问时需添加
-->
<package name="p1" extends="struts-default">
<action name="AddMostFile"class="com.action.AddMostFileAction">
<resultname="success">/addsuccess.jsp</result>
</action><!-- 一个struts2请求就是一个action
name:对应一个struts2的请求的名字(或者一个Servlet,除去扩展名)
class:对应执行的类,默认是框架提供的类
result:对应执行的结果(不同的结果可以对应到不同的页面)
method:对应执行的方法,默认execute(该方法返回success)
type:表示结果类型,默认dispatcher(转发到结果中指定的页面)
-->
<action name="doDownloadFile" class="com.action.DownloadAction" method="doDownloadFile">
<result name="success" type="stream">
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="contentType">application/octet-stream</param>
<param name="bufferSize">1024</param><!--缓冲区大小 -->
</result>
</action>
<!--引入其他位置的struts2的配置文件-->
<include file="........" />
<!--struts2修改浏览器请求后缀的配置
struts2默认后缀是action或者为空;
访问时后缀不是默认值则报错在struts.xml文件中配置以下元素-->
<constant name="struts.action.extension" value="do" ></constant >
<!--result节点
result是action节点的子节点
result代表action方法执行后可能去的一个网页
result的name是action执行的返回结果
一个action可以有多个result
result的type属性,定义了返回结果的类型——dispatcher(转发,是默认值)、redirect(重定向到页面)、redirectAction(重定向到一个action中继续执行,不展示数据)、chain(转发到一个action中继续执行代码,不展示数据)-->
<!--重定向/转发到action时,需要配置重定向的action的位置-->
<result name="...." type="redirectAction或者chain" >
<param name="actionName">////</param>
<param name="namespace">////</param>
</result>
<!--注意::可以通过redirect间接实现重定向到action中,转发到action中不能使用dispatcher间接实现-->
<result name="...." type="redirect">/xxxx/xxxxx.do</result>
action:代表一个struts2的请求
Action类:能够处理struts2请求的类,继承于ActionSupport(继承了它的功能,实现了struts2框架提供的常见问题的解决方法国际化、数据检验、验证码等等功能)
属性的名字必须遵守JAVABean属性名相同的命名规则
属性的类型可以是任意类型,从字符串到基本数据类型之间可以自动转换
必须由一个无参数的构造器(在配置的action中通过反射的方式创建对象)
至少有一个供struts2在执行action是调用的方法(method的指定的方法)
同一个Action类中可以包含多个action方法(method的映射的方法)
struts2会为每一个Http请求创建一个新的Action实例(线程是安全的)
在Action中访问Web资源
web资源:HttpServletRequest、HttpSession、ServletContext等原生的ServletAPI(可以用来获取realPath、读写Cookie、向域对象中读写属性)
访问的方式:
1:和Servlet API解耦飞方式
a:使用ActionContext(得到的Map对象只能使用一次)
ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括paramenters、request、session、application等。
获取HttpSession对应的Map对象——public Map getSession()
获取ServletContext对应的Map对象——public Map getApplication()
获取请求参数对应的Map对象——public Map getParameters()
获取HttpServletRequest对应的Map对象——public Object get(Object key):ActionContext类中没有提供类似gtRequest()这样的方法来获取,可以通过为get()方法传递“request”参数实现——强制类型转换
b:实现XxxAware接口(注入了一个Xxx对象)——一般使用该方法
注入application、Parameter、request、session对象后(作为属性保存了对应的Map对象,可多次使用),和Application一样的访问方式;SessionAware、RequestAware、ParameterAware接口可以得到对应对象的Map对象,用法基本相同。
SessionMap对象的键是String类型,值是String[]类型,其他的Map对象键是String类型,值是Object类型。在SessionMap对象中,可以调用它的invalidate()方法,使这个sessionMap对象失效(赋值为null)。
2:和Servlet API耦合的方式
a:使用ServletActionContext
直接访问Servlet API将使Action与Servlet环境耦合在一起,测试时需要有Servlet容器,不便于对Action的单元测试。
直接获取HttpServletRequest对象—ServletActionContext.getRequest()
直接获取HttpSession对象—ServletActionContext.getRequest().getSession()
直接获取ServletContext对象—ServletActionContext.getServletContext()
b:实现ServletXxxAware接口
通过实现ServletRequestAware、ServletContextAware(常用)、ServletResponseAware接口的方式实现功能
未完待续,且听下回分解!!!
- Struts2框架-1
- Struts2系列(1)---Struts2框架简介
- JavaWeb框架-Struts2-1-Hello Struts2!
- 学习struts2框架(1)
- Struts2框架学习记录1
- Struts2 框架
- struts2框架
- Struts2 框架
- Struts2框架
- Struts2框架
- Struts2框架
- Struts2框架
- struts2框架
- struts2框架
- Struts2框架
- 框架:Struts2
- struts2框架
- Struts2框架
- 爱创课堂揭秘好的 web 前端工资有多高?
- String、StringBuilder和StringBuffer的区别
- 2017年11月19日实验感想
- jquery基础
- pandas.qcut与pandas.cut区别
- Struts2框架-1
- MySql 数据库逻辑架构
- Spring 基础知识汇总
- 数据结构之队列
- 编写一个JFrame窗口,要求如下: 1. 在窗口的NORTH区放置一个JPanel面板。 2. JPanel面板放置如下组件: (1) JLable标签,标签文本为“兴趣”,右边接着是三个JChec
- 3台虚拟机搭建Hadoop HA
- Vmware设置网络设置
- springboot 系统学习5 集成 activemq
- [BZOJ2815][ZJOI2012]灾难(拓扑排序+LCA)