Struts学习笔记(四)拦截器&struts标签库

struts拦截器

概述

拦截器,在面向切面编程中用于在某个方法或字段被访问之前,进行拦截然后在方法执行之前或之后加入某些操作。拦截是AOP面向切面编程的一种实现策略。

实现原理

Struts2拦截器的实现原理相对简单,当请求struts2的action时,请求到达struts2的servletDispatcher的时候,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器。
struts2的拦截器是可插拔的。拦截器栈就是将拦截器按顺序联结成一条链,再访问被拦截的方法或者字段的时候拦截器链中的拦截器就会按之前定义的顺序被调用

struts2的执行流程

在这里插入图片描述

自定义拦截器
方式一.实现接口-Interceptor
import com.opensymphony.xwork2.interceptor.Interceptor;
public class jiekoushixian implements Interceptor{
	@Override
	public void destroy() {
	}
	@Override
	public void init() {
	}
	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		return null;
	}
}

实现这个接口,需要实现他的三个方法。

方式二.继承抽象拦截器类AbstractInterceptor

这个抽象类以及实现了init和destroy方法,只需要实现intercept方法

public class InterceptorDemo1 extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("InterceptorDemo1执行了...");
		String obj=invocation.invoke();
		System.out.println("InterceptorDemo1结束");
		return obj;
	}
	
}
拦截器的配置

1.拦截器

<package name="demo1" extends="struts-default" namespace="/">
 		方式一:定义拦截器 
		<interceptors>
			<interceptor name="interceptorDemo1" class="com.itheima.web.interceptor.InterceptorDemo1"></interceptor>
			<interceptor name="interceptorDemo2" class="com.itheima.web.interceptor.InterceptorDemo2"></interceptor>
		</interceptors> 
		
		<action name="actionDemo1" class="com.itheima.web.action.ActionDemo1">
			<result>/demo1/demo1.jsp</result>
			<!--引入拦截器(一旦引入自定义拦截器,默认拦截器栈里面的拦截器就不执行了) 所以就续收手动去引入那些必要的拦截器-->
			<interceptor-ref name="interceptorDemo1"></interceptor-ref>
			<interceptor-ref name="interceptorDemo2"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
	</package>

2.拦截器栈

	<package name="demo1" extends="struts-default" namespace="/">
		<!-- 方式二:自定义拦截器栈 -->
		<interceptors>
			<!-- 拦截器 -->
			<interceptor name="interceptorDemo1" class="com.itheima.web.interceptor.InterceptorDemo1"></interceptor>
			<interceptor name="interceptorDemo2" class="com.itheima.web.interceptor.InterceptorDemo2"></interceptor>
			<!-- 定义拦截器栈 -->
			<interceptor-stack name="myStack">
				<interceptor-ref name="defaultStack"></interceptor-ref>
				<interceptor-ref name="interceptorDemo1"></interceptor-ref>
				<interceptor-ref name="interceptorDemo2"></interceptor-ref>
			</interceptor-stack>	
		</interceptors>
		
		<action name="actionDemo1" class="com.itheima.web.action.ActionDemo1">
			<result>/demo1/demo1.jsp</result>
			<!-- 对应方式二:引入拦截器栈 -->
			<interceptor-ref name="myStack"></interceptor-ref>
		</action>
	</package>

struts2的标签库

1.控制标签

1.1 if、elseif、else标签
1.2 iterator标签,属性包括begin/end/status/step/value/var,其中status包含count、first、last、index、even、odd等方法
1.3 数据标签常用的有<s:property>、<s:a>、<s:debug>、<s:include>、<s:sparam>
<s:property>在这里插入图片描述
<s:a>
在这里插入图片描述

<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:property value="i"/><br/>
</s:iterator>
<hr/>
<s:iterator var="entry" value="#{'aaa':'111','bbb':'222','ccc':'333'}">
	<s:property value="#entry.key"/>--<s:property value="#entry.value"/>
	<s:property value="key"/>--<s:property value="value"/><br/>
</s:iterator>
<hr/>
<s:iterator var="i" begin="1" end="10" step="1">
	<s:property value="#i"/>
</s:iterator>
<hr/>
<s:iterator var="i" begin="100" end="300" 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>
2.UI标签

2.1<s:form>标签
在这里插入图片描述
2.2<s:submit>标签
在这里插入图片描述
2.3<s:textfield>和<s:textarea>
在这里插入图片描述
2.4<s:password>
在这里插入图片描述
2.5<s:radio>
在这里插入图片描述
2.5<s:checkboxlist>
在这里插入图片描述
2.7<s:select>
在这里插入图片描述
2.8<s:hidden>
在这里插入图片描述
2.9<s:reset>
在这里插入图片描述
2.x代码

<h1>UI标签</h1>
<h3>传统的表单</h3>
<form action="${ pageContext.request.contextPath }/uiAction.action" method="post">
	<input type="hidden" name="id"/>
	用户名:<input type="text" name="name"/><br/>
	密码:<input type="password" name="password"><br/>
	年龄:<input type="text" name="age"><br/>
	性别:<input type="radio" name="sex" value="男"><input type="radio" name="sex" value="女"><br/>
	籍贯:<select name="city">
		<option value="">-请选择-</option>
		<option value="北京">北京</option>
		<option value="上海">上海</option>
		<option value="深圳">深圳</option>
		<option value="韩国">韩国</option>
	</select><br/>
	爱好:<input type="checkbox" name="hobby" value="basketball"/>篮球
	<input type="checkbox" name="hobby" value="football"/>足球
	<input type="checkbox" name="hobby" value="volleyball"/>排球
	<input type="checkbox" name="hobby" value="pingpang"/>乒乓球<br/>
	介绍:<textarea name="info" cols="8" rows="2"></textarea><br/>
	<input type="submit" value="提交"/>
</form>

<s:debug></s:debug>
<h3>UI标签的表单</h3>
<s:form action="uiAction" namespace="/" method="post" >
	<s:hidden name="id" />
	<s:textfield name="name" label="用户名"/>
	<s:password name="password" label="密码" showPassword="true"/>
	<s:textfield name="age" label="年龄"/>
	<s:radio list="{'男','女'}" name="sex" label="性别"/>
	<s:select list="{'北京','上海','深圳','韩国'}" name="city" label="籍贯" headerKey="" headerValue="-请选择-"/>
	<s:checkboxlist list="#{'basketball':'篮球','football':'足球','volleyball':'排球','pingpang':'乒乓球'}" name="hobby" label="爱好"/>
	<s:textarea name="info" cols="8" rows="2" label="介绍" ></s:textarea>
	<s:submit value="提交"/>
</s:form>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值