Struts2通配符详解

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>
    <!-- constant:配置常量
         *name:指定的是struts2框架底层提供的default.properties资源文件中配置的常量 
         *value:指定的是配置常量的值
         *struts.xml文件中,配置的常量的值会覆盖底层提供的default.properties资源文件中配置的常量的值 
        配置struts2框架中请求连接的后缀名,如果是指定多个的话,用逗号隔开 如果在struts.xml中和struts.properties资源文件中同时进行配置,struts.properties的配置起作用 
        * 因为常量可以在多个配置文件中进行定义,所以我们需要了解下struts2加载常量的搜索顺序: 
        1 struts-default.xml
        2 struts-plugin.xml 
        3 struts.xml 
        4 struts.properties(自己创建) 
        5 web.xml -->
    <!-- -->
    <!-- <constant name="struts.action.extension" value="do,love"></constant> -->
    <!-- 配置国际化资源文件修改时,是否重新加载。默认是false,为不加载。true为加载 -->
    <!-- <constant name="struts.i18n.reload" value="true"></constant> -->
    <!-- 配置struts2框架的配置文件修改时,是否重新加载,默认是false为不加载,true是加载 -->
    <!-- <constant name="struts.configuration.xml.reload" value="true"></constant> -->
    <!-- 配置struts2框架的模式 *默认是false,是生产模式 *true是开发模式,需要更多的调试信息 ### includes: ### 
        - struts.i18n.reload = true ### - struts.configuration.xml.reload = true -->
    <constant name="struts.devMode" value="true"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <!-- 引入自定义配置文件 -->
    <include file="cn/itcast/primer/struts_primer.xml"></include>
    <include file="cn/itcast/resulttype/struts_resulttype.xml"></include>
    <include file="cn/itcast/pattern/struts_pattern.xml"></include>
</struts>

局部xml:struts_pattern.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>
    <package name="pattern" namespace="/pattern" extends="struts-default">
        
        
         <default-action-ref name="bookAction"></default-action-ref>
            <!-- 全局结果类型 -->
         <global-results>
            <result name="success">/pattern/successGlobal.jsp</result>
        </global-results>  
        <!-- 
             *struts2框架默认执行action类中的execute方法
            *在action标签里的method属性:指定的是要执行的action类中的那个方法
        
         -->
        <!-- <action name="bookAction" class="cn.itcast.pattern.BookAction" method="execute">
            <result name="success">
                /pattern/success.jsp    
            </result>
            <result name="add">
                /pattern/BookAction.jsp
            </result>
        </action> -->
        <!--  <action name="a_add" class="cn.itcast.pattern.BookAction" method="add" >
            <result name="success">
                /pattern/success.jsp    
            </result>
            <result name="add">
                /pattern/BookAction.jsp
            </result>
        </action>
        <action name="b_add" class="cn.itcast.pattern.BookAction" method="add" >
            <result name="success">
                /pattern/success.jsp    
            </result>
            <result name="add">
                /pattern/BookAction.jsp
            </result>
        </action>
        <action name="c_add" class="cn.itcast.pattern.BookAction" method="add" >
            <result name="success">
                /pattern/success.jsp    
            </result>
            <result name="add">
                /pattern/BookAction.jsp
            </result>
        </action>-->
        
        <!-- 以上配置可以改写如下: -->
        <!-- ‘*‘就是通配符,匹配的是不一样的内容 -->
            <!-- <action name="*_add" class="cn.itcast.pattern.BookAction" method="add" >
            <result name="success">
                /pattern/success.jsp    
            </result>
            <result name="add">
                /pattern/BookAction.jsp
            </result>
            </action> -->
        
         <!--<action name="BookAction_add" class="cn.itcast.pattern.BookAction" method="add">
            <result name="success">/pattern/success.jsp</result>
            <result name="add">/pattern/BookAction.jsp</result>
        </action>
        <action name="UserAction_add" class="cn.itcast.pattern.UserAction" method="add">
            <result name="success">/pattern/success.jsp</result>
            <result name="add">/pattern/UserAction.jsp</result>
        </action> -->
        <!-- 以上配置可以改写如下: -->
        <!-- {1}表示的是匹配"*"通配符的第一个字串 -->
        <!--  <action name="*_add" class="cn.itcast.pattern.{1}" method="add">
            <result name="success">/pattern/success.jsp</result>
            <result name="add">/pattern/{1}.jsp</result>
        </action>     --> 
        
        <!--  <action name="BookAction_add" class="cn.itcast.pattern.BookAction" method="add">
            <result name="add">/pattern/BookAction.jsp</result>
        </action>
        <action name="BookAction_delete" class="cn.itcast.pattern.BookAction" method="delete">
            <result name="success">/pattern/success.jsp</result>
        </action>
        <action name="UserAction_add" class="cn.itcast.pattern.UserAction" method="add">
            <result name="add">/pattern/UserAction.jsp</result>
        </action>
        <action name="UserAction_delete" class="cn.itcast.pattern.UserAction" method="delete">
            <result name="success">/pattern/success.jsp</result>
        </action>  -->
        <!-- 以上配置可以改写如下: -->
        <!-- {2}匹配就是"*" 通配符的第二个字串 -->
        <!-- {0}匹配的就是"*" 通配符的整个串 -->
         <!--  <action name="*_*" class="cn.itcast.pattern.{1}" method="{2}">
            <result name="success">/pattern/success.jsp</result>
            <result name="add">/pattern/{1}.jsp</result>
        </action>-->
        
        <!-- 
        动态方法调用:
            *页面中请求连接:namespace+actionName+"!"+执行方法名
            *在struts.xml文件中,不用配置method属性,而是通过页面的连接动态执行指定方法
             *动态方法调用,不经常使用.经常使用的是通配符
             *动态方法调用,需要开启,默认是关闭状态(下面是开启的语句,卸载struts.xml)
             <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
             
         -->
        
        <!-- <action name="BookAction" class="cn.itcast.pattern.BookAction">
            <result name="success">/pattern/success.jsp</result>
            <result name="add">/pattern/BookAction.jsp</result>
        </action> 
          -->
        
        
         <action name="*_*" class="cn.itcast.pattern.{1}" method="{2}">
         <result name="success">/pattern/success.jsp</result>
            <result name="add">/pattern/{1}.jsp</result>
         </action>
        
        <action name="BookAction_find" class="cn.itcast.pattern.BookAction" method="find">
            <!-- 
                如果局部结果类型和全局结果类型,同事存在,局部结果类型会覆盖了全局的结果类型
                
                局部结果类型和全局结果类型的作用范围,
                    *全局结果类型:作用于整个package
                    *局部结果类型:作用于某个action
                
             -->
            
            <!-- <result name="success">/pattern/success.jsp</result> -->
        </action>
        
        
    </package>
</struts>

BookAction.java

package cn.itcast.pattern;
import com.opensymphony.xwork2.ActionSupport;
public class BookAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("BookAction ******** execute()");
        return "success";
    }
    
    /*
     * 在struts2框架中action是多实例的比单实例安全,单实例慢线程不安全
     */
    
    public BookAction(){
        System.out.println("BookAction 的构造方法");
    }
    
    /*
     * 自定义方法:
     *         *:由public来修饰
     *         *:必须是String返回类型
     *         *:不能传参数
     *         *:方法名自定义
     * *总之,一句话:除了方法名与execute()不一样,其他所有内容都一样
     * 
     * 
     * 
     * 
     */
    
    
    public String add() {
        System.out.println("BookAction ********** add()");
        return "add";
    }
    
    public String delete() {
        System.out.println("BookAction ********** delete()");
        return "success";
    }
    
    public String find() {
        System.out.println("BookAction ********** find()");
        return "success";
    }
}

UserAction.java

package cn.itcast.pattern;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("UserAction ******** execute()");
        return "success";
    }
    
    /*
     * 自定义方法:
     *         *:由public来修饰
     *         *:必须是String返回类型
     *         *:不能传参数
     *         *:方法名自定义
     * *总之,一句话:除了方法名与execute()不一样,其他所有内容都一样
     * 
     * 
     * 
     * 
     */
    
    
    public String add() {
        System.out.println("UserAction ********** add()");
        return "add";
    }
    public String delete() {
        System.out.println("UserAction ********** delete()");
        return "success";
    }
}

test.jsp

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ taglib uri="/struts-tags"   prefix="s"%>
<html>
  <head>
    <title>My JSP ‘index.jsp‘ starting page</title>
    </head>
  <body>
     访问BookAction_add 测试action标签中的method属性<br> 
    <a href="${pageContext.request.contextPath}/pattern/bookAction.action"> 测试</a><br>
    <br> 
    <br>
    
     
     通配符映射示例(1):<br>
    <a href="${pageContext.request.contextPath}/pattern/a_add.action"> 通配符映射示例(1)</a><br>
    <a href="${pageContext.request.contextPath}/pattern/b_add.action"> 通配符映射示例(1)</a><br>
    <a href="${pageContext.request.contextPath}/pattern/c_add.action"> 通配符映射示例(1)</a><br>
    <br> 
    <br>
    <br>
    
     通配符映射示例(2):<br>
    <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action"> 图书</a><br>
    <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户</a><br>
     <br>
     <br>
     
     通配符映射示例(3):<br>
    <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br>
    <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br>
     <br>
     <br>
    <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户添加</a><br>
    <a href="${pageContext.request.contextPath}/pattern/UserAction_delete.action">用户删除</a><br>
    <br>
     <br>
   
   
     动态方法调用!形式:<br>
    <a href="${pageContext.request.contextPath}/pattern/BookAction!add.action">图书添加</a><br>
    <a href="${pageContext.request.contextPath}/pattern/BookAction!delete.action">图书删除</a><br>
   
   
     <br><br>
     使用通配符定义action<br>
    <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br>
    <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br>
    
     <br><br>
     测试全局和局部的action<br>
    <a href="${pageContext.request.contextPath}/pattern/BookAction_find.action">图书查找</a><br>
 
  </body>
</html>
时间: 2024-10-10 14:30:37

Struts2通配符详解的相关文章

J2EE学习篇之--Struts2技术详解

前面说到了Struts1的相关知识,下面来说一下Struts2的相关知识,我们知道现在Struts2使用的比Struts1多,Struts2已经替代Struts1成为主流的框架了... 摘要 Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架.不过有一点大家需要注意的是:尽管Struts2和Struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要推出struts

Struts2配置详解_配置Action

Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法. public String execute() throws Exception Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方

Struts2配置详解

1.Namespace 1)namespace决定action的访问路径,默认为“”,可以接受所有路径的Action:       2)namespace可以写为/,或者/xxx,或者/xxx/yyy,对应action访问路径为/index.action,/xxx/index.action或者/xxx/yyy/index.action       3)namespace最好也用模块来进行命名 当url中输入不存在的Action的时候,定向到默认的Action 1.1 struts2配置详解 1.

【SSH2(理论篇)】--Struts2配置详解

上篇博客讨论了SSH2框架模型,在开发过程中发现SSH2的开发模型其实类似于经典的三层模式,在每一层中分别添加了不同的框架,显示层使用的是Struts2进行配置的,业务逻辑层使用的是Spring配置,数据持久层则采用的是Hibernate,开发模式简单易懂,接下来将会分别从三层着手讨论每一层的运行内容. 一.Struts体系简介 struts,是Apache软件基金会(ASF)赞助的一个开源项目,它通过采用Java Servlet/JSP技术,实现了基于Java EE Web应用的Model-V

struts2配置文件详解

本文转载自:http://blog.csdn.net/baple/article/details/9420877 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" ><struts> <!-- include节点是s

Struts2框架详解

目录: 1.Struts2的工作原理 2.Struts2的搭建 3.Struts2的核心文件 3.1 Struts.xml配置详解 4. Struts2重点 4.1 动态方法调用 4.2 多个配置文件 4.3 Action搜索顺序 4.4 从界面输入接收参数(登陆为例) 4.5 处理并返回结果(响应前端页面) 4.6 Action后缀设置 4.7 访问Servlet API 4.8 默认Action 5.Struts2拦截器 5.1 拦截器的定义 5.2 拦截器的作用 5.3 自定义拦截器 5.

Struts2之struts2文件下载详解

一.学习案例:通过在downloadfile.jsp页面点击"下载文件",查看文件是否可以成功下载. 二.案例分析:struts2文件下载只需简单配置即可. a)先在下载页面(downloadfile.jsp)创建下载文件的链接 <a href="downloadFile">下载文件</a> b)创建action(DownloadFileAction.java) 只需创建一个InputStream类型类型的get方法. 注意:此处方法名规则为

Struts2入门详解

如何搭建Struts2项目 导入相关架包 编写web.xml,配置strus2过滤器 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping>

struts2 action详解

action映射是struts2框架的基本工作单元,通常,action配置将一个标识符映射到一个业务逻辑的class,当一个请求同action的名字匹配时,框架通过这种映射决定怎么处理请求.一个通常的action如下<action name="Logon" class="tutorial.Logon">  <result >welcome.jsp</result>  <result name="input"