Struts2 框架总结(三) :拦截器

struts拦截器属于aop编程,类似过滤器,是在执行action之前做一些其他的事情。

执行过程:

struts响应客户请求时经过一系列配置查找找到匹配的ActionInvocation, 再根据配置查询当前action的拦截器栈执行拦截器1开始, 2开始, 3开始再执行action的核心方法方法执行完毕后action并没有结束再根据拦截器栈逆序执行拦截器3结束, 2结束, 1结束最终返回执行结果.


当请求到达action之前,struts就自动给属性名与传来的参数名相等的属性赋值,这就是利用了拦截器的原理,这里开发一个简单的拦截器,让输入非法字符显示***。

首先定义一个拦截器:需要继承AbstractInterceptor类,重写intercept方法

package sdibt.fly.interceptor;

import sdibt.fly.action.CommentAction;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyInterceptor extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		// TODO Auto-generated method stub
		//获取请求的action
		Object action = arg0.getAction();
		//如果该类是我们要请求的目标类,则执行检查操作
		if(action instanceof CommentAction){
			//强制转换
			CommentAction commentAction=(CommentAction)action;
			//获取属性
			String s = commentAction.getCommentText();
			//检查该字符串是否包含敏感字
			commentAction.setCommentText(s.replaceAll("unsuitable", "***"));		
		}	
		return arg0.invoke();
	}

}

定义一个action,让添加的评论跳转另一个界面

package sdibt.fly.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
public class CommentAction {

	private String commentText;
	
	public String comment(){
		//将接受到的文字带到另一个界面
		ActionContext ctx = ActionContext.getContext();
		
		Map map = (Map) ctx.get("request");
		
		map.put("commentText", this.commentText);
			
		return "success";
	}

	public String getCommentText() {
		return commentText;
	}

	public void setCommentText(String commentText) {
		this.commentText = commentText;
	}
	

}


一个html界面,用来提交评论。。一个jsp界面,用来显示评论

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="comment/comment" method="post">
		<span>评论:</span>
		<input type="text" name="commentText" />		
		<input type="submit" value="添加评论"/>
	</form>
</body>
</html>
<%@ 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>

${requestScope.commentText}

</body>
</html>

配置xml文件,让请求经过拦截器

<package name="comment" namespace="/comment" extends="struts-default"> 	
		<!-- 定义拦截器 -->
		<interceptors>
			<interceptor name="myinter" class="sdibt.fly.interceptor.MyInterceptor"></interceptor>
			<!-- 定义拦截器栈 -->
			<interceptor-stack name="myStack">
				<!-- 先经过一些默认的拦截器,在经过自己定义的拦截器 -->
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="myinter"></interceptor-ref>
			</interceptor-stack>
		</interceptors>

   		<action name="comment" class="sdibt.fly.action.CommentAction" method="comment"> 
   			<!-- 使用自己的拦截器 -->
   			<interceptor-ref name="myStack"></interceptor-ref>		
   			<result name="success" >/comment_success.jsp</result>
   		</action>
   
   </package>

测试结果:

添加评论界面:


显示评论界面:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值