1、package属性
- name:包名 用来唯一的指定一个package。package可以扩展,当一个package扩展自 另一个package时该package会在本身配置的基础上加入扩展的package 的配置 父package必须在子package前配置。
- extends:包的继承关系,用于指出所继承的包的名字
- namespace:包的命名空间 不同的命名空间下可以有同名的action,使用命名空间影响到url的地址。
- abstract:抽像包 设置package的属性为抽象的 抽象的package不能定义action,在这个包里边可以设置一些拦截器之类的供别的包调用。
2、action属性
- name:action名 Action配置时一个Action可以被多次映射(只要action配置中的name不同
- class:处理类 对应的类的路径
- method:方法 用于明确指出调用Action中的那个方法 一般不指明的情况下默认执行execute()。
实例演示:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > 3 <struts> 4 5 <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> 6 <include file="struts-default.xml"></include> 7 8 9 <package name="manage" extends="struts-default" namespace="/fore"> 10 <interceptors> 11 <!-- 定义拦截器 只是定义 12 name:拦截器名称 13 class:拦截器类路径 14 --> 15 <interceptor name="timer" class="com.kay.timer"></interceptor> 16 <interceptor name="logger" class="com.kay.logger"></interceptor> 17 <!-- 定义拦截器栈 --> 18 <interceptor-stack name="myInterceptorStack"> 19 <interceptor-ref name="timer"></interceptor-ref> 20 <interceptor-ref name="logger"></interceptor-ref> 21 </interceptor-stack> 22 </interceptors> 23 24 <!-- 定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器 默认的拦截器将无效 --> 25 <default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref> 26 27 28 <!-- 全局results配置:通常一些文件的返回值都是一样的,比如success,error,input,needslogin等等,如果每一项都要重新配置,就显得配置文件很繁琐,这里可以采用struts2的全局result配置。 --> 29 <global-results> 30 <result name="input">/error.jsp</result> 31 </global-results> 32 33 <action name="hello" class="com.kay.struts2.Action.LoginAction"> 34 <!-- 引用拦截器 真正的使用拦截器 35 name:拦截器名称或拦截器栈名称 36 --> 37 <interceptor-ref name="timer"></interceptor-ref> 38 <interceptor-stack-ref name="myInterceptorStack"></interceptor-ref> 39 <!-- 节点配置 40 name : result名称 和Action中返回的值相同 41 type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher 42 --> 43 <result name="success" type="dispatcher">/talk.jsp</result> 44 <!-- 参数设置 45 name:对应Action中的get/set方法 46 --> 47 <param name="url">http://www.sina.com</param> 48 </action> 49 </package> 50 </struts>
3、分模块配置方法
通常情况下一个实际的系统会包含很多的功能,使用分模块的配置方法便于开发和维护,同时也能使代码结构更加清楚。
实例演示:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 8 <include file="cheliang.xml"></include> 9 <include file="zichan.xml"></include> 10 11 </struts>
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 8 <package name="zichan" namespace="/zichan" extends="struts-default"> 9 <action name="zichan" class="com.java1234.action.ZiChanAction"> 10 <result name="success">${pageContext.request.contextPath}/success.jsp</result> 11 </action> 12 13 </package> 14 15 </struts>
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 8 <package name="cheliang" namespace="/cheliang" extends="struts-default"> 9 <action name="cheliang" class="com.java1234.action.CheLiangAction"> 10 <result name="success">${pageContext.request.contextPath}/success.jsp</result> 11 </action> 12 13 </package> 14 15 </struts>
4、使用通配符
如果在一个Action中包含有非常多的方法,并且我们事先不清楚会调用哪一个方法,这个时候就能使用通配符实现动态调用。
实例演示:
struts.xml配置:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 8 <package name="manage" namespace="/" extends="struts-default"> 9 10 <!--这是第一种通配符的用法:--> 11 <!-- <action name="student_*" class="com.java1234.action.StudentAction" method="{1}"> 12 <result name="success">success.jsp</result> 13 </action> 14 15 <action name="grade_*" class="com.java1234.action.GradeAction" method="{1}"> 16 <result name="success">success.jsp</result> 17 </action> --> 18 19 <!--这是第二种通配符的用法:--> 20 <!-- <action name="*_*" class="com.java1234.action.{1}Action" method="{2}"> 21 <result name="success">success.jsp</result> 22 </action> --> 23 24 </package> 25 26 </struts>
Action(StudentAction )类:
1 package com.java1234.action; 2 import com.opensymphony.xwork2.ActionSupport; 3 public class StudentAction extends ActionSupport{ 4 5 private String name; 6 7 public String getName() { 8 return name; 9 } 10 public void setName(String name) { 11 this.name = name; 12 } 13 14 public String list()throws Exception{ 15 System.out.println("学生查找"); 16 name="学生查找"; 17 return SUCCESS; 18 } 19 public String add()throws Exception{ 20 System.out.println("学生添加"); 21 name="学生添加"; 22 return SUCCESS; 23 } 24 public String update()throws Exception{ 25 System.out.println("学生修改"); 26 name="学生修改"; 27 return SUCCESS; 28 } 29 public String delete()throws Exception{ 30 System.out.println("学生删除"); 31 name="学生删除"; 32 return SUCCESS; 33 } 34 35 }
前端页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>通配符1</h1> <!--下划线前边的student就是struts.xml配置文件中对应action的name名称,下划线后边的就是Action类中的实际方法名称--> <a href="student_list" target="_blank">学生信息查询</a> <a href="student_add" target="_blank">学生信息添加</a> <a href="student_update" target="_blank">学生信息修改</a> <a href="student_delete" target="_blank">学生信息删除</a> <h1>通配符2</h1> <!--下划线前边的student就是struts.xml配置文件中对应action的name名称(但是开头字母要大写),下划线后边的就是Action类中的实际方法名称--> <a href="Student_list" target="_blank">学生信息查询</a> <a href="Student_add" target="_blank">学生信息添加</a> <a href="Student_update" target="_blank">学生信息修改</a> <a href="Student_delete" target="_blank">学生信息删除</a> </body> </html>
5、动态方法调用
同样使用场景是一个Action中包含有多个method时,事先不清楚程序会调用哪一个方法,使用ActionName!methodName的方法能够实现动态方法调用。当前的版本默认动态方法调用是不开启的,所以需要手动开启设置。
实例演示:
struts.xml配置文件:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <struts> 7 <!--开启动态方法调用--> 8 <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 9 10 <package name="manage" namespace="/" extends="struts-default"> 11 12 <action name="student" class="com.java1234.action.StudentAction"> 13 <result name="success">success.jsp</result> 14 </action> 15 16 <action name="grade" class="com.java1234.action.GradeAction"> 17 <result name="success">success.jsp</result> 18 </action> 19 20 </package> 21 22 </struts>
Action(StudentAction )类:同上这就不再展示。
前端页面代码:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <h1>动态方法调用</h1> 11 <!--这里的请求地址写的时候‘!’前边一定要是对应action的name属性名称,'!'后边是Action类里边的方法名称--> 12 <a href="student!list" target="_blank">学生信息查询</a> 13 <a href="student!add" target="_blank">学生信息添加</a> 14 <a href="student!update" target="_blank">学生信息修改</a> 15 <a href="student!delete" target="_blank">学生信息删除</a> 16 </body> 17 </html>
<constant>节点用于设置一些struts2的常量,这些常量用于控制struts2的某些特性。相当于告诉struts,当它运行时,需要给你准备哪些功能。
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
3 <struts>
4 <!-- 所有匹配*.action的请求都由struts2处理 -->
5 <constant name="struts.action.extension" value="action" />
6 <!-- 是否启用开发模式 -->
7 <constant name="struts.devMode" value="true" />
8 <!-- struts配置文件改动后,是否重新加载 -->
9 <constant name="struts.configuration.xml.reload" value="true" />
10 <!-- 设置浏览器是否缓存静态内容 -->
11 <constant name="struts.serve.static.browserCache" value="false" />
12 <!-- 请求参数的编码方式 -->
13 <constant name="struts.i18n.encoding" value="utf-8" />
14 <!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
15 <constant name="struts.i18n.reload" value="true" />
16 <!-- 文件上传最大值 -->
17 <constant name="struts.multipart.maxSize" value="104857600" />
18 <!-- 让struts2支持动态方法调用 -->
19 <constant name="struts.enable.DynamicMethodInvocation" value="true" />
20 <!-- Action名称中是否还是用斜线 -->
21 <constant name="struts.enable.SlashesInActionNames" value="false" />
22 <!-- 允许标签中使用表达式语法 -->
23 <constant name="struts.tag.altSyntax" value="true" />
24 <!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
25 <constant name="struts.dispatcher.parametersWorkaround" value="false" />
26
27 <package name="basePackage" extends="struts-default">
28
29 </package>
30
31 </struts>