Struts2 入门学习总结二

一、Struts2的配置文件

Struts2中的6个配置文件:

  1. default.properties
  2. struts-default.xml
  3. struts-plugin.xml
  4. struts.xml
  5. struts.properties
  6. 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框架的部分学习总结。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、准备工作及实例 3 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 4 (5)其它配置文件 4 4.让MyEclipse提示xml信息 4 5.如何使用alt+/提示 4 6.实例 4 7.开启struts2自带的开发模式常量 6 8.vo传参模式 7 9.ModerDriven传参模式(不建议采用) 7 10.为什么要使用struts2代替struts1.x 7 、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置相关 8 4.分工合作include:指定多个配置文件 10 5.tomcat认证访问 10 6.初识拦截器 11 7.Action中的method属性 12 8.使用ForwardAction实现页面屏蔽。 13 8.使用default-Action配置统一访问 14 小结Action 14 9.使用通配符 14 10.使用0配置:ZERO Annotation 15 11.Result配置详解 15 探讨type类型: 16 Type类型值 16 作用说明 16 对应类 16 chain 16 用来处理Action链 16 com.opensymphony.xwork2.ActionChainResult 16 dispatcher 16 用来转向页面,通常处理JSP 16 org.apache.struts2.dispatcher.ServletDispatcherResult 16 redirect 16 重定向到一个URL 16 org.apache.struts2.dispatcher.ServletRedirectResult 16 redirectAction 16 重定向到一个Action 16 org.apache.struts2.dispatcher.ServletActionRedirectResult 16 plainText 16 显示源文件内容,如文件源码 16 org.apache.struts2.dispatcher.PlainTextResult 16 freemarker 16 处理FreeMarker模板 16 org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据。 16 org.apache.struts2.dispatcher.StreamResult 16 velocity 16 处理Velocity模板 16 org.apache.struts2.dispatcher.VelocityResult 16 xslt 16 处理XML/XLST模板 16 org.apache.struts2.views.xslt.XSLTResult 16 全局result: 17 动态Result:了解 18 12.异常处理 18 三、在Action获取Scope对象 19 方式一、与Servlet解耦合的非IOC方式 20 方式、与Servlet解耦合的IOC方式 21 方式三、与Servlet耦合的非IOC方式 21 方式四、与Servlet耦合的IOC方式 22 四、OGNL与ValueStack(VS) 22 1.值栈入门 22 2.OGNL入门 24 3.普通方法访问 24 4.静态方法访问 24 5.默认类Math的访问 24 6.调用普通类的构造方法 25 7.集合对象初步 25 8.集合对象进阶 25 9.N语法top语法 26 10.获取Stack Context中的信息 26 11.总结$ # %的区别 27 12.总结OGNL[重点] 27 五、拦截器 28 1.概述strust2中的拦截器 28 2.自定义拦截器 28 方式一,实现Interceptor接口。 28 方式、继承AbstractInterceptor抽象类 29 方式三、继承MethodFilterInteceptor类 30 3.使用来MethodFilterInterceptor灵活拦截 32 4.使用默认的execAndWait拦截器 33 5.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值