学习Struts--Chap03:struts.xml常用配置(基础)
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()。
实例演示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts> <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 -->
<include file="struts-default.xml"></include> <package name="manage" extends="struts-default" namespace="/fore">
<interceptors>
<!-- 定义拦截器 只是定义
name:拦截器名称
class:拦截器类路径
-->
<interceptor name="timer" class="com.kay.timer"></interceptor>
<interceptor name="logger" class="com.kay.logger"></interceptor>
<!-- 定义拦截器栈 -->
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="logger"></interceptor-ref>
</interceptor-stack>
</interceptors> <!-- 定义默认的拦截器 每个Action都会自动引用,如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
<default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref> <!-- 全局results配置:通常一些文件的返回值都是一样的,比如success,error,input,needslogin等等,如果每一项都要重新配置,就显得配置文件很繁琐,这里可以采用struts2的全局result配置。 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results> <action name="hello" class="com.kay.struts2.Action.LoginAction">
<!-- 引用拦截器 真正的使用拦截器
name:拦截器名称或拦截器栈名称
-->
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-stack-ref name="myInterceptorStack"></interceptor-ref>
<!-- 节点配置
name : result名称 和Action中返回的值相同
type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
-->
<result name="success" type="dispatcher">/talk.jsp</result>
<!-- 参数设置
name:对应Action中的get/set方法
-->
<param name="url">http://www.sina.com</param>
</action>
</package>
</struts>
3、分模块配置方法
通常情况下一个实际的系统会包含很多的功能,使用分模块的配置方法便于开发和维护,同时也能使代码结构更加清楚。
实例演示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <include file="cheliang.xml"></include>
<include file="zichan.xml"></include> </struts>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="zichan" namespace="/zichan" extends="struts-default">
<action name="zichan" class="com.java1234.action.ZiChanAction">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action> </package> </struts>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="cheliang" namespace="/cheliang" extends="struts-default">
<action name="cheliang" class="com.java1234.action.CheLiangAction">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action> </package> </struts>
4、使用通配符
如果在一个Action中包含有非常多的方法,并且我们事先不清楚会调用哪一个方法,这个时候就能使用通配符实现动态调用。
实例演示:
struts.xml配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="manage" namespace="/" extends="struts-default"> <!--这是第一种通配符的用法:-->
<!-- <action name="student_*" class="com.java1234.action.StudentAction" method="{1}">
<result name="success">success.jsp</result>
</action> <action name="grade_*" class="com.java1234.action.GradeAction" method="{1}">
<result name="success">success.jsp</result>
</action> --> <!--这是第二种通配符的用法:-->
<!-- <action name="*_*" class="com.java1234.action.{1}Action" method="{2}">
<result name="success">success.jsp</result>
</action> --> </package> </struts>
Action(StudentAction )类:
package com.java1234.action;
import com.opensymphony.xwork2.ActionSupport;
public class StudentAction extends ActionSupport{ private String name; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public String list()throws Exception{
System.out.println("学生查找");
name="学生查找";
return SUCCESS;
}
public String add()throws Exception{
System.out.println("学生添加");
name="学生添加";
return SUCCESS;
}
public String update()throws Exception{
System.out.println("学生修改");
name="学生修改";
return SUCCESS;
}
public String delete()throws Exception{
System.out.println("学生删除");
name="学生删除";
return SUCCESS;
} }
前端页面代码:
<%@ 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配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>
<!--开启动态方法调用-->
<constant name="struts.enable.DynamicMethodInvocation" value="true" /> <package name="manage" namespace="/" extends="struts-default"> <action name="student" class="com.java1234.action.StudentAction">
<result name="success">success.jsp</result>
</action> <action name="grade" class="com.java1234.action.GradeAction">
<result name="success">success.jsp</result>
</action> </package> </struts>
Action(StudentAction )类:同上这就不再展示。
前端页面代码:
<%@ 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>动态方法调用</h1>
<!--这里的请求地址写的时候‘!’前边一定要是对应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>
<constant>节点用于设置一些struts2的常量,这些常量用于控制struts2的某些特性。相当于告诉struts,当它运行时,需要给你准备哪些功能。
<?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>
<!-- 所有匹配*.action的请求都由struts2处理 -->
<constant name="struts.action.extension" value="action" />
<!-- 是否启用开发模式 -->
<constant name="struts.devMode" value="true" />
<!-- struts配置文件改动后,是否重新加载 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 设置浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 请求参数的编码方式 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
<constant name="struts.i18n.reload" value="true" />
<!-- 文件上传最大值 -->
<constant name="struts.multipart.maxSize" value="104857600" />
<!-- 让struts2支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- Action名称中是否还是用斜线 -->
<constant name="struts.enable.SlashesInActionNames" value="false" />
<!-- 允许标签中使用表达式语法 -->
<constant name="struts.tag.altSyntax" value="true" />
<!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
<constant name="struts.dispatcher.parametersWorkaround" value="false" /> <package name="basePackage" extends="struts-default"> </package> </struts>
学习Struts--Chap03:struts.xml常用配置(基础)的更多相关文章
- SSH(struts+spring+hibernate)常用配置整理
SSH(struts+spring+hibernate)常用配置整理 web.xml配置 <?xml version="1.0" encoding="UTF-8&q ...
- logback logback.xml常用配置详解(三)
logback logback.xml常用配置详解 <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之 ...
- logback logback.xml常用配置详解(一)<configuration> and <logger>
logback logback.xml常用配置详解(一)<configuration> and <logger> 博客分类: Log java loglogback 原创文章 ...
- 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)
Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式 √ id:标识容器中的bean.id唯一. √ cl ...
- [转] logback logback.xml常用配置详解(一)<configuration> and <logger>
转载文章:原文出处:http://aub.iteye.com/blog/1101260 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透彻的理解其配置 根节点< ...
- web.xml常用配置详解
web.xml常用配置详解 context-param 指定 ServletContext(上下文) 配置文件路径,基本配置一般是Spring配置文件,或者是spring-security的配置文件. ...
- 【转】logback logback.xml常用配置详解(二)<appender>
原创文章,转载请指明出处:http://aub.iteye.com/blog/1101260, 尊重他人即尊重自己 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透 ...
- 【转】logback logback.xml常用配置详解(一)<configuration> and <logger>
原创文章,转载请指明出处:http://aub.iteye.com/blog/1101260, 尊重他人即尊重自己 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透 ...
- springMVC学习记录1-使用XML进行配置
SpringMVC是整个spring中的一个很小的组成,准确的说他是spring WEB这个模块的下一个子模块,Spring WEB中除了有springMVC还有struts2,webWork等MVC ...
随机推荐
- python--使用队列结构来模拟共享打印机等候时间
按书里的样例抄的. 可以看到,将打印速度由第分钟5页提高到10页之后, 每个学生提交打印任务到打印完成的时间明显缩短. =========================== 在计算机科学实验室里考虑 ...
- 一脸懵逼学习Hadoop中的序列化机制——流量求和统计MapReduce的程序开发案例——流量求和统计排序
一:序列化概念 序列化(Serialization)是指把结构化对象转化为字节流.反序列化(Deserialization)是序列化的逆过程.即把字节流转回结构化对象.Java序列化(java.io. ...
- 清北合肥day2-day5
day2:215这一天的题目相对比较模板化t1:50看错了数据范围求n个点到给出的点哈夫曼距离的最小值我想到的是一种非常zz的做法我们二分答案,然后判断是否在这个距离内有点但是这样前缀和不是很好维护于 ...
- python之工作目录和文件引用
1.参考 如何获得Python脚本所在目录的位置 Python 相对导入与绝对导入 还没细看 2.不考虑exe打包 sys.path[0] #顶层运行脚本的绝对目录 os.path.split(os. ...
- [转]10 Awesome Indicator Applets for Ubuntu’s Unity Desktop
http://blogger.gtwang.org/2013/10/awesome-indicator-applets-for-ubuntus-unity-desktop.html http://ww ...
- 使用impala操作kudu之创建kudu表(内部表和外部表)
依次启动HDFS.mysql.hive.kudu.impala 登录impala的shell控制端: Impala-shell 1:使用该impala-shell命令启动Impala Shell .默 ...
- http--tomcat--memcached配置
两个tomcat节点:172.16.100.7(tomcatA.magedu.com),172.16.100.8(tomcatB.magedu.com) 两个memcached节点:172.16.10 ...
- 线程、进程、协程 异步io
https://www.cnblogs.com/wupeiqi/articles/6229292.html
- mysql解决数据库死锁问题
为了保证数据的正确性,对数据库进行操作的时候都会进行上锁,也就是进行修改数据的时候同一时间只能有一个进程,当这个进程处理完了,释放锁了,其他进程才可以进行操作! 总是会碰见一些意外情况,导致数据库死锁 ...
- P2279 [HNOI2003]消防局的设立 贪心or树形dp
题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状 ...