目录
Interceptor
,拦截客户端对Action的访问。是一种更加细粒度化的拦截,可以拦截Action中具体的方法。Filter
,用于过滤客户端向服务器端发送的请求。Action
的请求,执行核心过滤器(doFilter
)方法。在这个方法中,调用executeAction()
方法,在这个方法内部调用dispatcher.serviceAction();
在这个方法内部创建一个Action
代理,最终执行的是Action
代理中的execute()
,在代理中执行的execute
方法中调用ActionInvocation
的invoke
方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标Action
,根据Action
的返回的结果进行页面跳转。新建工程,导入需要的jar
包。
在web.xml
中配置配置核心过滤器。
新建Action
类com.itzhouq.web.action.ActionDemo1
package com.itzhouq.web.action;
import com.opensymphony.xwork2.ActionSupport;
public class ActionDemo1 extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("ActionDemo1执行了......");
return super.execute();
}
}
在主配置文件struts.xml
中配置Action
<?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>
<!-- 开启静态方法 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<package name="demo1" extends="struts-default" namespace="/">
<action name="actionDemo1" class="com.itzhouq.web.action.ActionDemo1">
<result>/demo1/test.jsp</result>
</action>
</package>
</struts>
编写跳转页面../WebContent/demo1/test.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>
<h1>test.jsp</h1>
<%
System.out.println("test.jsp执行了.......");
%>
</body>
</html>
测试
../actionDemo1.action
test.jsp
ActionDemo1执行了......
和test.jsp执行了.......
在com.itzhouq.web.interceptor
下编写两个拦截器
package com.itzhouq.web.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 自定义拦截器一:
* @author itzhouq
*
*/
public class InterceptorDemo1 extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("InterceptorDemo1执行了......");
String str = invocation.invoke();
System.out.println("InterceptorDemo1执行结束了......");
return str;
}
}
方式一:定义拦截器进行配置
注意:一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了。所以,需要手动引入默认拦截器。
在主配置文件做如下配置
<?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>
<!-- 开启静态方法 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<package name="demo1" extends="struts-default" namespace="/">
<!-- 定义拦截器 -->
<interceptors>
<interceptor name="interceptorDemo1" class="com.itzhouq.web.interceptor.InterceptorDemo1"/>
<interceptor name="interceptorDemo2" class="com.itzhouq.web.interceptor.InterceptorDemo2"/>
</interceptors>
<action name="actionDemo1" class="com.itzhouq.web.action.ActionDemo1">
<result>/demo1/test.jsp</result>
<!-- 引入拦截器(一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了) -->
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="interceptorDemo1"/>
<interceptor-ref name="interceptorDemo2"/>
</action>
</package>
</struts>
方式二:定义拦截器栈的方式
<struts>
<!-- 开启静态方法 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<package name="demo1" extends="struts-default" namespace="/">
<!-- 定义拦截器 -->
<interceptors>
<interceptor name="interceptorDemo1" class="com.itzhouq.web.interceptor.InterceptorDemo1"/>
<interceptor name="interceptorDemo2" class="com.itzhouq.web.interceptor.InterceptorDemo2"/>
<!-- 定义拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="interceptorDemo1"/>
<interceptor-ref name="interceptorDemo2"/>
</interceptor-stack>
</interceptors>
<action name="actionDemo1" class="com.itzhouq.web.action.ActionDemo1">
<result>/demo1/test.jsp</result>
<!-- 引入拦截器(一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了) -->
<interceptor-ref name="myStack"/>
</action>
</package>
</struts>
测试:
../actionDemo1.action
.test.jsp
.判断标签:<s:if>
、<s:elseif>
、<s:else>
迭代标签:<s:iterator>
其他标签:
<s:property/>
<s:debug>
<s:date>
----在页面上进行日期格式化举例:编写../WebContent/demo2/test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:set var="i" value="5" scope="request"/>
<s:if test="#request.i > 3">
i 大于 3
</s:if>
<s:elseif test="#request.i < 3">
i 小于 3
</s:elseif>
<s:else>
i 等于 3
</s:else>
<s:iterator var="i" value="{'aa','bb','cc'}">
<s:property value="#i"/>
</s:iterator>
<hr>
<s:iterator var="entry" value="#{'aaa':'111', 'bbb':'222','ccc':'333' }">
<s:property value="#entry.key"/>--<s:property value="#entry.value"/><br>
</s:iterator>
<hr>
<s:iterator var="i" begin="100" end="150" step="5" status="status">
<s:if test="#status.count % 3 == 0">
<font color="red"><s:property value="#i"/></font>
</s:if>
<s:else>
<s:property value="#i"/>
</s:else>
</s:iterator>
</body>
</html>
测试:访问工程下../demo2/test.jsp
原文:https://www.cnblogs.com/itzhouq/p/Struts2_4.html