通配符(计应143 罗开波)

1.在web应用,有成千上万个action声明,可以利用struts2提供的映射机制把多个彼此相似的映射关系简化成一个映射关系,即通配符。通配符也就是“*”,通过使用通配符使对struts的配置相当简便,不过得遵循“约定优于配置”的原则。
2.新建一个web项目并在项目中添加struts:
1:点击项目右击选择myeclipse
2:选择Add Struts Capadilities
3:选择2.1
3.在src中兴建一个包,在包中新建一个两个class并继承ActionSupport接口。(注意:action执行的时候并不一定要执行execute()方法,也就是说execute()方法可以重写,也可以不重写)
3.1 UserAction.java类中添加两个方法 add,delete;

package actionuser;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

public String add(){
return SUCCESS;
}
public String delete(){
return SUCCESS;
}
}
3.2 TeacherAction.java类中添加两个方法 add,delete;

package actionuser;

import com.opensymphony.xwork2.ActionSupport;

public class TeacherAction extends ActionSupport {
public String add(){
return SUCCESS;
}
public String delete(){
return SUCCESS;
}
}

4.在struts.xml编写:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devmode" value="true"></constant>
<package name="default" namespace="/user" extends="struts-default">
<action name="Success*" class="actionuser.UserAction" method="{1}">
<result>/Success{1}.jsp</result>
</action>
<action name="*_*" class="actionuser.{1}Action" method="{2}">
<result>/{1}_{2}Success.jsp</result>
</action>
</package>
</struts>
(注意:此处的“*”代表所有,即UserAction.java具有的所有方法,{1}=“*”,即当“*”代表“add”时,“{1}”也就代表“add”。也就是说“*”与“{}”内容一致。“*_*”代表的是:第一个“*”代表“TeacherAction”;第二个“*”代表“add”方法或者“delete”方法。)
5.创建jsp页面。
5.1创建 Successadd.jsp、Successdelete.jsp、Teacher_addSuccess.jsp、Teacher_deleteSuccess.jsp页面。页面内只需输出一句话即可。
如:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'AddSuccess.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
user add success 添加成功 <br>
</body>
</html>
5.2 在index.jsp页面中写入(注意:要在index.jsp页面中写入<% String context = request.getContextPath(); %>不然会报错):


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<% String context = request.getContextPath(); %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
Action执行的时候并不一定要执行execute方法<br />
可以在配置文件中配置Action的时候用method=来指定执行哪个方法
也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />
<a href="<%=context %>/user/Successadd">添加用户</a>
<a href="<%=context %>/user/Successdelete">删除用户</a>
<br />
前者会产生太多的action,所以不推荐使用
<br>
<a href="<%=context %>/user/Teacher_add">添加老师</a>
<a href="<%=context %>/user/Teacher_delete">删除老师</a>
</body>
</html>

6. 运行/调试

将该项目部署在tomcat上——>打开浏览器——>在地址栏输入该项目的名称——>回车


6.1 点击“添加用户”可以发现地址栏变化:action可以成功找到UserAction.java的“add”方法


6.2 点击“删除用户”可以发现地址栏变化:action可以成功找到UserAction.java的“delete”方法


6.3 点击“添加老师”可以发现地址栏变化:action可以成功找到TeacherAction.java的“add”方法


6.4 点击“删除老师”可以发现地址栏变化:action可以成功找到TeacherAction.java的“delete”方法

posted on 2016-05-08 17:38  竹山新雨后  阅读(171)  评论(0编辑  收藏  举报

导航