博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2动态调用+Servlet过滤器+struts2拦截器
阅读量:4537 次
发布时间:2019-06-08

本文共 4399 字,大约阅读时间需要 14 分钟。

周末真的是懒到心慌。。。。。。

本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章:

首先简单说明一下为什么需要在s2sh项目中配置题目所述三项:

1.struts2动态调用:

如果不配置动态调用,我们只能在一个action中调用一个默认excute()方法,每请求调用一个方法就需要编写一个action,这样就会加大开发的工作量,因此这是刚需。

2.Servlet过滤器

Servlet过滤器我们可以理解为一个独立的web组件,它拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。过滤器是通常封装了一些功能的 Web 组件,这些功能虽然很重要,但是对于处理客户机请求或发送响应来说不是决定性的。

3.struts2拦截器

struts2拦截器是是其核心,拦截器可以让我们在action和result执行之前或者之后完成一些操作,比如权限验证,未登陆的用户不被允许访问某些资源等。

过滤器与拦截器的区别

首先过滤器是基于servlet的基础上进行的操作,是属于全局的,可过滤到所有请求资源,包括.css等文件,而拦截器是基于struts2的,只能过滤到请求action的方法。

相同点,二者的实现都可看作是模块化的,可理解为是aop的一种策略。

配置步骤:

第一步:配置struts2动态调用

在struts.xml配置文件中的<struts></struts>节点内声明struts2支持动态调用、并规定匹配怎样的字符交给struts2进行处理,代码如下:

第二步:配置servlet过滤器

过滤器的配置需要我们实现servlet的Filter接口,并实现其抽象方法destroy()、doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2)、init(FilterConfig arg0),三个方法含义分别是初始化、过滤操作、销毁,接着需要我们在web.xml进行声明自定义过滤器,因为web.xml才是servlet的第一容器,给出自定义过滤器代码如下:

package wjt.com.test.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class CharacterFilter implements Filter{    @Override    public void destroy() {        // TODO Auto-generated method stub            }    @Override    public void doFilter(ServletRequest arg0, ServletResponse arg1,            FilterChain arg2) throws IOException, ServletException {        System.out.println("过滤器...");        arg2.doFilter(arg0, arg1);    }    @Override    public void init(FilterConfig arg0) throws ServletException {        // TODO Auto-generated method stub            }}

修改后的web.xml如下:

SSHDemo
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
characterFilter
wjt.com.test.filter.CharacterFilter
encoding
UTF-8
characterFilter
/*
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*

 

第三步:配置struts2拦截器

struts2的拦截器接口有多个,根接口也包含初始化、执行拦截操作、销毁三个抽象方法,这里我们继承MethodFilterInterceptor抽象类,该类内部已经对初始化和销毁的方法进行了实现,因此只需要实现执行拦截操作的抽象方法即可,当然如果有初始化和销毁操作,我们这里也可以对其进行定义覆盖父类同名方法的实现,代码如下:

package wjt.com.test.interceptor;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;/** * 自定义方法拦截器 *  * @author Together * */public class MethodInterceptor extends MethodFilterInterceptor{    /**     *      */    private static final long serialVersionUID = 1L;    @Override    protected String doIntercept(ActionInvocation arg0) throws Exception {        System.err.println("拦截器生效...");        String action=(String) ServletActionContext.getRequest().getSession().getAttribute("action");        System.out.println("action:"+action);        StringBuffer requstPath=ServletActionContext.getRequest().getRequestURL();        System.out.println("requstPath:"+requstPath);        System.err.println("拦截器结束...");        return arg0.invoke();    }}

配置struts.xml文件,使拦截器生效,配置如下:

配置action实现类,若使对action实现类的请求经过自定义拦截器的处理,需要我们对其添加@ParentPackage("default"),该注解添加到action类名上方,作为action的第一注解存在。

测试:

到这里题目所属三项配置就完毕了,启动项目并请求action后截图如下所示表示配置成功:

 

这里只给出简单配置,读者朋友最好还是在理解原理的前期下使用,本人还是刚毕业小白,对原理的理解还不够深,还没能达到陈述原理的水平,有不合理的地方还请大家指出。

转载于:https://www.cnblogs.com/wujingtaocoding/p/7967634.html

你可能感兴趣的文章
Deploy Sharepoint Designer 2010 Workflow as WSP
查看>>
启动页面
查看>>
innodb_flush_log_at_trx_commit与sync_binlog理解
查看>>
Python脚本重定向其输出时的编码问题
查看>>
二叉搜索树
查看>>
序列模型(4)----门控循环单元(GRU)
查看>>
-Ubuntu系统下安装srilm工具箱
查看>>
关于python如何输出log
查看>>
angular2模板绑定样式
查看>>
用Go自己实现配置文件热加载功能
查看>>
如何解决U盘装系统后磁盘总容量变小?
查看>>
C#基本数据类型与C++区别
查看>>
CXF添加拦截器和自定义拦截器
查看>>
SmartBear推出新产品LoadComplete
查看>>
d2js 中实现 memcached 共享 session 的过程
查看>>
HightCharts基本图形:折线图、柱状图、饼图
查看>>
Java创建对象过程
查看>>
1005 继续(3n+1)猜想 (25 分)
查看>>
CSS的7种常用的垂直居中的方法
查看>>
BZOJ1001 狼抓兔子
查看>>