一、什么是Struts2?
Struts是一个基于MVC设计模式的Web层应用框架,本质上相当于一个servlet,在MVC中,struts作为控制器(Controller)来建立模型与视图的数据交互。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求。Struts2与Struts1相比有很大的变化,但相对于WebWork,变化很小。
二、常见的Web层框架
- Struts2
- Struts1
- WebWork
- SpringMVC
三、Struts的配置文件加载顺序

- init_DefaultProperties()------加载default.properties
- init_TraditionalXmlConfigurations()------加载struts-default.xml,struts-plugin.xml,struts.xml
- init_LegacyStrutsProperties()------加载struts.properties
- init_CustomConfigurationProviders()------加载配置提供类
- init_FilterInitParameters() ------加载web.xml中过滤器初始化参数
- init_AliasStandardObjects()------加载Bean对象
加载顺序
- default.properties
- struts-default.xml
- struts-plugin.xml
- struts.xml
- struts.properties
- web.xml
- 注意:后配置的常量值会覆盖先配置的常量的值
四、Action的配置
1、package的相关配置
- package标签称为包,这个包与java中包的概念不一致,包为了更好的管理action的配置
- package标签的属性
- name:包的名称,只有在一个项目中不重名即可。
- extends:继承哪个包,通常值为struts-default
- namespace:名称空间,与<action>标签中的name属性共同决定访问路径
- 名称空间有三种写法:
- 代名称的名称空间:namespace=“/aaa”
- 根名称空间:namespace=“/”
- 默认名称空间:namespace=“”
- abstract:抽象的,用于其他包的继承。
2、action的相关配置
- name:与namespace共同决定访问路径
- class:Action类的全路径
- method:执行Action中的哪个方法的方法名,默认值excute
- converter:用于设置类型转换器
3、常量配置
在Struts2的框架中,提供了非常多的常量:default.properties
- struts.i18n.encoding=UTF-8 ------Struts中所有的post请求的中文乱码不用处理
- struts.action.extension=action,, ------Struts请求的默认扩展名。默认扩展名是.action或者什么都不写。
在Struts2中修改一些常量的值
- 修改常量的值,可以有三个位置进行修正
- struts.xml

- strits.properties
![]()
- web.xml

4、分模块开发的配置
include的配置
![]()
五、Action的写法
1、Action类是POJO的类
/**
* Action类的编写方式:Action类是一个POJO类
* @author dell
*
*/
public class ActionDemo1 {
public String execute() {
System.out.println("Acrion类执行了......");
return null;
}
}
2、Action类实现一个Action接口
/**
* Action编写方式二:实现一个Action接口
* *实现接口的这种方式:提供了五个常量(五个逻辑视图的名称)
* *SUCCESS:成功
* *LOGIN:登陆出错页面跳转
* *ERROR:失败
* *NONE:不跳转
* *INPUT:表单校验的时候出错
* @author dell
*
*/
public class ActionDemo2 implements Action{
@Override
public String execute() throws Exception {
System.out.println("ActionDemo2执行了......");
return null;
}
}
3、Action类继承ActionSupport类
/**
* Action类的编写方式:继承ActionSupport类
* *推荐使用继承ActionSupport方式:
* *ActionSupport提供了数据校验、国际化等一系列操作的方法
* @author dell
*
*/
public class ActionDemo3 extends ActionSupport{
@Override
public String execute() throws Exception {
System.out.println("ActionDemo3执行了......");
return NONE;
}
}
六、Action的访问
1、通过method方法
<h3>通过method方法</h3>
<a href="${pageContext.request.contextPath}/UserFind.action">查询用户</a><br/>
<a href="${pageContext.request.contextPath}/UserUpdate.action">修改用户</a><br/>
<a href="${pageContext.request.contextPath}/UserDelete.action">删除用户</a><br/>
<a href="${pageContext.request.contextPath}/UserSave.action">保存用户</a><br/>
<!-- method访问 -->
<action name="UserFind" class="com.it.struts.demo2.UserAction" method="find"></action>
<action name="UserUpdate" class="com.it.struts.demo2.UserAction" method="update"></action>
<action name="UserDelete" class="com.it.struts.demo2.UserAction" method="delete"></action>
<action name="UserSave" class="com.it.struts.demo2.UserAction" method="save"></action>
2、通过通配符的方法(****)
<h3>通过通配符的方法</h3>
<a href="${pageContext.request.contextPath}/Product_find.action">查询商品</a><br/>
<a href="${pageContext.request.contextPath}/Product_update.action">修改商品</a><br/>
<a href="${pageContext.request.contextPath}/Product_delete.action">删除商品</a><br/>
<a href="${pageContext.request.contextPath}/Product_save.action">保存商品</a><br/>
<!-- 通配符的方式 -->
<action name="Product_*" class="com.it.struts.demo2.ProductAction" method="{1}"></action>
3、动态方法访问
<h3>动态方式访问</h3>
<a href="${pageContext.request.contextPath}/customer!find.action">查询客户</a><br/>
<a href="${pageContext.request.contextPath}/customer!update.action">修改客户</a><br/>
<a href="${pageContext.request.contextPath}/customer!delete.action">删除客户</a><br/>
<a href="${pageContext.request.contextPath}/customer!save.action">保存客户</a><br/>
<!-- 动态方法访问 -->
<action name="customer" class="com.it.struts.demo2.CustomerAction"></action>
<!-- 开启动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
7425

被折叠的 条评论
为什么被折叠?



