一、Struts2的配置文件
Struts2中的6个配置文件:
- default.properties
- struts-default.xml
- struts-plugin.xml
- struts.xml
- struts.properties
- web.xml
配置文件的加载顺序和上图一致。当多个配置文件中,有相同的参数,后加载的值会覆盖先加载的值。
- default.properties
该配置文件的路径为struts2-core-2.5.17.jar/org/apache/struts2/default.properties
下面是需要我们了解的配置属性
配置应用中使用的编码
和spring框架整合有关
指定文件上传的时候使用的组件
文件上传总大小限制
能进入框架内部的url地址的后缀,多个用逗号分隔
是否允许动态方法调用
是否开启开发者模式(修改配置不需要重启),出现错误的时候输出更多的报错信息。
页面展示的主题
- struts-default.xml
该配置文件的路径为struts2-core-2.5.17.jar/struts-default.xml
struts.xml中package的extends属性继承的包
Struts2定义的结果类型,默认结果类型为dispatcher
Struts2定义的拦截器
Struts2中定义的拦截器栈
默认拦截器栈在此定义
struts.xml
改配置文件路径一般在工程目录下的src下,一般由自己创建
<?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提供了将多个Action组织为一个模块的方式
package的名字必须是唯一的 package可以扩展 当一个package扩展自
另一个package时该package会在本身配置的基础上加入扩展的package
的配置 父package必须在子package前配置
name:package名称
extends:继承的父package名称
abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action
-->
<package name="com.kay.struts2" extends="struts-default" namespace="/test">
<!-- 定义拦截器
name:拦截器名称
class:拦截器类路径
-->
<interceptors>
<interceptor name="timer" class="com.kay.timer"></interceptor>
<interceptor name="logger" class="com.kay.logger"></interceptor>
<!-- 定义拦截器栈 -->
<interceptor-stack name="mystack">
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="logger"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定义默认的拦截器 每个Action都会自动引用
如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<!-- 全局results配置 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!-- Action配置 一个Action可以被多次映射(只要action配置中的name不同)
name:action名称
class: 对应的类的路径
method: 调用Action中的方法名
-->
<action name="hello" class="com.kay.struts2.Action.LoginAction">
<!-- 引用拦截器
name:拦截器名称或拦截器栈名称
-->
<interceptor-ref name="timer"></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>
二、Action的三种创建方式
Ⅰ、无侵入式:(实际开发中用的并不多)
public class doAction {
public String sayHello() {
System.out.printf("hello");
return "success";
}
}
在struts.xml进行如下配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="mypackage1" namespace="/" extends="struts-default">
<action name="do" class="com.zsl.web.action.doAction" method="sayHello">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
Ⅱ、实现接口的方式:(实际开发中用的并不多)
public class helloAction implements Action {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
在struts.xml文件中进行如下配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="mypackage2" namespace="/" extends="struts-default">
<action name="hello" class="com.zsl.web.action.helloAction">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
动作方法名为excute可以不用写method属性
Ⅲ、继承ActionSupport的方式(默认动作类为ActionSupport,实际开发中主要使用这种方式)
public class hiAction extends ActionSupport {
}
ActionSupport已经实现了excute方法
在struts.xml中需要做如下配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="mypackage3" namespace="/" extends="struts-default">
<action name="hi" class="com.zsl.web.action.hiAction">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
三、Action的三种访问方式
- 全匹配配置访问
userAction代码如下
public class userAction extends ActionSupport {
public String addUser() {
System.out.println("add");
return SUCCESS;
}
public String deleteUser() {
System.out.println("delete");
return SUCCESS;
}
public String updateUser() {
System.out.println("update");
return SUCCESS;
}
public String findUser() {
System.out.println("find");
return SUCCESS;
}
}
index.jsp页面如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 全匹配配置访问 -->
<a href="${pageContext.request.contextPath}/addUser">addUser</a>
<br>
<a href="${pageContext.request.contextPath}/deleteUser">deleteUser</a>
<br>
<a href="${pageContext.request.contextPath}/updateUser">updateUser</a>
<br>
<a href="${pageContext.request.contextPath}/findUser">findUser</a>
</body>
</html>
struts.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 全匹配配置访问 -->
<package name="mypackage" namespace="/" extends="struts-default">
<action name="addUser" class="com.zsl.web.action.userAction" method="addUser">
<result name="success">/hello.jsp</result>
</action>
<action name="deleteUser" class="com.zsl.web.action.userAction" method="deleteUser">
<result name="success">/hello.jsp</result>
</action>
<action name="updateUser" class="com.zsl.web.action.userAction" method="updateUser">
<result name="success">/hello.jsp</result>
</action>
<action name="findUser" class="com.zsl.web.action.userAction" method="findUser">
<result name="success">/hello.jsp</result>
</action>
</package>
</struts>
- 使用通配符访问
userAction代码如下
public class userAction extends ActionSupport {
public String addUser() {
System.out.println("add");
return SUCCESS;
}
public String deleteUser() {
System.out.println("delete");
return SUCCESS;
}
public String updateUser() {
System.out.println("update");
return SUCCESS;
}
public String findUser() {
System.out.println("find");
return SUCCESS;
}
}
- 通配符的基本用法
index.jsp页面代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 通配符配置访问 -->
<a href="${pageContext.request.contextPath}/addUser">addUser</a>
<br>
<a href="${pageContext.request.contextPath}/deleteUser">deleteUser</a>
<br>
<a href="${pageContext.request.contextPath}/updateUser">updateUser</a>
<br>
<a href="${pageContext.request.contextPath}/findUser">findUser</a>
</body>
</html>
struts.xml文件配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 通配符配置访问 -->
<package name="mypackage" extends="struts-default">
<action name="*" class="com.zsl.web.action.userAction" method="{1}">
<result name="success">/hello.jsp</result>
<allowed-methods>addUser,deleteUser,updateUser,findUser</allowed-methods>
</action>
</package>
</struts>
如果你是用的是Struts2.5以上的版本,那么你需要增加allowed-methods标签,将动作方法写入标签内,否则会出现404错误。
- 通配符的高级用法
如果我们在项目中如果遇到多个Action的CRUD操作的时候 可以使用以下方式:
index.jsp代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 通配符配置访问 -->
<a href="${pageContext.request.contextPath}/add_User">addUser</a>
<br>
<a href="${pageContext.request.contextPath}/delete_User">deleteUser</a>
<br>
<a href="${pageContext.request.contextPath}/update_User">updateUser</a>
<br>
<a href="${pageContext.request.contextPath}/find_User">findUser</a>
</body>
</html>
struts.xml文件配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 通配符配置访问 -->
<package name="mypackage" extends="struts-default">
<action name="*—*" class="com.zsl.web.action.{1}Action" method="{1}{2}">
<result name="success">/hello.jsp</result>
<allowed-methods>addUser,deleteUser,updateUser,findUser</allowed-methods>
</action>
</package>
</struts>
- 动态方法访问
开启动态方法访问需要在Struts.xml文件中增加一句如下代码来开启动态方法调用
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
index.jsp页面代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="mypackage" extends="struts-default">
<action name="user" class="com.zsl.web.action.userAction">
<result name="success">/hello.jsp</result>
<allowed-methods>addUser,deleteUser,updateUser,findUser</allowed-methods>
</action>
</package>
</struts>
struts.xml文件配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 动态方法访问 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="mypackage" extends="struts-default">
<action name="user" class="com.zsl.web.action.userAction">
<result name="success">/hello.jsp</result>
<allowed-methods>addUser,deleteUser,updateUser,findUser</allowed-methods>
</action>
</package>
</struts>
同样需要在action标签中加入一个allowed-methods标签,并将动作方法写入标签中。
以上为Struts2框架的部分学习总结。