在struts1的时候,所有来响应请求的类都是通过servlet来实现的,但是servlet又是线程不安全的,所以在struts2中就采用了全新的针对拦截器来响应请求的思想和策略;servlet不安全,主要体现于每一个servlet只会创建一个对象,如果有多个线程同时访问同一个servlet就相当于在访问同一个对象,对同一个对象进行操作,线程之间互相影响;
struts2是一个web层的框架,前身是webwork,所以大家也可以看到struts框架中有两个核心包,一个是xwork,还有一个是与struts1区别开来的全新的思想的struts-core包;
环境搭建一共有三步:
1.导包
2.配置struts.xml
3.配置web.xml
接下来就是测试
1.导包
下载的struts2.xxx.zip中有一个apps目录,这是示例项目目录,打开里面有好几个war项目,我们今天只测试最简单的功能,就使用struts-blank.war里面的包就行了,解压这个war文件,在WEB-INF/lib目录下就是我们要的所有包了,复制,粘贴在已经创建好的web项目的lib目录下,Build Path --> add to build path,完成导包。
2.配置struts.xml
在导入的包中,有一个struts2-core-xxx.jar,打开,拉到最下面,就可以看见有4个版本的dtd文件,struts-xxx.dtd,按照你的幸运数字随便选一个,复制里面的DOCTYPE头部分,也就是约束部分,到你创建的struts.xml中,有网的情况下,写了约束就会有提示了;
3.配置web.xml
struts2是基于过滤器(filter)来做的拦截请求和响应请求;
struts2常量配置修改:
struts2所有的常量都在这个下面
一共有三种方式:(一般使用第二种,这三种配置也是加载顺序,如果都配置,后面的会覆盖前面的)
1.在src下,创建文件struts.properties,在其中以键值对的形式写上需要修改的属性
struts.i18n.encoding=UTF-8
2.可以在struts.xml中进行配置
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
3.可以在web.xml中进行配置
<context-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</context-param>
常见的几个常量介绍
//解决post提交中文乱码问题
struts.i18n.encoding=UTF-8
//这是配置action访问路径的后缀,这里的"action,,"是有两个值,一个是action,然后逗号后面是空,所以第二个是空
//也就是说我们访问的action资源名后面可以加上.action/空 都行
struts.action.extension=action,,
//struts2是否以开发模式运行(默认值是false)
//开发模式主要有三点遍历之处,在文档中说明如下:
热加载(不需要重启服务器)
### - struts.i18n.reload = true 国际化配置文件热加载
### - struts.configuration.xml.reload = true 主配置文件struts.xml热加载
### - raising various debug or ignorable problems to errors 提供了更详细的错误信息
struts.devMode = false