struts2_day04

拦截器Interceptor
1.拦截器的概述:
	拦截器是AOP的一种实现策略
2.struts2拦截器的原理:
	AOP(动态代理),责任模式(拦截器链)
3.struts2拦截器,springmvc拦截器,过滤器的区别:
* struts2拦截器:在Action对象创建后,方法调用前执行,只能对Action类中的方法进行增强
* springmvc拦截器:在Controller对象创建后,方法调用前执行,只能对Controller类的方法进行增强
* filter过滤器:过滤器是web引用的三大组件之一,任何web项目都能使用,而且配置"/*",可以对任何请求进行过滤
4.struts2拦截器配置文件:
	struts2-core-2.3.24.jar!\struts-default.xml
自定义拦截器
1.struts2自定义拦截器
(1)自定义一个类继承MethodFilterInterceptor抽象类
public class LoginInterceptor extends MethodFilterInterceptor {
	@Override
    protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
        //访问action中的方法前拦截,判断session中是否有User
        Object user = ServletActionContext.getRequest().getSession().getAttribute("user");
        if (user != null) {
            //已登录,放行
            return actionInvocation.invoke();
        }
        //未登录,转发到登录页面
        return "login";
    }
}
(2)关联拦截器与Action类,配置struts.xml
<package name="demo" extends="struts-default" namespace="/">
	<interceptors>
		<!--配置自定义拦截器对象-->
		<interceptor name="loginIntercept" class="com.baidu.intercept.LoginInterceptor">
        </interceptor>
	</interceptors>
	<action name="customer_*" class="com.baidu.action.CustomerAction" method="{1}">
		<!--引入自定义拦截器对象,
			配置自定义拦截器对象后会导致默认拦截器失效,因此再引入默认拦截器-->
         <interceptor-ref name="loginIntercept">
         	<!--放行登录请求,param标签内指定需要放行的方法的方法名,
				如果多个方法,","隔开-->
            <param name="excludeMethods">login</param>
         </interceptor-ref>
         <interceptor-ref name="defaultStack"></interceptor-ref>
         <result name="loginSuccess">/loginSuccess.jsp</result>
	</action>
</package>

2.springmvc自定义拦截器
(1)自定义一个类实现HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor{
 	preHandle();	//return true表示放行,false表示不放行,最先执行的方法
	postHandle();	//处理器方法执行完后,再跳转页面前执行该方法
	afterCompletion(); //跳转页面后执行该方法
}
执行顺序:preHandle()-->controllerMethod()-->postHandle()-->jspMethod()-->afterCompletion()
(2)在springmvc.xml中配置拦截器
<mvc:interceptors>
    <mvc:interceptor>
        <!--配置拦截的范围-->
        <mvc:mapping path="/**"></mvc:mapping>		// /**表示拦截所有包下所有请求
        <!--将自定义的拦截器对象交给springmvc容器来管理-->
        <bean id="myInterceptor" class="com.baidu.interceptor.MyInterceptor">
        </bean>
    </mvc:interceptor>
</mvc:interceptors>
struts2表单标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>
	<!--  form标签,表单标签的action属性不能使用${pageContext.request.contextPath},
				直接写Action访问路径即可 -->
	<s:form action="customer_add.action" method="post">
		<!-- 普通输入项 -->
		<s:textfield name="username" label="用户名"></s:textfield>
		<!-- 密码输入项 -->
		<s:password name="password" label="密码"></s:password>
		<!-- 单选输入项 
			第一种情况: value值和显示值一样的,构建list集合
			第二种情况: value值和显示值不一样的,构建map集合,提交上去的值是Map的key
		-->
		<s:radio list="{'男','女'}" name="sex" label="性别"></s:radio>
		<s:radio list="#{'male':'男','female':'女' }"  name="gender" label="性别"></s:radio>
		<!-- 复选输入项 -->
		<s:checkboxlist list="{'吃饭','睡觉','购物'}" name="love" label="爱好"></s:checkboxlist>
		<!-- 下拉输入框 -->
		<s:select list="{'幼儿园','博士后','教授'}" name="college" label="学历"></s:select>
		<!-- 隐藏输入项 -->
		<s:hidden name="hid" value="abcd"></s:hidden>
		<!-- 文件上传项 -->
		<s:file name="file" label="选择文件"></s:file>
		<!-- 文本域 -->
		<s:textarea rows="3" cols="10" label="简历" name="resume"></s:textarea>
		<!-- 提交按钮 -->
		<s:submit value="提交"></s:submit>
		<!-- 重置按钮 -->
		<s:reset value="重置"></s:reset>
	</s:form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值