- 浏览: 496424 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
Springmvc中在controller注入request会有线程安全问题吗
1.通过@Autowire注入的HttpServletRequest只是一个“空壳”,真正的对象是在被访问到的时候才会从线程中取得的。
2.注入的request对象 是HttpServletRequest类的一个实例, 重复多次http请求,发现这个对象的id始终不变
3.但当我们获取设置里面的值时,会通过一个拦截器SpringExtUtil获取得到当前线程关联的 ”ServletRequestAttributes“对象,而获取到的。
4.所以这个是不会因为不同请求改变里面的值面引起线程安全问题的。
5.可以理解为每个请求的HttpServletRequest都是一个与线程关联的实例化。
参考原文:https://my.oschina.net/sluggarddd/blog/678603?fromerr=XhvpvVTi
参考原文:http://www.th7.cn/Program/java/201503/420240.shtml
我们观察request.getParameter(xxx)执行时的,线程堆栈情况,如下,在执行getParameter(xxx) 首先碰到了一个拦截器SpringExtUtil$ProxiedInterceptor, 这里拦截器通过com.alibaba.citrus.service.requestcontext.impl.RequestContextBeanFactoryPostProcessor$RequestProxyTargetFactory.getObject()获取到真正的request对象。
public String other(Locale locale, Principal principal)
java.util.Locale:得到当前请求的本地化信息,默认等价于ServletRequest.getLocale(),如果配置LocaleResolver解析器则由它决定Locale,后续介绍;
java.security.Principal:该主体对象包含了验证通过的用户信息,等价于HttpServletRequest.getUserPrincipal()。
这些都是spring MVC实现的,自定义的参数要使用request的get参数方法才能得到
http://jinnianshilongnian.iteye.com/blog/1698916
@Controller public class AController{ @Autowire HttpServletRequest request; @RequestMapping("/test") public Result test(){ System.out.println(request.toString()); request.getHeader("uid"); } }
1.通过@Autowire注入的HttpServletRequest只是一个“空壳”,真正的对象是在被访问到的时候才会从线程中取得的。
2.注入的request对象 是HttpServletRequest类的一个实例, 重复多次http请求,发现这个对象的id始终不变
3.但当我们获取设置里面的值时,会通过一个拦截器SpringExtUtil获取得到当前线程关联的 ”ServletRequestAttributes“对象,而获取到的。
4.所以这个是不会因为不同请求改变里面的值面引起线程安全问题的。
5.可以理解为每个请求的HttpServletRequest都是一个与线程关联的实例化。
参考原文:https://my.oschina.net/sluggarddd/blog/678603?fromerr=XhvpvVTi
参考原文:http://www.th7.cn/Program/java/201503/420240.shtml
我们观察request.getParameter(xxx)执行时的,线程堆栈情况,如下,在执行getParameter(xxx) 首先碰到了一个拦截器SpringExtUtil$ProxiedInterceptor, 这里拦截器通过com.alibaba.citrus.service.requestcontext.impl.RequestContextBeanFactoryPostProcessor$RequestProxyTargetFactory.getObject()获取到真正的request对象。
public String other(Locale locale, Principal principal)
java.util.Locale:得到当前请求的本地化信息,默认等价于ServletRequest.getLocale(),如果配置LocaleResolver解析器则由它决定Locale,后续介绍;
java.security.Principal:该主体对象包含了验证通过的用户信息,等价于HttpServletRequest.getUserPrincipal()。
这些都是spring MVC实现的,自定义的参数要使用request的get参数方法才能得到
http://jinnianshilongnian.iteye.com/blog/1698916
发表评论
-
选举算法
2022-06-17 08:48 428选举算法 常用的选举 ... -
elasticSearch使用
2022-04-27 08:42 417ElasticSearch 基于Apache Lucene构建 ... -
IDEA 快捷键
2022-03-02 16:55 245大小写转换快捷键 ctr+shift+u IDEA ... -
zookeeper dubbo 安装
2021-12-04 19:27 315docker-machine ssh default d ... -
将博客搬至CSDN
2021-11-18 19:57 190将博客搬至CSDN -
docker mysql 主从安装
2021-11-10 16:55 235docker run -d -p 13306:3306 --n ... -
rocketmq安装部署.txt
2021-11-07 19:10 218docker search rocketmq docke ... -
百度人脸识别
2021-05-21 16:11 363package com.gaojinsoft.htwy.y20 ... -
springBoot tomcat配置参数说明
2021-05-12 09:13 3020#最大连接数 server.tomcat.max-connec ... -
技术选型
2021-01-29 17:34 2941.移动端组件vux,vant,vant好点,文档好的,基于v ... -
方便开发调试和问题跟踪
2021-01-01 10:17 2481.外网最好可以连接数据库 2.关键信息可以在接口返回信息, ... -
log4j2应用
2020-07-23 14:16 363https://blog.csdn.net/giventian ... -
文件上传下载
2020-07-06 13:16 4211.文件ID,名字(源,目标),大小,路径(/aa/bb/s. ... -
Jenkins脚本
2020-03-12 17:55 444#!/bin/bash -ilx echo "开始 ... -
base64与file 相互转换
2019-10-23 18:19 775base64与file 相互转换 import org. ... -
钉钉开发
2019-09-17 20:16 433钉钉开发 开发者帐号 1357047443 x***310* ... -
spring MVC 下载文件
2019-07-18 16:36 487@RequestMapping (value="/d ... -
安卓模拟器使用
2019-07-03 23:13 4逍遥pc版的安卓模拟器 http://www.xyaz.cn/ ... -
ZLTest
2019-03-19 23:41 265ZLTest -
要同步回来的文件
2019-01-25 11:14 0Spring Boot中整合Sharding-JDBC m ...
相关推荐
然而,直接在Controller的成员变量上使用`@Autowired`注入HttpServletRequest可能会引发一些问题,尤其是在考虑线程安全和并发处理时。 首先,Spring MVC中的Controller默认是单例模式的,这意味着在整个应用生命...
- **解决方案**:为了避免线程安全问题,通常的做法是在 Controller 中避免使用实例变量,转而使用局部变量或依赖注入的方式来处理数据。此外,还可以通过 @Scope("prototype") 来改变 Controller 的作用域,使其...
SpringMVC的控制器默认是单例模式,因此在多线程环境下可能存在线程安全问题。为避免这个问题,控制器不应包含可变状态,即避免在控制器中定义实例变量。如果必须存储数据,可以使用Session或者ThreadLocal,但需...
- 直接在方法参数中声明 `HttpServletRequest request` 或 `HttpSession session`,SpringMVC 会自动注入。 10. **接收参数**: - 形参直接声明参数名,SpringMVC 会自动匹配请求参数。 11. **接收对象参数**: ...
【SpringMVC面试专题1】 1. **SpringMVC是什么?...以上内容涵盖了SpringMVC的基本概念、优点、工作流程、控制器的单例模式问题、与Struts2的对比,以及请求映射等关键知识点,这些是面试中可能会遇到的问题。
SpringMvc的控制器是单例模式的,因此在多线程访问的时候会有线程安全问题,可以通过不在控制器里面写字段来解决。 SpringMvc和Struts2的区别是:SpringMvc的入口是一个servlet,即前端控制器,而Struts2入口是一...
- SpringMVC 控制器默认是单例模式,多线程环境下需注意线程安全问题。 - 可以通过 @RequestMapping 注解进行请求映射,配合 method 属性限制请求类型。 - 参数获取直接通过形参声明,SpringMVC 会自动注入 Request...
可以直接在方法参数中声明`HttpServletRequest request`和`HttpSession session`,SpringMVC会自动注入这些对象。 SpringMVC的这些核心概念和机制,使得开发者能更专注于业务逻辑,而不是繁琐的Web层实现,从而...
- 直接在方法参数中声明 `HttpServletRequest request` 和 `HttpSession session`,SpringMvc 会自动注入。 12. **处理请求参数**: - 可以通过在方法参数上添加 `@RequestParam` 注解来获取请求参数。 13. **...
在企业级应用开发中,有时我们需要连接到多个不同的数据库,比如主库和从库,或者针对不同业务使用不同的数据存储。在这种情况下,Spring MVC框架提供了一种灵活的方式来处理多数据源的连接。本文将深入探讨如何在...
- 直接在方法参数中声明`HttpServletRequest request`和`HttpSession session`,Spring MVC会自动注入。 以上就是关于Spring MVC的一些关键知识点,包括它的架构、工作原理、优缺点以及与其他框架的对比。理解这些...
requestAttributesHolder用于存储不可继承的RequestAttributes,而inheritableRequestAttributesHolder则用于存储可继承的RequestAttributes,这样可以在子线程中访问父线程的请求信息。 RequestContextHolder提供...
在IT行业中,SpringMVC是Spring框架的一部分,用于构建企业级Web应用程序,它提供了一种模型-视图-控制器(MVC)架构模式,帮助开发者更有效地管理前端和后端的交互。动态数据源切换是一种高级特性,允许应用在运行...
8. **异步处理**:Spring MVC 4.0引入了异步处理能力,允许控制器方法返回DeferredResult或Callable,这样服务器可以在执行耗时操作时释放线程,提高系统并发能力。 9. **数据绑定与验证**:通过@Valid注解和...