[学习笔记] Struts2之Struts2配置详解

# 学习 # · 2021-03-22

Struts2执行过程解析

1、分析登录程序:

(1)核心控制器(StrutsPrepareAndExecuteFilter):在web.xml中配置,用于拦截用户请求,对请求进行处理。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

(2)业务控制器(Action):调用相应的Model类实现业务处理,返回结果。

(3)Result:实现结果视图的调用。

2、Struts2的配置文件struts.xml:主要负责管理Action业务控制器。

<struts>
    <!--使用constant解决乱码问题-->
      <constant name="struts.i18n.encoding" value="UTF-8"/>
    <!--修改后缀名-->
    <constant name="struts.action.extension" value="do,go"/>

       <package name="default" namespace="/" extends="struts-default">
        <action name="" class="">
            <result name=""></result>
        </action>
    </package>
</struts>

(1)constant:配置常量,可以改变Struts2框架的一些行为。

name:表示常量名称
value:表示常量值

(2)package:简化维护工作,提高重用性。包可以“继承”已定义的包,并可以添加自己包的配置。

name:为必需的且唯一,用于指定包的名称
extends:指定要扩展的包
namespace:可选,定义该包中action的命名空间

(3)action:定义业务控制器。

name:action的名字,决定了访问路径最后的地址
class:类的完整路径名
method:访问类中的方法,默认为execute

(4)result:定义返回内容。

name:对应的是action类中的method的返回值
type:跳转类型
标签中间的值:跳转页面的地址

3、拆分Struts2的配置文件:使用include导入配置文件。

<struts>
    <include file="struts-user.xml"/>
    <include file="struts-admin.xml"/>
</struts>

4、Struts2配置文件的加载顺序:

(1)struts-default.xml:Struts2默认配置文件,会自动加载。struts-default包在struts-default.xml文件中定义。

(2)struts-plugin.xml:Struts2插件使用的配置文件。

(3)struts.xml。


Action的配置

1、Action的作用:

(1)封装工作单元。

(2)数据转移的场所。

(3)返回结果字符串。

2、method属性:定义不同的method属性值,实现在同一个Action类中处理不同的请求。

<action name="login" class="com.aduo.action.UserAction" method="login">
    <result>/page/manage.jsp</result>
</action>
<action name="register" class="com.aduo.action.UserAction" method="register">
    <result>/page/success.jsp</result>
</action>

3、Action中动态方法调用:

<!-- 启用动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

<!--
配置动态方法:
当请求user!login.action时,调用UserAction中的login()方法
当请求user!register.action时,调用UserAction中的register()方法
-->
<package name="default" namespace="/" extends="struts-default">
    <action name="user" class="com.aduo.action.UserAction">
        <!--result-->
    </action>
</package>

4、Action中通配符的使用:

<!--
使用通配符:
当请求loginUser.action时,通配符匹配login
{1}处将被通配符的值替换
由UserAction的login()方法执行
-->
<action name="*User" class="com.aduo.action.UserAction" method="{1}">
    <result name="success">/page/{1}_success.jsp</result>
    <result name="input">/page/{1}.jsp</result>
    <result name="error">/page/error.jsp</result>
</action>

5、配置默认的Action:

<package name="default" extends="struts-default">
    <!--没有Action匹配请求时,默认Action将被执行-->
    <default-action-ref name="defaultAction" />
    <action name="defaultAction">
        <result>error.jsp</result>
    </action>
</package>

Result的配置

1、常用结果类型:

(1)dispatcher:默认结果类型,后台使用RequestDispatcher转发请求。

(2)redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。

(3)redirectAction:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。

(4)chain: action处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失。

2、动态结果:在xml中使用${nextDispose}获取Action中动态设置的结果。

<action name="login" class="com.aduo.action.UserAction" method="login">
    <result type="redirectAction">${nextDispose}</result>
    <result name="error">/page/error.jsp</result>
</action>

3、全局结果:实现同一个包中多个action共享一个结果。

<package name="default" extends="struts-default">
    <!--配置全局结果-->
    <global-results>
        <result name="error">/page/error.jsp</result>
        <result name="login" type="redirect">/page/login.jsp</result>
    </global-results>
</package>
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/273/

评论