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. debian 9 调节亮度

    CONTROL_BRIGHTNESS=1 BATT_BRIGHTNESS_COMMAND="echo 13" LM_AC_BRIGHTNESS_COMMAND="echo ...

  2. ThinkPHP5修改验证码的配置参数

    当前使用的ThinkPHP的版本是5.0.24. 在模版试图中调用验证码生成函数:{:captcha_img()},或者<img src="{:captcha_src()}" ...

  3. c# checkedListBox设置多列横向显示 经验总结

    1. 设置checkedListBox的MultiColumn 属性为true; 2. 调整checkedListBox的宽度,调整ColumnWidth的宽度

  4. SpringBoot: 后台接口文档 - 基于Swagger3

    目录 前言:什么是Swagger 起步:(只需简单的3步) 加载依赖 添加注解@EnableOpenApi 启动SpringBoot,访问Swagger后台界面 配置:基于Java的配置 注解:Swa ...

  5. PHP 后台数组数据 传输给前台JS 使用

    一. PHP: $a = array('aaa','bbb'); $a= json_encode($a); JS: var a_json = {$a};   //此处a_json数组便可使用 二. H ...

  6. jquery.autocomplete 使用解析

    页面引用 <script type="text/javascript" src="${base}/autocom/jquery-1.8.2.min.js" ...

  7. 大数据学习(02)——HDFS入门

    Hadoop模块 提到大数据,Hadoop是一个绕不开的话题,我们来看看Hadoop本身包含哪些模块. Common是基础模块,这个是必须用的.剩下常用的就是HDFS和YARN. MapReduce现 ...

  8. 软件安装管理(RPM)

    目录 一.linux应用程序 1.1 应用程序与系统命令关系 1.2 典型应用程序的目录结构 1.3 常见的软件包封装工具 二.RPM软件包管理工具 2.1RPM软件包管理器Red-Hat Packa ...

  9. Go interface 原理剖析--类型转换

    hi, 大家好,我是 haohognfan. 可能你看过的 interface 剖析的文章比较多了,这些文章基本都是从汇编角度分析类型转换或者动态转发.不过随着 Go 版本升级,对应的 Go 汇编也发 ...

  10. TestNG注释@BeforeGroups与@AfterGroups不执行的处理

    在学习TestNG框架注解时发现在执行以下的代码 package com.groups; import org.testng.annotations.AfterGroups; import org.t ...