请求--拦截器--action经过

引用
我这里想知道的是同名的多个参数,会被自动的放置在List或者数组中,我想知道是怎么实现的,因为取一个参数和取多个同名的参数是不同的方法:
一个是request.getParameter
一个是request.getParameterValues

先解释一下:

Struts或则XWorlk提供的Interceptor,操作的是已经被封装好的Parameters的Map了。相信你应该看到过这句话。(在CheckboxInterceptor中有)

Java代码 收藏代码
Map parameters = ai.getInvocationContext().getParameters();

关于你的问题:

如果你说的是,同名的多个参数如何以List或者数组的方式,放在Parameter的Map中。

这个应该是属于Servlet规范中的内容。在HTTP协议的Request传递到ServletContainer中后,Container就会为该次请求生成一个HTTPServletRequest对象,在HTTPServletRequest对象中,参数和值,放入到了Map中。

在Tomcat的实现代码中,可以看到,同名的参数的值,被加入的String数组中。单个的参数,也是放在数组中的。
Java代码 收藏代码

/**
* Put name and value pair in map. When name already exist, add value
* to array of values.
*
* @param map The map to populate
* @param name The parameter name
* @param value The parameter value
*/
private static void putMapEntry( Map map, String name, String value) {
String[] newValues = null;
String[] oldValues = (String[]) map.get(name);
if (oldValues == null) {
newValues = new String[1];
newValues[0] = value;
} else {
newValues = new String[oldValues.length + 1];
System.arraycopy(oldValues, 0, newValues, 0, oldValues.length);
newValues[oldValues.length] = value;
}
map.put(name, newValues);
}

引用
因为取一个参数和取多个同名的参数是不同的方法:
一个是request.getParameter
一个是request.getParameterValues

都可以使用request.getParameterValues的方法,通过循环来得到值、或者赋值。

如果你说的是,同名的多个参数如何以List或者数组的方式,放在Action中。

那就需要看Struts的OGNL实现的源码,Interceptor只是将值转移到ValueStatck上,而后由ONGL进行赋值的。

总结:你在Interceptor中是看不到你期望的判断语句的。因为,封装的判断语句在Servlet的容器中实现;解封装的语句,在struts2的OGNL中实现。Interceptor只是对其中值,稍微做些处理

时间: 2024-12-17 14:33:14

请求--拦截器--action经过的相关文章

细说vue axios登录请求拦截器

当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cnpm install --save axios 我们可以建一个js文件来做这个统一的处理,新建一个axios.js,如下 import axios from 'axios' import { Indicator } from 'mint-ui'; import { Toast } from 'min

Vue添加请求拦截器

一.现象 统一处理错误及配置请求信息 二.解决 1.安装 axios  , 命令: npm install axios --save-dev 2.在根目录的config目录下新建文件 axios.js  ,内容如下: import axios from 'axios' // 配置默认的host,假如你的API host是:http://api.htmlx.clubaxios.defaults.baseURL = 'http://api.htmlx.club' // 添加请求拦截器axios.in

vue 路由拦截器和请求拦截器

vue 拦截器 路由拦截器 已路由为导向 router.beforeEach((to,from,next)=>{ if(to.path=='/login' || localStorage.getItem('token')){ next(); }else{ alert('请重新登录'); next('/login'); } }) 请求拦截器 当发送请求时才会触发此功能 axios.interceptors.request.use(function (config) { let token = wi

vue配置请求拦截器和响应拦截器

首先确保我们已经设置的store.js进行值的存取,这时候我们需要配置请求和响应的拦截器设置 main.js import Vue from 'vue' import App from './App' import router from './router' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import axios from 'axios' // 引入store i

vue axios请求/响应拦截器

// main.js中配置 // 引入 axios import Axios from 'axios' // 这时候如果在其它的组件中,是无法使用 axios 命令的. // 但如果将 axios 改写为 Vue 的原型属性,就能解决这个问题 Vue.prototype.$axios = Axios // 引用mint-ui import MintUI from 'mint-ui' import 'mint-ui/lib/style.css' Vue.use(MintUI) // 一次性注册多个

Vue+Axios:使用拦截器来取消多次重复的请求

-----写在前面----- 家园的面试项目接近尾声了,剩下一个大模块(响应式布局)和两个小功能(下拉到一定程度获取新的信息.持续监听返回数据,当有更新时在页面上方提示) 听起来下拉到某个位置获取新信息是不难,但今天就遇到了两个问题: 1. 下拉过程中会不断发起url相同的请求,可能会有被拉黑的风险,并且影响实际性能.最重要的,在then()方法中会将返回数据稍做处理后添加进组件数据,并且会驱动Vue更新DOM, 因为用的v-for来填充数据,这样同一条数据就会被渲染两次 2.ReadHub除了

Struts2(十四)拦截器实现权限管理

一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截Action请求 在访问的Action执行之前和执行之后执行代码实现某项功能 Struts2: 大部分功能是在拦截器中实现的如:接收输入的参数,数据验证,文件上传,国际化等 应用程序: 需要在Action执行的前后执行特定功能 Action执行时间统计,Action访问权限管理 Action添加功能

strut2 模拟拦截器

需求:用户登录的情况下可以访问action的方法,用户没有登录时不允许访问action中的方法并提示'你没有权限访问". 设计思路:建立一个jsp页面,当请求该页面时,设置用户为登录状态.若没有先请求该jsp页面而去访问action中的方法则不允许. 实现: 建立一个user.jsp页面,设置用户为登录状态: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&

struts自定义拦截器--登录权限控制

说明:该自定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.总体的步骤: (1).定义拦截器类.LoginInterceptor(完成登录拦截) 方式1:实现com.opensymphony.xwork2.interceptor.Interceptor接口并覆写方法. 方式2:继承com.opensymphony.xwork2.interceptor.AbstractIntercep