Struts2进阶学习4
Struts2进阶学习4
自定义拦截器的使用
核心配置文件
<?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> <package name="index" namespace="/" extends="struts-default" > <interceptors>
<!-- 注册拦截器 -->
<interceptor name="myInter3" class="com.struts2.interceptor.MyInterceptor3"/>
<!-- 注册拦截器栈 -->
<interceptor-stack name="myStack">
<!-- 自定义拦截器在默认之前(方便后面的拦截器对前面的也进行处理) -->
<interceptor-ref name="myInter3">
<!-- 指定哪些方法不拦截 -->
<!--<param name="excludeMethods">add,delete</param>-->
<!-- 指定哪些方法需要拦截 -->
<param name="includeMethods">add,delete</param>
</interceptor-ref>
<!-- 引入struts2自带的20个拦截器 -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 指定默认拦截器 -->
<default-interceptor-ref name="myStack"/> <action name="IndexAction_*" class="com.struts2.action.IndexAction" method="{1}" >
<result name="success" type="dispatcher" >/index.jsp</result>
</action>
</package> <package name="tag" namespace="/" extends="struts-default">
<action name="DemoAction" class="com.struts2.action.DemoAction" method="page" >
<result name="success" type="dispatcher" >/tag.jsp</result>
</action>
</package> </struts>
struts.xml
自定义拦截器的3种方式
package com.struts2.interceptor; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; /**
* @author: 肖德子裕
* @date: 2018/11/21 15:48
* @description: 自定义拦截器1
* 拦截器生命周期:随项目启动而创建,随项目关闭而销毁
*/
public class MyInterceptor implements Interceptor {
@Override
public void init() { } @Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
return null;
} @Override
public void destroy() { }
}
(1)
package com.struts2.interceptor; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.Interceptor; /**
* @author: 肖德子裕
* @date: 2018/11/21 15:48
* @description: 自定义拦截器2
*/
public class MyInterceptor2 extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
return null;
}
}
(2)
package com.struts2.interceptor; import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; /**
* @author: 肖德子裕
* @date: 2018/11/21 15:48
* @description: 自定义拦截器3
* MethodFilterInterceptor:方法过滤拦截器
*/
public class MyInterceptor3 extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
//前处理
System.out.println("before>>>");
//放行
actionInvocation.invoke();
//后处理
System.out.println("after>>>");
//跳转到成功页面
return "success";
}
}
(3)
测试拦截器
package com.struts2.action; import com.opensymphony.xwork2.ActionSupport; /**
* @author: 肖德子裕
* @date: 2018/11/21 15:45
* @description: 测试拦截器的使用
*/
public class IndexAction extends ActionSupport {
public String add(){
System.out.println("添加用户!");
return "success";
}
public String delete(){
System.out.println("删除用户!");
return "success";
}
public String update(){
System.out.println("修改用户!");
return "success";
}
public String find(){
System.out.println("查找用户!");
return "success";
}
}
IndexAction
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>I Love China</h2>
</body>
</html>
index.jsp
测试struts2标签的使用(了解)
package com.struts2.action; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; import java.util.ArrayList;
import java.util.List; /**
* @author: 肖德子裕
* @date: 2018/11/21 19:34
* @description: 测试struts2标签的使用
*/
public class DemoAction extends ActionSupport {
public String page(){
List<String> list=new ArrayList<>();
list.add("xdzy");
list.add("xdzy");
list.add("xdzy");
list.add("xdzy");
ActionContext.getContext().put("list",list); return SUCCESS;
}
}
DemoAction
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!-- 循环遍历 -->
<s:iterator value="#list">
<s:property/><br>
</s:iterator>
<hr>
<s:iterator value="#list" var="name">
<s:property value="#name"/><br>
</s:iterator>
<hr>
<s:iterator begin="1" end="100" step="1">
<s:property/>|
</s:iterator> <!-- if,else -->
<s:if test="#list.size()==4">
list长度为4
</s:if>
<s:elseif test="#list.size()==3">
list长度为3
</s:elseif>
<s:else>
默认为0
</s:else>
</body>
</html>
tag.jsp
Struts2进阶学习4的更多相关文章
- Struts2进阶学习3
Struts2进阶学习3 OGNL表达式与Struts2的整合 核心配置文件与页面 <?xml version="1.0" encoding="UTF-8" ...
- Struts2进阶(一)运行原理及搭建步骤
Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...
- PHP程序员进阶学习书籍参考指南
PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18 [初阶](基础知识及入门) 01. <PHP与MySQL程序设计(第4版)> ...
- Matlab 进阶学习记录
最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal = proposal_config('image_means', ...
- struts2源代码学习之初始化(一)
看struts2源代码已有一段时日,从今天開始,就做一个总结吧. 首先,先看看怎么调试struts2源代码吧,主要是下面步骤: 使用Myeclipse创建一个webproject 导入struts2须 ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- Struts2框架学习(一)
Struts2框架学习(一) 1,Struts2框架介绍 Struts2框架是MVC流程框架,适合分层开发.框架应用实现不依赖于Servlet,使用大量的拦截器来处理用户请求,属于无侵入式的设计. 2 ...
- zuul进阶学习(二)
1. zuul进阶学习(二) 1.1. zuul对接apollo 1.1.1. Netflix Archaius 1.1.2. 定期拉 1.2. zuul生产管理实践 1.2.1. zuul网关参考部 ...
随机推荐
- cf888G. Xor-MST(Boruvka最小生成树 Trie树)
题意 题目链接 给出\(n\)点,每个点有一个点权\(a[i]\),相邻两点之间的边权为\(a[i] \oplus a[j]\),求最小生成树的值 Sol 非常interesting的一道题,我做过两 ...
- vuex深入浅出
本文主要记录使用vuex的使用场景.重要组成部分和学习心得. 1.说在前面 学习vue有两周的时间了,目前已经对vue的基础使用比较熟悉了.但是一直对vuex的使用耿耿于怀,这么说是因为总是不太理解, ...
- js中实现多态
最近读到一本书<JavaScript设计模式与开发实践>上,讲到js的多态,我在JavaScript高级程序编程里貌似都没有见过关于这个的详细讲解,所以想问问大家有没有什么推荐的文章或者博 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:紧凑型切片制作(Server缓存切片)
1.前言 在ArcGIS 10中出现了一种新的切片缓存文件格式:紧凑型存储(Compact).与之前的松散型存储(Exploded)相比,它有迁移方便.创建更快.减少存储空间等诸多优点,已经成为了现在 ...
- Automapper 实现自动映射
出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象),这样在后台往前台传递数据时可以省略不必要的信息,只保留必要 ...
- asyncio标准库2 Hello Clock
如何调度协程,并发运行 asyncio.gather方法可以聚合协程or future def gather(*coros_or_futures, loop=None, return_exceptio ...
- JavaScript递归深度问题
递归是有限的东西: function fact(num) { if (num <= 1) { return 1; } else { return fact(num - 1); } } 测试结果是 ...
- python编写脚本,删除固定用户下的所有表
脚本如下: [oracle@ycr python]$ more t_del.py #/usr/bin/python#coding:utf8 import sysimport cx_Oracle i=0 ...
- 我对git 、github的初印象
前言:都说,要在IT这行混得风生水起,就必须不断接触新事物.学习新东西.然而,这个重要的点也是难做的点.当老师要我们用博客交作业的时候,我就觉得挺新鲜了,在知道很多牛逼的程序猿还会用到git和gith ...
- mvc做网站怎么在mvc中直接访问.html网页 [问题点数:20分]
最近用.net mvc做一个网站 我想在mvc中直接访问一个 .html页面 怎么设置一下啊 现在直接访问是404不让访问的 放到view文件夹外面...