struts2——通配符

struts2的配置文件是 struts.xml.. 在這個配置文件裏面可使用通配符..其中的好處就是,大大減小了配置文件的內容..固然,相應付出的代價是可讀性..html

使用通配符的原則是 約定高於配置.java

在項目中,咱們有不少的命名規則是約定的...咱們使用通配符那就必須有一個統一的約定.不然通配符將沒法成立jsp

看下面的例子.ui

(1)先看咱們的action配置spa

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

第一個帶"*" 表示的是 後面匹配任意字符...這個很容易理解code

{1}表示的是第一個"*"的內容...注意,這裏的大括號,好比,若是是user_add .那麼{1}就是表示 add ..xml

固然,這裏只有一個"*".你能夠有兩個,甚至三個四個..好比這樣寫 *_* 這樣就是兩個"*" .那麼咱們也能夠用{1},{2}來分別的表示他們.htm

(2) 對應的action 內容blog

複製代碼
 1 package com.test.action;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 @SuppressWarnings("serial")
 4 public class UserAction extends ActionSupport
 5 {
 6  public String add()
 7  {
 8   return SUCCESS;
 9  }
10  public String delete()
11  {
12   return SUCCESS;
13  }
14  public String update()
15  {
16   return SUCCESS;
17  }
18  public String select()
19  {
20   return SUCCESS;
21  }
22 }
複製代碼

由於是舉例子,因此每一個方法裏面都沒實現內容.get

(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)若是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 優先權都是同樣的...不是說帶一個"*"的優先權就比帶兩個"*" 的高.

 

引自:http://jingbo2759.blog.163.com/blog/static/9837531520099109488860/

相關文章
相關標籤/搜索