1、struts2 action对象为每一个请求产生一个实例,没有线程安全问题;
2、struts2 Action三种实现方式
(1)、具有public String execute()方法的普通类
(2)、实现Action接口
(3)、继承ActionSupport类(推荐)
3、Action接受表单数据
(1)、Action类的属性接受用户输入(用户输入页面属性和Action中的属性保持一致,并提供get和set方法)
(2)、利用领域对象接受用户输入(推荐)(以对象的形式来接受和处理数据)
(3)、使用ModelDriven模式接受用户输入
前端页面:依旧以属性的形式出现
Action中:
实现ModelDriven<User>接口,重写其方法 getModel;
定义领域对象,并初始化领域对象,
如:private User user = new User(); 此时无需要提供get和set方法;
最后,显示的结果页面同用户输入的页面属性保持一致!!
4、struts2 主要配置文件加载次序
由上到下,依次为:
struts-default.xml
struts-plugin.xml -- struts2 的一些插件
struts.xml
struts.properties -- 用户自定义的,用于修改default.properties文件属性
web.xml
注意:若前后.xml文件中有相同的属性常量,则后面加载的文件常量将会将前面的加载的常量覆盖掉。
5、struts2 修改 default.properties文件中的属性
1、在 src目录下创建struts.properties文件
2、在此文件中覆盖掉default.properties文件中的key=value值
eg: 修改请求的后缀名.action --> .do
则只需要在struts.properties文件中添加 struts.action.extension=do 即可;
6、struts2属性说明
6.1 使用constant 来修改default.prooperties中的属性值
eg: 修改是否处于开发模式下
<constant name="struts.devMode" value="true"></constant>
6.2 struts2 乱码问题原由:由于页面编码和struts2的属性文件里的编码不一致导致;
解决:前端页面和struts2的属性文件统一全部设定为"utf-8"编码;
6.3 Package -- 解决Action重名,方便继承
namespace -- 名空间 区分:在form表单发送请求时,对于相同的action时,前面加namespace来加以区分相同的action不同的请求的处理;
6.4 定义公共包
<struts>
<!-- 定义父包 :定义公共的结果集-->
<package name="default" namespace="" extends="struts-default">
<global-results>
<result name="success">/login_success.jsp</result>
<result name="failure">/login_failure.jsp</result>
</global-results>
</package>
<package name="user" extends="default" namespace="/user">
<action name="login" class="net.nw.action.LoginAction2">
</action>
</package>
<package name="admin" extends="default" namespace="/admin">
<action name="login" class="net.nw.action.AdminAction">
<result name="success">/admin/admin.jsp</result>
</action>
</package>
</struts>
6.5
注意:在struts2项目中,页面上尽量不做href链接的跳转工作,全部使用struts2中的action 动作来实现跳转功能;
如何来实现呢??
1、前端页面请求依旧 eg: /struts_demo5/exit.do
2、在struts.xml中配置公共的<action>跳转,此时action为:
<!-- 定义父包 :定义公共的结果集-->
<package name="default" namespace="" extends="struts-default">
<global-results>
<result name="success">/login_success.jsp</result>
<result name="failure">/login_failure.jsp</result>
</global-results>
<action name="exit">
<result>/login.jsp</result>
</action>
</package>
action 只有name,而没有class属性,起到跳转的作用!
6.6 如何使用struts2自带的错误显示信息标签进行错误信息的显示??
第一:Action 中 必须 继承ActionSupport类(推荐)
然后利用在execute()方法中编写:在当前的ActionContext中添加错误信息;
this.addFieldError("login_error", "用户名或密码错误!");
第二:页面显示时,只需要:
导入struts2的标签引用: <%@ taglib uri="/struts-tags" prefix="s"%>
进行错误信息的显示:<s:fielderror value="login_error" theme="simple"></s:fielderror>