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. 【剑指offer】03.数组中重复的数组

    剑指 Offer 03. 数组中重复的数字 知识点:数组:哈希表:萝卜占坑思想 题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些 ...

  2. Redis学习——数据结构上

    一.常用的全局命令 1.查看所有的键: KEYS * KEYS pattern:查找所有符合给定模式 pattern 的 key . KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能 ...

  3. Scala学习——基础入门

    基础语法 1)注意点 1)区分大小写 -  Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 2)类名 - 对于所有的类名的第一个字母要大写. 3)方法名 ...

  4. Unittest方法 -- 测试分离

    一.下面是it.py 脚本,把浏览器前置和后置条件分离了"""套件公用测试类可进行分离"""import unittestfrom sele ...

  5. shell编程-ssh免交互批量分发公钥脚本

    脚本基本原理 1.控制端免交互创建秘钥和公钥: 1 ssh-keygen -t rsa -f /root/.ssh/id_rsa -N "" 2.免交互发送公钥 1 sshpass ...

  6. 消息队列 折腾ActiveMQ时遇到的问题和解决方法

    1.先讲严重的:服务挂掉. 这得从ActiveMQ的储存机制说起.在通常的情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的,它们的最大限制在配置文件的<systemUsage&g ...

  7. 【SpringCloud微服务实战】搭建企业级应用开发框架(一):架构说明

    SpringCloud分布式应用微服务系统架构图: SpringCloud分布式应用微服务系统组件列表: 微服务框架组件:Spring Boot2 + SpringCloud Hoxton.SR8 + ...

  8. 网安日记③之通过iis搭建ftp并使用通过serv-u搭建ftp

    通过iis搭建ftp并使用通过serv-u搭建ftp 安装iis的ftp访问 由于在安装iis时勾选了ftp服务,我们直接在iis界面右键ftp服务打开属性查看本地路径 在电脑目录下打开安装目录,并在 ...

  9. Nacos 笔记

    Nacos 笔记 目录 Nacos 笔记 1. Nacos简介 1.1 主流配置中心对比 1.2 主流注册中心对比 1.3 Nacos特性 2. 安装启动 支持外部 MySQL 3. 配置管理 3.1 ...

  10. Prettier-Code Formater代码格式化插件使用教程

    目录 Prettier-Code Formater代码格式化插件使用教程 插件的安装 插件的使用 方式一: 配置VScode代码格式化后, 结合VScode快捷键使用 方式二: CLI中使用命令行的方 ...