struts2的配置文件是 struts.xml.. 在这个配置文件里面可以使用通配符..其中的好处就是,大大减少了配置文件的内容..当然,相应付出的代价是可读性..

使用通配符的原则是 约定高于配置.

在项目中,我们有很多的命名规则是约定的...我们使用通配符那就必须有一个统一的约定.否则通配符将无法成立

看下面的例子.

(1)先看我们的action配置

<package name="user" extends="struts-default" namespace="/">
  <action name="user_*" class="com.test.action.UserAction" method="{1}">
   <result>/user_{1}.jsp</result>
  </action>
 </package>

带红字的解释下,第一个带"*" 表示的是 后面匹配任意字符...这个很容易理解

{1}表示的是第一个"*"的内容...注意,这里的大括号,比如,如果是user_add .那么{1}就是表示 add ..

当然,这里只有一个"*".你可以有两个,甚至三个四个..比如这样写 *_* 这样就是两个"*" .那么我们也可以用{1},{2}来分别的表示他们.

(2) 对应的action 内容

package com.test.action;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class UserAction extends ActionSupport
{
 public String add()
 {
  return SUCCESS;
 }
 public String delete()
 {
  return SUCCESS;
 }
 public String update()
 {
  return SUCCESS;
 }
 public String select()
 {
  return SUCCESS;
 }
}

因为是举例子,所以每个方法里面都没实现内容.

(3) 其他就是几个jsp页面..

其中 user_*.jsp页面没什么好说的,就是显示一句话.比如user_add.jsp就是显示 "这是添加页面" 其他的类似.就是为了让我们看到已经跳转到对应的页面.

index.jsp写一下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 <a href="user_add.action">添加页面</a><br>
 <a href="user_delete.action">删除页面</a><br>
 <a href="user_update.action">修改页面</a><br>
 <a href="user_select.action">查找页面</a><br>
</body>
</html>
这里需要解释的就是两个

(1)<base>标签的作用是,指定下面所有相对路径的基地址..看下面的图示

(2)下面的红字是几个链接.分别连接到四个action..这里是四个相对路径.基路径就是上面设置的basePath..

注意,jsp默认的路径是服务基路径..也就是 htttp://localhost:8080/ 也就是说,不包括项目名.

总结一下,

大家可以看到,配置文件里面,只有三句话就将增删改查四个操作全部配置好了....这就是通配符的作用.但是,我们也可以看到,对应的命名规则的约定也非常的苛刻...

最后需要注意的一点是匹配的优先权

(1)如果struts.xml里面有对应的action name .就算它有其他通配符匹配的,都优先对应完全相同的.

比如 有一个 action name 是 "user_add"  还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配"user_add " ..其实,这个很好理解..

(2)如果一个action name对应于两个带通配符的action name 那么,需要看这个配置谁在前面.它匹配写在前面的

比如 有一个 action name 是 "*_*"  还有一个是 "user_*" .现在,来一个请求是 "user_add.action " .那么,它会优先匹配写在前面的...

任何带"*"的action name 优先权都是一样的...不是说带一个"*"的优先权就比带两个"*" 的高.

struts2--配置文件中使用通配符的更多相关文章

  1. Struts2学习笔记 - Action篇<配置文件中使用通配符>

    有三种方法可以使一个Action处理多个请求 动态方法调用DMI 定义逻辑Acton 在配置文件中使用通配符 这里就说一下在配置文件中使用通配符,这里的关键就是struts.xml配置文件,在最简单的 ...

  2. struts2配置文件中action的name属性

    struts2配置文件中action的name属性的第一个字符不要加斜杠 <action name="see" class="baoxiuManage_seeAct ...

  3. struts2配置文件中的method={1}详解

    struts.xml中的配置: <!-- 配置用户模块的action --> <action name="user_*" class="userActi ...

  4. struts2配置文件中Action中的各属性的含义

    StrutsApacheBeanJSPServlet attribute:      这个属性用来指定ActionForm保存到指定上下文时所使用的属性名.如果不指定attribute属性的值,将使用 ...

  5. Struts2 - 配置文件中result 节点详解

    每个 action 方法都将返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果. 每个 action 声明都必须包含有数量足够多的 result 元素, 每个 resul ...

  6. Struts2 Action中动态方法调用、通配符的使用

    一.Struts2执行过程图: 二.struts2配置文件的加载顺序 struts-default.xml---struts-plugin.xml---struts.xml 具体步骤: 三.Actio ...

  7. struts2.0中struts.xml配置文件详解

    先来展示一个配置文件 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

  8. java:struts2.3框架1(struts2快速配置,各文件之间的关系,基础代码简化版,XML中的通配符)

    1.struts2快速配置: A.到http://struts.apache.org下载struts2开发包struts-2.3.32-all.zip B.新建web项目并添加struts2依赖的ja ...

  9. Struts2的配置文件中, <package>的作用,<action><result>重名?

    问:Struts2的配置文件中, <package>的作用是什么? 答:防止action重名啊,例如前台和后台,总会有很多地方起名重复的! 问:可是访问的时候,不也是访问action吗,能 ...

  10. struts2.5框架使用通配符指定方法常见错误

    struts2.5框架使用通配符指定方法(常见错误) 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace ...

随机推荐

  1. [转]swift 学习资源 大集合

    今天看到了一个swift的学习网站,里面收集了很多学习资源 [转自http://blog.csdn.net/sqc3375177/article/details/29206779] Swift 介绍 ...

  2. Qt的目录依赖问题----怎样生成一个绿色的Qt软件包

    Qt的目录依赖问题----怎样生成一个绿色的Qt软件包 一.核心问题: 如果将编译好的Qt文件拷贝到任何目录下,作为一个绿色软件库来使用? 二.原理讨论 由于Qt在编译的时候将安装路径硬编码到了库文件 ...

  3. HDU 1722 Cake

    #include<cstdio> int gcd(int m, int n) { ?n:gcd(n % m, m); } int main() { int m, n; while(scan ...

  4. Hidden String(深搜)

    Hidden String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  5. iOS开展-CocoaPods安装和使用教程

    原文链接: iOS开展-CocoaPods安装和使用教程 修正已经增加了自己的理解. CocoaPods安装和使用教程 Code4App 原创文章.转载请注明出处:http://code4app.co ...

  6. U盘安装Ubuntu14.4时遇到分区问题记录

    1.在安装Ubuntu14.4时,遇到如果先分出 / 跟挂载的主分区时,后面只能再分一个swap,或者挂载一个/home,或者一个/ boot 时不能继续分区,当然想安装也是不能不能成功的. 解决办法 ...

  7. iOS开发--汉字转成没有声调也没有空格的拼音

     //汉字转成没有声调也没有空格的拼音- (NSString *)transformToPinYin:(NSString *)wordStr {    NSMutableString *mutable ...

  8. UI界面

    http://www.uimaker.com/uimakerhtml/uidesign/uisoft/2016/0323/122862.html http://www.uimaker.com/uima ...

  9. [Swust OJ 795]--Penney Game

    题目链接:http://acm.swust.edu.cn/problem/795/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  10. python命令行解析工具argparse模块【5】

            上一节我们学习了parse_args()的用法,这一节,我们将继续学习argparse的其他一些用法.         1.sub-commands子命令         argpar ...