Struts2第二天学习
解决struts.xml文件的冗余
将所有的配置文件放在一份struts.xml将会导致, 文件繁杂且容易出错, 将有如下的解决方案:
分文件编写Struts2的配置文件:
对于具有类似功能的action就可以放入不同对应的xml文件中, 最后使用struts标签中的<include file="user.xml"></include>处理
例如:
1. struts.xml
<struts>
<constant name="struts.devMode" value="true"></constant>
<include file="A.xml"></include>
<include file="B.xml"></include>
</struts>
2. A.xml
<struts>
<package name="A" extends="struts-default">
<action name="addA">
<result>/success.jsp</result>
</action>
</package>
</struts>
3. B.xml
<struts>
<package name="B" extends="struts-default">
<action name="addB">
<result>/success.jsp</result>
</action>
</package>
</struts>
封装请求数据到对象中
- 静态参数封装: 使用struts.xml配置param参数, 调用动作类的setXXX方法做数据注入,默认编码utf-8, 不会出现乱码问题
例: struts.xml配置
<struts>
<package name="user" extends="struts-default">
<action name="addUser" class="com.action.UserAction" method="saveUser">
<param name="username">A</param>
<param name="age">18</param>
</action>
</package>
</struts>
在动作类中的配置:
public class UserAction extends ActionSupport{
private String username;
private int age;
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public int getAge(){
return age;
}
public int setAge(){
this.age = age;
}
public String saveUser(){ //action方法
return null;
}
}
当访问index.jsp中addUser操作的时候, struts.xml触发saveUser的action, 将username, age中参数通过UserAction中的set方法做注入操作
整个注入的过程中, 首先会自动为UserAction生成一个user对象, 将username, age通过set方式进行赋值
Struts2是通过staticParams的拦截器做注入操作, 这里注意必须保证, 注入的param标签中的name必须与Action类中的属性同名
在param中的age参数18是作为字符串出现的, 当使用set操作的时候, 字符串自动转换为数字
- 动态参数封装: 就是对用户提交的表单数据封装到实体模型中
当用户使用表单提交数据的时候, 在Servlet中, 直接使用request.getParameter("参数名")处理
而在Struts2中, 系统默认将表单数据一一通过set操作封装到Action类的属性中
在struts.xml不需要做参数配置, 例如:
<action name="addUser" class="com.action.UserAction" method="saveUser">
&