struts2 视图发请求到Action
Struts2通过配置action标签来把用户请求连接到Action 控制层的方法中
<struts>
<package name="pack001" extends="struts-default">
<!--action标签 name属性对应的是用户URL请求中的action名,和用户请求保持一致-->
<!--action标签 class: 类的路径名-->
<!--action标签 method:class中的方法名-->
<action name="login" class="com.demo.action.LoginAction"
method="login">
<result name="success">/WEB-INF/pages/success.jsp</result>
</action>
</package>
</struts>
<!-- package元素 -->
<!-- name:package名称 唯一性 基本一个action类对应一个package -->
<!-- namespace:定义package的名称空间,该命名空间影响到url的地址 如namespace值为/test 那么访问地址:http://localhost:8085/Struts2Demo/test/xxx.action -->
<!-- abstract:package的属性是否抽象抽象的package不能定义action 值为true/false -->
<!-- extends:继承的父package名称 -->
<package name="001pck" extends="struts-default">
</package>
1. Action搜索顺序
http://localhost:8085/Struts2Demo/aaa/bbb/ccc/login.action的访问顺序
第一步:根据包的namespace 判断当前package包(/aaa/bbb/ccc)是否存在。
<package name="001pck" namespace="/" extends="struts-default">
<action name="login" >
<result>/success.jsp</result>
</action>
</package>
第二步:如果这个包存在,就去这个包查找login.action.如果action存在则执行action.如果action不存在,报错或者执行默认action
第三步:如果包不存在,就去判断它的上一级包(/aaa/bbb)包是否存在,重复第二步,直到根目录/
2. 动态方法调用
<package name="001pck" namespace="/users" extends="struts-default">
<!-- 使用通配符实现一个action对应多个请求,以免action太多 -->
<!-- 访问路径为Dynamic_add 就会执行DynamicAction类中的add方法 -->
<!-- 访问路径为Dynamic_ 或者访问路径为Dynamic_execute 就会执行DynamicAction类中的execute方法 -->
<action name="*_*" class="action.{1}Action" method="{2}">
<result name="success">/success.jsp</result>
<result name="failure">/failure.jsp</result>
</action>
</package>
3. 通过 通配符配置任意请求 action
<package name="crazyit" namespace="/" extends="struts-default">
<!-- 该元素可以处理所有的用户请求,对于任意请求,直接呈现WEB-INF/content目录下的同名jsp页面 -->
<action name="*" >
<result >/WEB-INF/content/{1}.jsp</result>
</action>
</package>
这里的任意请求,包括get请求和form,post请求。
如果请求的action 已经在struts.xml中定义,就会执行到定义的action。
如果请求的action 没有在struts.xml中定义,才会执行这个匹配任意请求的action,返回WEB-INF/content目录下的同名jsp页面。
4. 配置 默认Action
<package name="002pck" namespace="/" extends="struts-default">
<!-- 4.定义默认action 如果struts没有用户定义的action名称,自动跳转到改默认定义的action中 -->
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/WEB-INF/pages/error.jsp</result>
</action>
</package>
5. 修改struts后缀
<struts>
<!-- 1.修改struts2后缀为空 -->
<constant name="struts.action.extension" value=""></constant>
<!-- 2.修改struts2的后缀 为do; -->
<constant name="struts.action.extension" value="do"> </constant>
<!-- 3.设置多个后缀 修改struts2的后缀为do或者test -->
<constant name="struts.action.extension" value="do,test"></constant>
</struts>
6. 指定配置文件的编码
<struts>
<!-- 指定配置文件的编码 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
</struts>
7. 指定多个配置文件
1.创建配置文件test.xml
2.在struts.xml配置文件中 引用这个配置文件
<struts>
<!-- 1.引用其它配置文件 -->
<include file="test.xml" />
</struts>