Spring Mvc 在非controller层 实现获取request对象

一般我们在Controller层,会编写类似这样的方法


  @Controller
  @RequestMapping(value="/detail")

  public class GetURIDetailController {

    @SystemControllerLog(description = "id")
    @RequestMapping(value="/{id}",method={RequestMethod.GET})
    public ModelAndView getDetailID(
    @PathVariable("id")
    Integer id   ,HttpServletRequest request){
        ModelAndView modelAndView = new ModelAndView();    //someting request对象方法的调用
        modelAndView.addObject("id",id);
        modelAndView.setViewName("detail");
        return modelAndView;
    }
}

本质上Controller就是一个spring 组件,所以在我的请求方法 getDetailID中,可以添加一个HttpServletRequest获得当前请求的request对象,

request对象中包含了 用户ID session 以及等等信息

-------------------------------------------------------------

假设我们要编写一个AOP拦截Controller实现我们的切点事务时候,这个时候

RequestContextHolder这个静态类就派上用处了,
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();  



private static final ThreadLocal<RequestAttributes> requestAttributesHolder =
  new NamedThreadLocal<RequestAttributes>("Request attributes");//NamedThreadLocal 线程本地


public static RequestAttributes getRequestAttributes() {
        RequestAttributes attributes = requestAttributesHolder.get();//获得线程本地request对象
        if (attributes == null) {
            attributes = inheritableRequestAttributesHolder.get();//
        }
        return attributes;
    }
我阅读了一下Spring的源代码,它获得的是当前请求的request对象

先上班,晚上补上,
时间: 2024-12-16 19:06:44

Spring Mvc 在非controller层 实现获取request对象的相关文章

Spring基础系列14 -- Spring MVC 请求参数的几种获取方法

Spring MVC 请求参数的几种获取方法 转载:http://www.cnblogs.com/leiOOlei/p/3658147.html 一.      通过@PathVariabl获取路径中的参数 @RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET) public String printMessage1(@PathVariable String id,@PathVariable String n

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点的 json 报文 问题 问题描述起来比较拗口,其实就是用Spring MVC时,如何将对象映射成 json 报文时不把对象作为json的根节点.即使用@ResponseBody的效果. 比如,默认情况下,使用ModelAndView的addObject(key,object)或者ModelMap的addAttribute(key,object)保存完Java对象,然后交给Srping的视图解析器解析成json时,

Springmvc获取request对象&amp;线程安全

概述:在使用Springmvc开发web系统时,经常要用到request对象来处理请求,比如获取客户端IP地址.请求的url.header中的属性(cookie.授权信息等).body中的数据等.由于Springmvc中的Controller.Service等都是单例的,因此就需要关注request对象是否是线程安全的:当有大量并发请求时,能否保证不同请求/线程中使用不同的request对象.(本文对request的讨论,同样适用于response对象.InputStream/Reader.Ou

springmvc中获取request对象,加载biz(service)的方法

获取request对象: 首先配置web.xml文件--> [html] view plaincopy <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> 然后在程序中获取: 代码: [java] view plaincopy HttpServletRequest 

在SpringMVC中获取request对象的几种方式

1.最简单的方式(注解法) 1 2 @Autowired private  HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> b.之后在程序里可以用 Http

java webservice服务器端获取request对象的三种方式

有的时候在webservice里我们需要获取request对象和response对象,比如想要获得客户端的访问ip的时候就需要这么做,下面说三种方式,当然三种方式可能是针对不同方式部署webservice获取request对象的方法. 第一种:先配置注入: @Resource private WebServiceContext webServiceContext; 其次是下面的代码: MessageContext mc = webServiceContext.getMessageContext(

在SpringMVC中获取request对象

1.注解法 Java代码   @Autowired private  HttpServletRequest request; 2. 在web.xml中配置一个监听 Xml代码   <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> 之后在程序里可以用 Java代码   H

如何在SpringMVC中获取request对象

1.注解法 @Autowired private HttpServletRequest request; 2. 在web.xml中配置一个监听 HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); 3.直接在参数中引入 public String hello(HttpServletRequest request,HttpS

spring-mvc 非 controller 层获取HttpServletRequest

在项目中记录操作日志,是一种很常见的需求. 有时我们在service或者dao层记录日志,需要同时保存访问ip.登录用户名等.如果从controller层把HttpServletRequest 对象传过去会显得很麻烦.HttpSession可以通过HttpServletRequest 间接获取. 在web.xml配置 <listener>   <listener-class>org.springframework.web.context.request.RequestContext