1、 导包
官网下载Strust2
Strust2开发商并没有将这个jar分类,所以我们导包很难,所以进入到app文件下,这个文件下是一些war包,这些war包都是demo。将war包当中的包全部复制出来就是我们想要的包。将strust2_balank.war改成.rar文件然后解压,然将WEB-INF下面的lib包全部导入项目中,就完成了。
2、 创建action类
public class HelloAction {
public String hello(){
System.out.println("hello strust2");
return "success";
}
}
3、 创建配置文件strust.xml
(1)文件位置必须在src目录位置下,名字也必须是strust.xml
倒入约束,
<!DOCTYPEstrutsPUBLIC
"-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
然后引入strust标签.
(2)去配置action
<package name="holle"namespace="/holle" extends="struts-default">
<actionname="helloAction" class="cn.hd.holle.HelloAction"method="hello">
<resultname="success">/hello.html</result>
</action>
</package>
(3)创建一个hello.html
(4)在web.xml中去配置过滤器。这是因为Struts2是基于过滤器。配置过滤器的类名比较长,打开编译器的全局搜索,输入StrutsP就可以复制这个类的相对路径
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(5)测试
在浏览器中输入
页面上显示内容为hello.html中内容,控制台打印hello.struts2内容
总结:404错误
1、 struts.xml 文件位置放错了
2、 struts.xml文件名字写错了
3、 hello.xml文件位置放错了
4、 Tomcat启动失败
5、 struts.xml中配置写错了
一个packge中的namespace和地址不一样
action中的name和地址中的helloAction不一致
reulst里面name字段和action中的返回值不一致
reulst中值不是/hello.html写错了
配置文件详解
1、struts.xml
namespace对应的地址
(1)package配置详解
<!--
package:它跟项目里面的包没关系,它是用来管理action的
name:给这个package起个名字,没什么意义,一般情况下他的命名是按照当前package管理action的分类来命名
package和package的名字不能重复
namespace:访问路径地址前缀,跟name没有关系,给其他的package中的namespace能不能重复,没有要求。
extends:继承,继承自struts-default,必须写,名字不能改,他是从struts2核心包中 struts-2.2-core下面
struts-default.xml这里面配置了很多默认的属性。
abstract:抽象的意思,声明的一个标志,当前这个配置文件不能独立运行,等待被继承。
-->
(2)action配置详解
<!--
action配置详解
name:给action起名字,确定了访问路径最后的地址。
class:访问的那个类,写上类的完整路径名
method:访问类中的方法
-->
(3)result配置详解
<!--
result配置详解:
name:对应的action类中的method的返回值
名字可以随便写,只要和action类中的返回值结果一样,就可以,
但是一般情况下使用默认
type:dispatcher 转发
redirect 重定向
标签中间的值:跳转页面的地址
-->
(4)include在src 下struts.xml可以去读取他位置的xml文件
要求:新创建得xml必须也有约束
约束代码:<includefile="cn/hd/dynamic/struts01.xml"></include>
2、常量配置
默认的常量配置,在struts2的核心包下的
默认的常量配置文件名是default.properties
如何修改这些常量:
(1)在struts.xml中去修改
<!--i18n 国际化,相当于在servlet中设置的编码
解决了post请求的中文乱码
-->
<constant name="struts.custom.i18n.resources"value="UTF-8"></constant>
(2)在src目录下,创建struts.properties文件,直接在该文件中修改常量即可。

在param-name中书写常量名,在param-value中书写常量值
三个地方同时修改那个生效?
web.xml > struts.properties > struts.xml
推荐使用第一个!
常用的常量配置:
(1)i18n.ecoding设置编码,解决了post请求的乱码
name="struts.custom.i18n.resources"value="UTF-8"
(2)struts.action.extension设置action的访问扩展名
<!--extension 使用设置action访问的扩展名 action,, 可以改成do,为什么要改成do?因为struts1用的是do
如果改成do,那么在访问路径中的action中访问必须加上.do,否则会有404错误 --> <constant name="struts.action.extension"value="do"></constant>
(3)struts.devMode设置开发者模式,默认关闭
<!-- developerMode 开发者模式 1、热部署 你修改配置文件后,等一段时间后会自动加载。 2、提高错误信息的提示(友好的错误提示) --> <constant name="struts.devMode" value="true"></constant>
3、 高级配置
为什么要使用动态方法?
如何配置动态方法:
(1)推荐使用
<action name="userAction_*" class="cn.hd.dynamic.UserAction" method="{1}"> <result na
Struts2访问流程
me ="success">/hello.html </ result > </ action >Action配置中的name属性,决定着浏览器的访问地址。
Strust2可以采用通配符的方式默认区读取 method {1}会自动将路径中userAction….配置到method中
(2)开启动态方法的常量
首先要开启动态方法的常量
<constant name="struts.enable.DynamicMethodInvocation"value="true"></constant>
将action中的method删除掉。
完成了动态方法的开启
测试的时候,在浏览器的路径中输入action的name值+!方法名(action中的方法名)
注意:
第一种方法,在struts2的高版本中会无效,
首先你先开启动态方法,然后增加allowed-methods属性
<action name="userAction_*" class="cn.hd.dynamic.UserAction" method="{1}"> <result name="success">/hello.html</result> <allowed-methods>update,add,delete,query</allowed-methods> </action>
4、 默认配置(了解)
<!-- action标签中的method属性可以不写,默认方法 execute result标签中的name属性可以不写,默认返回值success type:默认是dispatcher class:可以不写,默认的类是ActionSupport打开这个类文件,他里面有execute 方法,该方法返回一个success字符串。 -->
<!--默认的Action地址 如果请求不存在,那么会默认访问default-action-ref里面的action --> <default-action-ref name="defaultAction"></default-action-ref>
Struts2访问流程
1、 从浏览器输入地址

2、 进入到web.xml

3、 struts2过滤器去加载过滤文件 struts.xml
4、 路径中的第一个地址namespace了便利你的struts.xml中包package的namespace属性,如果他找到了和地址中匹配的就进入到该包,如果没有找到就报异常
5、 找到了该package再去路径后面的地址,然后去package找action的name属性如果找到匹配的,就进入到该action配置的Action类中
6、 通过action的method属性去执行action类对应的方法
7、 根据执行的Action类中的方法获得返回值,然后回到struts.xml里面的result标签,通过读取result中的配置打开相应的文件