由struts2中配置使用servlet引发的思考和复习
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引发的思考和复习的更多相关文章
- 在Struts2中配置Action
在Struts2中配置Action <package>: 1.定义Action使用<package>标签下的<action>标签完成,一个<package&g ...
- 详解struts2中配置action的方法
如何解决action太多的问题??我们因为需要不同的方法,所以往往建立很多不同的类,但是每个类中往往仅仅几行代码,不仅浪费了时间,而且配置起来也很繁琐,所以,建立一个共有的类,然后根据以下方式来操作, ...
- 在struts2中配置自定义拦截器放行多个方法
源码: 自定义的拦截器类: //自定义拦截器类:LoginInterceptor ; package com.java.action.interceptor; import javax.servlet ...
- Struts2中配置默认Action
1.当访问的Action不存在时,页面会显示错误信息,可以通过配置默认Action处理用户异常的操作:2.配置方法: 在struts.xml文件中的<package>下添加如下内容: ...
- 在springBoot中配置web.xml中配置的servlet
第一种 web.xml (截取的需要转换的) 当拦截到 /socke t时执行该servlet <servlet> <servlet-name>websocket</se ...
- struts2中配置全局日期类型转换器
1.编写一个类,继承StrutsTypeConverter,实现其中的convertFromString和convertToString方法,该类如下: package me.edu.utils; i ...
- 由项目中一个hash2int函数引发的思考
hash2int /** * 计算一个字符串的md5折算成int返回 * @param type $str * @return type */ function hash2int($str) { $m ...
- Java中由常量类引发的思考
我们都知道,定义一个常量类是十分简单的.首先差固件一个类,然后类中声明一些public修饰的静态常量.没错就这么简单: 写好之后,在其他地方使用的时候,直接类名.属性名就可以使用了. 而LZ现在想的是 ...
- 有 va_arg宏 中数组下标-1 引发的思考 - C 语言中内存模型
va_arg宏,是头文件 stdarg.h 中定义的,获取可变参数的当前参数. #define va_arg(list, mode) ((mode*)(list+=sizeof(mode)))[-1] ...
随机推荐
- 一个很多人不知道的SpringBoot小技能!!
大家好,我是冰河~~ 最近,发现很多小伙伴在修改了SpringBoot的配置文件后,都要重新编译整个项目,极大的浪费了开发时间.我身边就有很多小伙伴一直是这样做的.那么,有没有什么方式能够修改配置文件 ...
- ES6 模版字符串及常用的es6扩展方法
1.ES6 模版字符串es6 模版字符串主要用于简化字符串的拼接 <script type="text/javascript"> let obj={name:'rdb' ...
- shell脚本(5)-shell变量
一.变量介绍 将一些数据需要临时存放在内存中,以待后续使用时快速读出. 二.变量分类 1.本地变量: 用户私有变量,只有本用户可以使用,保存在家目录下的.bash_profile..bashrc文件中 ...
- 微信小程序云开发-云存储的应用-云相册
一.准备工作 1.创建数据库表images 2.设置数据库表images的权限 二.创建图片列表页 创建图片列表页imageList,用于展示图片列表.该页面具有跳转到图片上传页面.图片列表展示.删除 ...
- mysql实现主从复制、读写分离的配置方法(一)
1. 测试环境 两个CentOS7虚拟机 mysql 5.5-MariaDB master_ip:192.168.1.109 slave_ip:192.168.1.118 2. 配置主服务器 2.1 ...
- 测试龙芯 LoongArch .NET之 使用 FastTunnel 做内网穿透远程计算机
龙芯3A5000 已经上市,与龙芯3A5000配套的三大编译器GCC.LLVM.GoLang和三大虚拟机Java.JavaScript..NET均已完成开发,从老伙计哪里搞来一台3A5000 机器,安 ...
- P5350 序列
P5350 序列 题意 维护一个序列,支持区间求和.赋值.加值.复制.交换.翻转操作,其中交换和复制操作保证两段区间长度相等且不交.答案对 \(1e9+7\) 取模. 思路 对于区间求和.赋值.加值. ...
- 【codeforces1058】Vasya and Golden Ticket 枚举+暴力+模拟
#点击传送 题目描述 Recently Vasya found a golden ticket - a sequence which consists of nn digits a1a2-ana1a2 ...
- SSM框架中mapper层,增删改查,如何实现
1.批量修改 <!-- 批量修改 MySQL--> <update id="updateBatch" parameterType="java.lang. ...
- jenkens安装教程
war包安装方式(linux和windows下) 具体参见:https://www.cnblogs.com/UncleYong/p/10742867.html