Struts2拦截器和标签
一、struts2拦截器
1、struts2是框架,封装了很多的功能,struts2里面封装的功能都是在拦截器里面。
2 struts2里面封装了很多的功能,有很多拦截器,不是每次这些拦截器都执行,每次执行默认的拦截器。
3 struts2里面默认拦截器位置,在struts2-core.jar jar包里面有一个struts-default.xml文件,在里面配置了默认拦截器。


4拦截器在action被创建之后,方法执行之前执行。
5拦截器的底层使用的两个原理
(1)aop思想:struts2的拦截器底层使用了aop的思想,aop是面向切面(方面)编程,
aop的思想是不通过修改源代码而去增强功能,通过使用配置文件来完成。
(2)责任链模式:责任链模式是一种设计模式。在责任链中要执行多个操作,比如添加、修改、删除三个操作。
首先执行添加操作,添加操作执行之后 做类似于放行操作,执行修改操作,修改操作执行之后做类似于放行操作,执行删除操作。
6、aop和责任链在struts2拦截器中的应用。
(1)在action方法执行之前执行默认拦截器,执行过程使用aop思想,在action没有直接调用拦截器的方法,使用配置文件方式进行操作
(2)在执行拦截器时候,执行很多的拦截器,这个过程使用责任链模式
假如执行三个拦截器,执行拦截器1,执行拦截器1之后做放行操作,执行拦截器2,执行拦截器2之后做放行,执行拦截器3,
行拦截器3之后放行,执行action的方法。
7、两个不同点:
(1)action和Servlet的不同点:
servlet:默认第一次访问servlet时创建,只创建一次,属于单实例对象。
action:默认每次访问action都会创建,属于多实例对象。
(2)过滤器和拦截器的不同:
过滤器:理论上可以过滤任何内容。比如html、jsp、Servlet、文件路径等。
拦截器:struts独有概念,只能过滤action。
二、自定义拦截器
1、虽然在struts2里面已经封装了很多的过滤器,但是有时我们需要使用没有的拦截器,这时候就需要自己创建拦截器。
2创建自定义拦截器的步骤:
(1)先写一个类来继承MethodFilterInterceptor类。
(2)重写该类的doIntercept方法。
(3)在方法中写处理逻辑
(4)如果成功则返回 invocation.invoke();
(5)如果失败则返回要到的result标签中的name属性值。
(6)在xml文件中注册该拦截器,将拦截器和action关联起来。
3、示例:
(1)首先写一个登录的页面和action方法。
页面:login.jsp
<%@ 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>
<h1>登录</h1>
<form action="${pageContext.request.contextPath}/demo_login.action" method="post">
username:<input name="username"><br/>
password:<input name="password"><br/>
<br/>
<input type="submit" value="提交">
</form>
</body>
</html>
action:
public String login(){
HttpServletRequest request =ServletActionContext.getRequest();
String name =request.getParameter("username");
String pwd =request.getParameter("password");
if("admin".equals(name) && "123".equals(pwd)){
//将username放到session中保持登录的状态,在拦截器中通过该session判断是否登录
request.getSession().setAttribute("username", name);
return "loginsucess";
}else{
return "login";
}
}
(2)在写一个登录成功的页面
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--要使用struts2标签,必须要引入struts2标签库 --%>
<%@ 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>
<h1>用户名:${sessionScope.username}</h1>
<%--跳转Action,验证拦截器 --%>
<a href="${pageContext.request.contextPath}/demo_add.action">添加</a>
</body>
</html>
(3)在写一个增加的页面和action方法
add.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--要使用struts2标签,必须要引入struts2标签库 --%>
<%@ 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>
<h1>添加</h1>
<input type="text" name="username"><br/>
<input type="password" name="password"><br/>
<input type="submit" value="提交">
</body>
</h
action
public String add(){
HttpServletRequest request =ServletActionContext.getRequest();
String name =request.getParameter("username");
String pwd =request.getParameter("password");
return "add";
}
(4)写拦截器
//自定义拦截器,继承MethodFilterInterceptor类
//拦截器只能拦截action
public class LoginInterpret extends MethodFilterInterceptor{ //2重写doIntercept方法
protected String doIntercept(ActionInvocation invocation) throws Exception { //3写内部逻辑
HttpServletRequest request =ServletActionContext.getRequest(); Object object = request.getSession().getAttribute("username"); if(object != null){
//通过拦截器
return invocation.invoke();
}
//不通过,返回值写xml配置文件中的result里面的值
return "login"; } }
(5)注册拦截器
(6)配置拦截器不拦截的方法
<struts>
<package name="ValueStackDemoAction" extends="struts-default" namespace="/">
<!--
声明拦截器
name:拦截器的个名称,自定义
class:拦截器类的全路径
-->
<interceptors>
<interceptor name="logininterceptor" class="com.jack.interpret.LoginInterpret"></interceptor>
</interceptors> <action name="demo_*" class="com.jack.value.ValueStackDemoAction" method="{1}">
<!--
2使用声明的拦截器
name:上一步声明中的name属性值
-->
<interceptor-ref name="logininterceptor">
<!--
3不予拦截的方法
name:固定值:excludeMethods
值:Action中不予拦截的方法名称
-->
<param name="excludeMethods">login</param>
</interceptor-ref> <result name="loginsucess">/jsp/success.jsp</result>
<result name="login">/jsp/login.jsp</result>
<result name="add">/jsp/add.jsp</result>
</action>
</package>
</struts>
三、struts2的标签
1表单标签
<%--struts2标签只能用在jsp中,不能在html中使用 --%>
<%--表单标签 --%>
<s:form action="" method="" enctype="" target="" theme="">
<%--普通文本标签 --%>
<s:textfield name="name" label="用户名"></s:textfield>
<%--密码标签--%>
<s:password name="password" label="密码"></s:password>
<%--1、单选标签 value属性值和显示值一致 --%>
<s:radio list="{'男','女'}" name="sex" label="性别"></s:radio>
<%--2、单选标签 value属性值和显示值不一致 --%>
<s:radio list="#{'0':'男','1':'女'}" name="sex1" label="性别"></s:radio>
<%--1 多选标签 --%>
<s:checkboxlist list="{'吃饭','睡觉','玩手机'}" name="aihao" label="爱好"></s:checkboxlist>
<%--2 多选标签 --%>
<s:checkboxlist list="#{'0':'吃饭','1':'睡觉','2':'玩手机'}" name="aihao1" label="爱好"></s:checkboxlist>
<%--1下拉框标签 --%>
<s:select list="{'初中','高中','大专','本科'}" name="college" label="学历"></s:select>
<%--2下拉框标签 --%>
<s:select list="#{'1':'初中','2':'高中','3':'大专','4':'本科'}" name="college1" label="学历"></s:select>
<%--文件标签 --%>
<s:file name="file" label="文件上传"></s:file>
<%--隐藏标签 --%>
<s:hidden name="hidden" value="隐藏项"></s:hidden>
<%--文本域标签 --%>
<s:textarea name="jianli" label="简介"></s:textarea>
<%--提交标签 --%>
<s:submit name="submit" label="提交"></s:submit>
<%--重置标签 --%>
<s:reset name="set" label="重置"></s:reset>
</s:form>
2、控制标签<s:if>、<s:elseif>、<s:else>标签
<s:if test="表达式一">
标签体
</s:if>
<s:elseif test="表达式二">
标签体
</s:elseif>
<s:else>
标签体
</s:else>
Struts2拦截器和标签的更多相关文章
- Struts2拦截器总结
拦截器的本质: 拦截器就是一个类,一个实现了超级接口Interceptor的类.Interceptor接口里定义了三个方法 init(),destory(),intercept().其中inercep ...
- 从struts2拦截器到自定义拦截器
拦截器可谓struts2的核心了,最基本的bean的注入就是通过默认的拦截器实现的,一般在struts2.xml的配置中,package内直接或间接继承了struts-default.xml,这样st ...
- Struts2拦截器配置实例
拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 * 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链. * 责任链每一个节 ...
- struts2拦截器interceptor的配置方法及使用
转: struts2拦截器interceptor的配置方法及使用 (2015-11-09 10:22:28) 转载▼ 标签: it 365 分类: Struts2 NormalText Code ...
- Struts2拦截器详解
一.Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列 ...
- Struts框架笔记04_拦截器_标签库
目录 1. Struts2的拦截器 1.1 拦截器概述 1.2 拦截器的实现原理 1.3 Struts的执行流程 1.4 拦截器入门 1.4.1 环境搭建 1.4.2 编写拦截器 1.4.3 配置拦截 ...
- Struts2 拦截器配置以及实现
@(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...
- struts2 拦截器
拦截器:对Action的访问.可以拦截到Action中某个方法.与过滤器不同,过滤器过滤的是请求.过滤JSP.html.但是拦截器不能拦截jsp.html的访问. Struts2 拦截器在访问某个 A ...
- Struts2拦截器的使用 (详解)
Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...
随机推荐
- Verilog MIPS32 CPU(八)-- 控制器
Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...
- django使用ajax传输数据
HTML文件ajax get例子 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- json 登陆协议分析
登录方式有两种:1)用户名密码登陆,code 为 5401 (2) IMSI和TOKEN 登陆, code 为93 POST /tcpbus/mobile HTTP/1.1Host: clientac ...
- hello world! hello blog!
2015年12月21日 16:42:15 博客开启!
- Qt学习(一)
1. 简介 跨平台 GUI 通常有三种实现策略 API 映射 相当于将不同平台的 API 提取公共部分.界面库使用同一套 API,将其映射到不同的底层平台上面.相当于取交集 如wxWidgets. 优 ...
- 《Beginning Java 7》 - 7 - abstract class 抽象类 和 interface 接口
1. 抽象类: 为什么用抽象类: 一些 generic 的类本身并没有现实意义,所以不需要被实例化.比如动物,自然界没有动物这个物种,但却有无数的继承自动物的物种,那么动物本身可以是一个抽象类. 抽象 ...
- OCP2018最新题库,052新题库及答案整理-25题
25.Which is true about logical and physical database structures? (Choose the best answer) A. An undo ...
- 傻瓜式学Python3——列表
前言: 好久不见,突然发觉好久没写博客了,最近迷上了 Python 无法自拔,了解了一下,Python 简单易学,尤其是接触过java的人,入门 Python 更是门槛极低,本着学习记录的原则,边学习 ...
- P3866 [TJOI2009]战争游戏 最小割
$ \color{#0066ff}{ 题目描述 }$ 小R正在玩一个战争游戏.游戏地图是一个M行N列的矩阵,每个格子可能是障碍物,也可能是空地,在游戏开始时有若干支敌军分散在不同的空地格子中.每支敌军 ...
- 通过Maven简单搭建SSM框架
创建Maven就不用多说了,下面直接看Pom.xml里面的依赖吧 <properties> <!-- spring版本号 --> <spring.version>5 ...