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. Linux从入门到进阶全集——【第十五集:安装apache服务器】

    1,查看是否安装了httpd软件包以及其依赖:rpm -qa httpd(rpm -qa | grep httpd),如果没有输出任何信息,表示你没有安装httpd软件包,如果有输出一般是已经安装了: ...

  2. 网络损伤仪WANsim--不同的部署方式

    网络损伤仪WANsim的业务口在逻辑上是不存在IP地址与MAC地址的,所以,WANsim可以串接在测试拓扑中的任意位置,只需要确保有流量通过WANsim即可. 不同的拓扑结构会对测试的结果造成影响.在 ...

  3. 【洛谷P1816 忠诚】线段树

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  4. 基于Redisson实现分布式锁源码解读

    文章目录 一.分布式锁的概念 和 使用场景 二.将redis官网对于分布式锁(红锁)的定义和Redisson实现做概括性总结 三.基于Redisson的分布式实现方案 四.加锁过程分析 五.锁重入过程 ...

  5. 2021年BI软件排名,国内外BI软件功能对比

    数据分析是帮助企业深入了解自身业务表现(例如正在做什么或哪块业务需要注意和改进)的重要元素.为了获得更直观的展现,数据分析BI软件可帮助公司通过报告.数据可视化.应用程序等从数据中获取决策数据支撑.没 ...

  6. Spring Cloud Alibaba基础教程:Nacos+Dubbo

    Spring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案. 它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序.Dubbo是Alib ...

  7. jvm源码解读--02 Array<u1>* tags = MetadataFactory::new_writeable_array<u1>(loader_data, length, 0, CHECK_NULL); 函数引入的jvm内存分配解析

    current路径: #0 Array<unsigned char>::operator new (size=8, loader_data=0x7fd4c802e868, length=8 ...

  8. 大数据学习(04)——MapReduce原理

    前两篇文章介绍了HDFS的原理和高可用,下面再来介绍Hadoop的另外一个模块MapReduce.它的思想是很多技术的鼻祖,值得一学. MapReduce是什么 MapReduce是一个分布式计算系统 ...

  9. uTools电脑软件快速启动工具

                    uTools电脑软件快速启动工具   http://www.autoahk.com/archives/16112   https://gitee.com/weiyunw ...

  10. Sql Server备份表,动态生成表名称

    1.常用的数据库备份表语句 SELECT * INTO tableNameNew FROM tableName 2.动态备份表,且备份表名称后面增加三位随机字符和当前日期 1 DECLARE @bak ...