struts配置2

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">


<struts>


<!-- 配置 Struts 可以受理的请求的扩展名 -->
<constant name="struts.action.extension" value="action,do,"></constant>

<!-- 打开允许动态方法调用的开关, 默认是 false -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

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


<action name="TestActionContext" 
class="com.atguigu.struts2.action.TestActionContextAction">
<result  name="success">/test-actionContext.jsp</result>
</action>

<action name="TestAware" 
class="com.atguigu.struts2.action.TestAwareAction">
<result>/test-aware.jsp</result>
</action>

<action name="testActionSupport">
<result>/testActionSupport.jsp</result>
</action>


<action name="testResult" class="com.atguigu.struts2.action.TestResultAction">
<result name="success" type="dispatcher">/success.jsp</result>
<result name="login" type="redirect">/login.jsp</result>

<!-- 重定向到一个 Action -->
<!--  
<result name="index" type="redirectAction">
<param name="actionName">testAction</param>
<param name="namespace">/atguigu</param>
</result>
-->

<!-- 通过 redirect 的响应类型也可以便捷的实现 redirectAction 的功能! -->
<result name="index" type="redirect">/atguigu/testAction.do</result>

<!-- 转发到一个 Action -->
<!--  
<result name="test" type="chain">
<param name="actionName">testAction</param>
<param name="namespace">/atguigu</param>
</result>
-->

<!-- 不能通过 type=dispatcher 的方式转发到一个 Action -->
<result name="test">/atguigu/testAction.do</result>


</action>

<action name="testDynamicMethodInvocation"
class="com.atguigu.struts2.action.TestDynamicMethodInvocationActoin"
method="save">
<result>/success.jsp</result>
</action>


    </package>
    
    <package name="testPackage" namespace="/atguigu" extends="struts-default">
    <action name="testAction" 
    class="com.atguigu.struts2.action.TestAction">
    <result>/success.jsp</result>
    </action>
    </package>




</struts>



5. result:


1). result 是 action 节点的子节点


2). result 代表 action 方法执行后, 可能去的一个目的地


3). 一个 action 节点可以配置多个 result 子节点. 


4). result 的 name 属性值对应着 action 方法可能有的一个返回值. 


<result name="index">/index.jsp</result>


5). result 一共有 2 个属性, 还有一个是 type: 表示结果的响应类型


6). result 的 type 属性值在 struts-default 包的 result-types 节点的 name 属性中定义.
         常用的有 
    > dispatcher(默认的): 转发. 同 Servlet 中的转发. 
    > redirect: 重定向
    > redirectAction: 重定向到一个 Action
    注意: 通过 redirect 的响应类型也可以便捷的实现 redirectAction 的功能!
   
    <result name="index" type="redirectAction">
<param name="actionName">testAction</param>
<param name="namespace">/atguigu</param>
</result>

OR

<result name="index" type="redirect">/atguigu/testAction.do</result>
   
    > chain: 转发到一个 Action
    注意: 不能通过 type=dispatcher 的方式转发到一个 Action
   
         只能是:
         
    <result name="test" type="chain">
<param name="actionName">testAction</param>
<param name="namespace">/atguigu</param>
</result>

不能是:

<result name="test">/atguigu/testAction.do</result>

    


4. ActionSupport


1). ActionSupport 是默认的 Action 类: 若某个 action 节点没有配置 class 属性, 则 ActionSupport 即为
待执行的 Action 类. 而 execute 方法即为要默认执行的 action 方法


<action name="testActionSupport">
<result>/testActionSupport.jsp</result>
</action>


等同于


<action name="testActionSupport"
class="com.opensymphony.xwork2.ActionSupport"
method="execute">
<result>/testActionSupport.jsp</result>
</action>


2). 在手工完成字段验证, 显示错误消息, 国际化等情况下, 推荐继承 ActionSupport. 








3. 关于 Struts2 请求的扩展名问题


1). org.apache.struts2 包下的 default.properties 中配置了 Struts2 应用个的一些常量


2). struts.action.extension 定义了当前 Struts2 应用可以接受的请求的扩展名.


3). 可以在 struts.xml 文件中以常量配置的方式修改 default.properties 所配置的常量.


<constant name="struts.action.extension" value="action,do,"></constant>


2. 在 Action 中访问 WEB 资源:


1). 什么是 WEB 资源 ?


HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API。 


2). 为什么访问 WEB 资源?


B\S 的应用的 Controller 中必然需要访问 WEB 资源: 向域对象中读写属性, 读写 Cookie, 获取 realPath ....


3). 如何访问 ?


I. 和 Servlet API 解耦的方式: 只能访问有限的 Servlet API 对象, 且只能访问其有限的方法(读取请求参数, 读写域对象的属性, 使 session 失效...). 


> 使用 ActionContext

> 实现 XxxAware 接口

> 选用的建议: 若一个 Action 类中有多个 action 方法, 且多个方法都需要使用域对象的 Map 或 parameters, 则建议使用
Aware 接口的方式

> session 对应的 Map 实际上是 SessionMap 类型的! 强转后若调用其 invalidate() 方法, 可以使其 session 失效!


II. 和 Servlet API 耦合的方式: 可以访问更多的 Servlet API 对象, 且可以调用其原生的方法.  


> 使用 ServletActionContext

> 实现 ServletXxxAware 接口.


1. 复习搭建 Struts2 的开发环境: 3 个步骤


2. action VS Action 类


1). action: 代表一个  Struts2 的请求. 


2). Action 类: 能够处理 Struts2 请求的类. 


> 属性的名字必须遵守与 JavaBeans 属性名相同的命名规则. 
   属性的类型可以是任意类型. 从字符串到非字符串(基本数据库类型)之间的数据转换可以自动发生


> 必须有一个不带参的构造器: 通过反射创建实例 

> 至少有一个供 struts 在执行这个 action 时调用的方法

> 同一个 Action 类可以包含多个 action 方法. 

> Struts2 会为每一个 HTTP 请求创建一个新的 Action 实例, 即 Action 不是单例的, 是线程安全的. 







1. 关于值栈:


1). helloWorld 时, ${productName} 读取 productName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 


2). ValueStack: 


I.  可以从 ActionContext 中获取值栈对象
II. 值栈分为两个逻辑部分


> Map 栈: 实际上是 OgnlContext 类型, 是个 Map, 也是对 ActionContext 的一个引用. 里边保存着各种 Map:
        requestMap, sessionMap, applicationMap, parametersMap, attr
        
> 对象栈: 实际上是 CompoundRoot 类型, 是一个使用 ArrayList 定义的栈. 里边保存各种和当前 Action 实例相关的对象.
                  是一个数据结构意义的栈.
                  
 2. Struts2 利用 s:property 标签和 OGNL 表达式来读取值栈中的属性值
 
 1). 值栈中的属性值:
 
  > 对于对象栈: 对象栈中某一个对象的属性值
 
  > Map 栈: request, session, application 的一个属性值 或 一个请求参数的值. 
 
 2). 读取对象栈中对象的属性:
 
  > 若想访问 Object Stack 里的某个对象的属性. 可以使用以下几种形式之一: 

 object.propertyName ; object['propertyName'] ; object["propertyName"]

> ObjectStack 里的对象可以通过一个从零开始的下标来引用. ObjectStack 里的栈顶对象可以用 [0] 来引用, 
    它下面的那个对象可以用 [1] 引用. 
  
 [0].message   
    
> [n] 的含义是从第 n 个开始搜索, 而不是只搜索第 n 个对象

> 若从栈顶对象开始搜索, 则可以省略下标部分: message 

> 结合 s:property 标签: <s:property value="[0].message" />  <s:property value="message" />
 
 3). 默认情况下, Action 对象会被 Struts2 自动的放到值栈的栈顶. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值