Struts2拦截器到底拦截了什么?

  • 关于struts2中的拦截器,首先再次理解其实只能过滤其中访问的action的映射!再者,因为struts中的action其实就是起到替代servlet作用的,所以在struts2作为全局拦截的时候,servlet即使通过注解或者web.xml配置之后 ,也是不能直接访问的,必须通过Controller拦截器,一层层拦截到作为Model的action进行操作之后,返回对应结果再转发、重定向等方式到servlet中。

  • 我们不允许在注解和web.xml同时对一个servlet或者filter进行配置!如果这样的话你就会看到tomcat启动失败,并且抛出not permitted操作

Struts如何拦截jsp,不拦截Servlet?

  • 但是struts2默认是不会拦截对jsp的操作的,我们,可以将jsp放置在WEB-INF通过访问action的方式,action操作之后,通过转发的方式,访问jsp,来实现拦截的操作!

那还有没有其他方法呢?

  • 有的,在学习filter和servlet的时候,我们都知道缺省路径那在这里我们也可以使用缺省路径,进行模糊匹配!

    让StrutsPrepareAndExecuteFilter对我们给定后缀的文件进行过滤这样就可以只过滤action和jsp文件了!不会过滤servlet了,但是这样的话,你的action在请求的时候,就必须写明后缀了,.do或者.action
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.do</url-pattern>
<url-pattern>*.action</url-pattern>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

补充注意:如果要在使用了struts2的项目中配置自己的过滤器,必须写在struts的PreparedAndExecuteFilter之前,不然是不会生效的!


并且请注意:

建议在配置struts.xml文件的时候,为action配置一个后缀名!!!

为什么呢?因为如果不配置固定的.action诸如此类的话,在进行虚拟路径进行访问的时候,都会默认到struts.xml中进行查找,没有后缀的文件名,都默认会被当成action来看待,就无法正常访问servlet之类的了!!!

原因:

  • 因为基于struts2的项目,当你进入StrutsPrepareAndExecuteFilter就已经进入了struts的控制流程,最后执行和转发等一系列操作,都是在struts2内部完成的!但是servlet就无所谓了,在web.xml中的位置,在前在后都没有关系!

  • 当然通过注解的方式进行配置就最为方便,不用考虑顺序问题!

<!-- 配置action后缀强制只能为.action -->
<constant name="struts.action.extension" value="action"/>

#回忆struts2的构架流程:

我们继承与struts-default package的中默认的执行流程:

由struts2中配置使用servlet引发的思考和复习的更多相关文章

  1. 在Struts2中配置Action

    在Struts2中配置Action <package>: 1.定义Action使用<package>标签下的<action>标签完成,一个<package&g ...

  2. 详解struts2中配置action的方法

    如何解决action太多的问题??我们因为需要不同的方法,所以往往建立很多不同的类,但是每个类中往往仅仅几行代码,不仅浪费了时间,而且配置起来也很繁琐,所以,建立一个共有的类,然后根据以下方式来操作, ...

  3. 在struts2中配置自定义拦截器放行多个方法

    源码: 自定义的拦截器类: //自定义拦截器类:LoginInterceptor ; package com.java.action.interceptor; import javax.servlet ...

  4. Struts2中配置默认Action

    1.当访问的Action不存在时,页面会显示错误信息,可以通过配置默认Action处理用户异常的操作:2.配置方法:    在struts.xml文件中的<package>下添加如下内容: ...

  5. 在springBoot中配置web.xml中配置的servlet

    第一种 web.xml (截取的需要转换的) 当拦截到 /socke t时执行该servlet <servlet> <servlet-name>websocket</se ...

  6. struts2中配置全局日期类型转换器

    1.编写一个类,继承StrutsTypeConverter,实现其中的convertFromString和convertToString方法,该类如下: package me.edu.utils; i ...

  7. 由项目中一个hash2int函数引发的思考

    hash2int /** * 计算一个字符串的md5折算成int返回 * @param type $str * @return type */ function hash2int($str) { $m ...

  8. Java中由常量类引发的思考

    我们都知道,定义一个常量类是十分简单的.首先差固件一个类,然后类中声明一些public修饰的静态常量.没错就这么简单: 写好之后,在其他地方使用的时候,直接类名.属性名就可以使用了. 而LZ现在想的是 ...

  9. 有 va_arg宏 中数组下标-1 引发的思考 - C 语言中内存模型

    va_arg宏,是头文件 stdarg.h 中定义的,获取可变参数的当前参数. #define va_arg(list, mode) ((mode*)(list+=sizeof(mode)))[-1] ...

随机推荐

  1. Centos7 安装Oracle11g Express Edition

    Centos7 安装Oracle11g Express Edition 下载地址:https://download.oracle.com/otn/linux/oracle11g/xe/ 一.安装相关依 ...

  2. Debian9 无线网卡驱动安装

    https://wiki.debian.org/iwlwifi sudo vi /etc/apt/sources.list --------- ..... deb http://httpredir.d ...

  3. centos7 几种修改系统时区的方法

    1.  # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # ln -sf /usr/share/zoneinfo/Asia/Shanghai ...

  4. Lambda 方法引用 构造器引用 数组引用

    一.方法引用 注意: 1.Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中的抽象方法的函数列表和返回值保持一致!2.若Lambda 参数列表中的第一个参数是实例方法的调用者,而第二个 ...

  5. odoo中Controller

    一:Controller 一般通过继承的形式来创建controller类,继承自odoo.http.Controller. 以route装饰器来装饰定义的方法,提供url路由访问路径: class M ...

  6. (Opencv4)二值化图像

    (Opencv4)二值化图像  ret, dst = cv2.threshold(src, thresh, maxval, type) threshold : 极限,临界值,阈值 ret: 一个数 s ...

  7. npx的使用方法、场景

    目录 npx使用教程 npm与npx的概念 npx的使用场景(对比npm的一些优势) 使用场景1: 想用项目中已经安装好的某个包, 但是不能直接执行(因为没有全局安装, 涉及环境变量的问题) 使用场景 ...

  8. 计算距离2020年圣诞节还有x天x时x分x秒

    //计算两者相差毫秒数 //创建当前时间和圣诞节时间的Date对象 var d1=new Date(); var d2=new Date('2020/12/25'); //计算相差的毫秒 var d= ...

  9. 使用Python玩转阿里云盘

    项目地址: https://github.com/foyoux/aligo 这个项目起源于我的一个简单需求, 我有25000个文件, 已经上传了9000个, 但是现在我把这些文件重新整理了, 最后我不 ...

  10. spingsecurity 前后端分离跨域,ajax无用户信息

    1.自测时用的postman没有任何问题 2.和前端对接时发现登录不上,ajax Error 出错:{"readyState":0,"responseText" ...