Struts 2_第一天

本文介绍了Struts2的学习路线,包括基本配置和Action实现。基本配置有三种方式配置常量,如在struts.xml、struts.properties、web.xml中配置。实现Action有普通POJO类、实现Action接口、继承ActionSupport类三种方式。还介绍了Action的配置,包括定义动作包、命名空间及基本属性配置等。

学习路线:

 

 

1.Struts2基本配置:

<struts>
<!--导入配置文件,通过这种方式可以将Struts2的Action按模块配置到多个配置文件中。-->
    <include file=“product.xml"/>
      <!--常量配置,指定是否开发模式。--> 
   <constant name="struts.devMode" value="true" />
<!-- Action配置放在package下, name定义包名, extends定义继承包空间struts-default.-->
    <package name="user" namespace="/user" extends="struts-default">
     <!--对Action的配置,可以有多对;name是对业务控制器命名,在表单中指定的地址(action属性值);
      class指定类的位置。-->
        <action name="login" class="action.LoginAction">
     <!-- 定义两个逻辑视图和物理资源之间的映射 , name值是Action中返回的结果-->
          <result name="error">/WEB-INF/content/error.jsp</result>
          <result name="success">/WEB-INF/content/success.jsp</result>
        </action>
    </package>
</struts>

 

1.1 配置常量

      Struts 2有三种方式配置常量:

      1)在struts.xml中配置:便于集中管理(推荐)

      2)在struts.properties中配置:保持与WebWork的向后兼容

      3)在web.xml中配置:需要更多的代码量,会降低可读性 

 

在struts.xml中配置常量:

<constant name="属性名" value="属性值"/>

name:指定常量(属性)的名字。

value:指定常量的值。

<!--常量配置,指定需要Struts2处理的请求后缀。-->

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

<!--常量配置,指定是否支持动态方法调用。-->

<constant name="struts.enable.DynamicMethodInvocation" value="false" />

<!--常量配置,指定是否开发模式。-->

<constant name="struts.devMode" value="true" />

<!--指定是否每次HTTP请求到达时,系统都重新加载资源文件(允许国际化文件重载) -->

<constant name="struts.i18n.reload" value="false" />

 

web.xml中配置常量:

用于配置Web应用的相关信息,如:监听器(listener)、过滤器(filter)、Servlet、相关参数、会话超时时间、安全验证方式、错误页面等。

<filter>
	<filter-name>struts2</filter-name>
	<filter-class>
           org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
	</filter-class>
	<init-param>
		<!--指定国际化资源文件-->
		<param-name>struts.custom.i18n.resources</param-name>
		<param-value>myMess</param-value>
	</init-param>
</filter>

 

 2.实现Action

  • Struts 2实现Action类有以下三种方式:
  1. 普通的POJO类,该类包含一个无参数的execute()方法,返回值为字符串类型;
  2. 实现Action接口;
  3. 继承ActionSupport类。

  2.1  POJO实现方式(1)

public class XXXAction {
    /*属性定义*/

    /*属性的getter和setter*/

    /*调用业务逻辑方法,控制业务流程*/
    public String execute(){
        /*具体的业务处理逻辑*/

        /*return字符串返回值*/
    }
 }

 

2.2  Action接口实现方式(2)

    Action类:

public interface Action {
	//定义Action接口中包含的一些结果字符串
	public static final String ERROR = "error";
	public static final String INPUT = "input";
	public static final String LOGIN = "login";
	public static final String NONE = "none";
	public static final String SUCCESS = "success";
	//处理方法
	public String execute() throws Exception;
}

 XXX类实现Acton接口:

import com.opensymphony.xwork2.Action; 
public class XXXAction implements Action{
    /*属性定义以及属性的getter和setter*/

    /*重写execute()方法*/
    public String execute() throws Exception {
        /*具体的业务处理逻辑*/

     /*return字符串返回值*/
    }
}

2.3  继承ActionSupport类方式

  • 动作类处理客户端请求后会返回一个字符串,每个字符串对应一个逻辑视图;
  • 当动作类继承了ActionSupport后,通常使用以下一些常量作为动作执行后的返回值: INPUT 、SUCCESS、LOGIN、NONE和ERROR。
import com.opensymphony.xwork2.ActionSupport; 
public class XXXAction extends ActionSupport{
         /*属性定义以及属性的getter和setter*/
         /*重写execute()方法*/
      public String execute() throws Exception {
       	 /*具体的业务处理逻辑*/

      /*return字符串返回值*/
         }
}

 

3 配置Action--3.1 定义动作包

  • 在Struts 2配置文件中使用“包”来组织Action。
  • Struts 2配置文件中的每个包是由多个Action、多个拦截器、多个拦截器引用组成的集合。

属性

说明

name

定义动作包的名字,唯一性

namespace

定义动作包的(部分)访问路径,默认为“/”

extends

定义继承的父动作包

abstract

指定包是否是抽象的(抽象包中不能包含Action定义)

 

 包的配置:

<package name="default" namespace="/" extends="struts-default">
    <!-- 定义一个名为user的Action,class指定实现类 -->
   <action name=“Action名称" class="指定类>
     <!-- 配置execute()方法返回值与视图资源之间的映射关系 -->
        <result name="error">/WEB-INF/content/error.jsp</result>
       <result>/WEB-INF/content/welcome.jsp</result>    
   </action>
</package>

tip:struts-default包是struts已经定义好的一个抽象包,该包下包括大量结果类型定义、拦截器定义以及拦截器引用定义

 

3.2  命名空间:

  • Struts 2以命名空间的方式来管理Action。
  • Struts 2的命名空间提供了一个类似于文件目录的管理方式,可以在不同的命名空间中定义相同的Action,提高应用的灵活性。
  • 如果配置package包时没有指定namespace属性,则该包下的所有Action属于默认的命名空间。

 

   3.2.1 struts.xml中配置命名空间的示例:

<!-- 配置第一个包,包名为mydefault,继承struts-default-->	
<package name="mydefault" extends="struts-default">
   <!-- 定义mydefault包没有指定namespace,该包中的所有Action属于默认命名空间-->
    <action name="add" class="action.AddAction">
	<result>/WEB-INF/add.jsp</result>
    </action>		
</package> 

     因mydefault包没有指定命名空间,所以命名空间是默认的命名空间,其访问请求的URL如下:

     http://ip地址:端口号/web应用路径名称/add.action    

 

   3.2.2 在struts.xml中配置命名空间的示例:

<package name="mypackage" extends="struts-default" namespace="/admin">
<!--mypackage包下的所有Action都属于"/admin"命名空间-->
      <action name="login" class="caction.LoginAction">
	<result name="error">/WEB-INF/error.jsp</result>
	<result>/WEB-INF//success.jsp</result>
     </action>
</package>

  当用户请求包下的Action时,请求的URL应该符合“namespace+Action”的规则。

访问mypackage包下的Action: http://ip地址:端口号/web应用路径名称/admin/login.action

 

3.3  Action基本配置

3.3.1在配置Action时,需要指定action以下属性:

  • name属性:指定Action的名字,即指明该Action所处理的请求的URL;
  • class属性:指定Action的实现类,该属性不是必需的,

   如果没有指定class属性的值,则默认使用ActionSupport类; Action处理完用户请求后,需要将指定的视图资源呈现给用户。     <result>元素用来定义配置逻辑视图和物理视图之间的映射关系。

代码示例:

<package name="default" namespace="/" extends="struts-default">
   <action name="login" class="action.LoginAction">
	<!-- 配置execute()方法返回值与视图资源之间的映射关系 -->
	<result name="success">/ok.jsp</result>
	<result name="error">/error.jsp</result>   
   </action>
</package>

 

3.3.2  Action类方法的执行--动态方法调用:

Struts 2中请求一个Action中的不同处理逻辑方法,这种方式称为DMI(Dynamic Method Invocation,动态方法调用)。

动态方法请求格式:actionName!methodName.action

  •    actionName是struts.xml中配置的Action的name属性值;
  •    methodName是Action实现类中处理逻辑的方法名。
  •    示例如下:product!edit.action   //访问product中的edit()方法

使用动态方法调用之前必须设置Struts2 允许动态方法调用 <constant name="struts.enable.DynamicMethodInvocation" value="true"/>

 

3.3.3 Action类方法的执行--使用method属性:

<action>元素使用method属性可以让Action调用指定方法处理用户请求。

示例如下,分别请求ProductAction的edit()和del()方法:

<action name="editproduct" class="ProductAction“  method="edit">
    <result name="edit">/edit.jsp</result>
</action>
<action name="delproduct" class="ProductAction“  method="del">
    <result name="del">/del.jsp</result>
</action>

 

3.3.4 Action类方法的执行--使用*通配符:

  • 使用*通配符定义Action,示例如下:
<action name="*product" class="ProductAction” method="{1}">
    <result name="edit">/edit.jsp</result>
    <result name="del">/del.jsp</result>
</action>

name属性使用了通配符“*product”,匹配所有符合“*product.action”格式的请求,通过ProductAction处理;

“{1}”表示name属性值中第一个“*”指代的值。

 

  • Struts 2允许在class属性和method属性中同时使用表达式
<action name="*_*" class=" action.{1}Action" method="{2}">

  class属性中的“{1}”,匹配模式“*_*”中的第1个“*”;

  method属性中的“{2}”匹配模式“*_*”中的第2个“*”。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值