获取request对象:
首先配置web.xml文件-->
- <listener>
- <listener-class>
- org.springframework.web.context.request.RequestContextListener
- </listener-class>
- </listener>
然后在程序中获取:
代码:
- HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
在Controller中获取biz很简单,注解配置都行,一般用注解,@Autowired就搞定了,可是有时在普通java类中想获取到biz很麻烦,所以可以用下面的方式加载。
在普通类中加载biz,用SpringApplicationContext.getBean(xx.class);
代码:
- IKeyCodeBiz keyCodeBiz = SpringApplicationContext.getBean(IKeyCodeBiz.class);
版本二
利用Spring随时随地获得Request和Session
一、准备工作:
在web.xml中添加
<listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener>
二、使用方法:
1、方法一:通过代码实现
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
2、方法二:通过注解实现:
@Autowired private HttpServletRequest request;
三、关于RequestContextListener的背景知识:
基于LocalThread将HTTP request对象绑定到为该请求提供服务的线程上。这使得具有request和session作用域的bean能够在后面的调用链中被访问到。
Request作用域
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>
针对每次HTTP请求,Spring容器会根据loginAction bean定义创建一个全新的LoginAction bean实例,且该loginAction bean实例仅在当前HTTP request内有效,因此可以根据需要放心的更改所建实例的内部状态,而其他请求中根据loginAction bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。当处理请求结束,request作用域的bean实例将被销毁。
Session作用域
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
针对某个HTTP Session,Spring容器会根据userPreferences bean定义创建一个全新的userPreferences bean实例,且该userPreferences bean仅在当前HTTP Session内有效。与request作用域一样,你可以根据需要放心的更改所创建实例的内部状态,而别的HTTP Session中根据userPreferences创建的实例,将不会看到这些特定于某个HTTP Session的状态变化。当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。
global session作用域
<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。
请注意,假如你在编写一个标准的基于Servlet的web应用,并且定义了一个或多个具有global session作用域的bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误
二、为什么需要额外的配置RequestContextFilter
也许会有一个疑问,已经通过ContextLoaderListener(或ContextLoaderServlet)将Web容器与Spring容器整合,为什么这里还要用额外的RequestContextListener以支持Bean的另外3个作用域,原因是ContextLoaderListener实现ServletContextListener监听器接口,而ServletContextListener只负责监听Web容器的启动和关闭的事件。RequestContextFilter实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,Web服务器接收的每次请求都会通知该监听器。通过配置RequestContextFilter,Spring容器与Web容器结合的更加密切。
三、作用域依赖问题
Request作用域
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>
针对每次HTTP请求,Spring容器会根据loginAction bean定义创建一个全新的LoginAction bean实例,且该loginAction bean实例仅在当前HTTP request内有效,因此可以根据需要放心的更改所建实例的内部状态,而其他请求中根据loginAction bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。当处理请求结束,request作用域的bean实例将被销毁。
Session作用域
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
针对某个HTTP Session,Spring容器会根据userPreferences bean定义创建一个全新的userPreferences bean实例,且该userPreferences bean仅在当前HTTP Session内有效。与request作用域一样,你可以根据需要放心的更改所创建实例的内部状态,而别的HTTP Session中根据userPreferences创建的实例,将不会看到这些特定于某个HTTP Session的状态变化。当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。
global session作用域
<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。
请注意,假如你在编写一个标准的基于Servlet的web应用,并且定义了一个或多个具有global session作用域的bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误
二、为什么需要额外的配置RequestContextFilter
也许会有一个疑问,已经通过ContextLoaderListener(或ContextLoaderServlet)将Web容器与Spring容器整合,为什么这里还要用额外的RequestContextListener以支持Bean的另外3个作用域,原因是ContextLoaderListener实现ServletContextListener监听器接口,而ServletContextListener只负责监听Web容器的启动和关闭的事件。RequestContextFilter实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,Web服务器接收的每次请求都会通知该监听器。通过配置RequestContextFilter,Spring容器与Web容器结合的更加密切。
三、作用域依赖问题
如果将Web相关作用域的Bean注入到singleton或prototype的Bean中,这种情况下,需要Spring AOP
<bean name="car" class="com.demo.Car" scope="request">
<aop:scoped-proxy/>
</bean>
<bean id="boss" class="com.demo.Boss" >
<properrty name="car" ref="car" />
</bean>
相关推荐
在 SpringMVC 中获取 Request 对象 在 SpringMVC 框架中,获取 Request 对象是一个非常重要的操作。很多时候,我们需要在 Controller 中获取 Request 对象以便实现某些功能,例如身份验证、Cookie 操作等。那么,在...
本文将详细讲解四种不同的方法来接收并处理多个对象,以满足后端控制器从前端表单获取多名乘客信息的需求。 1. **表单提交,以字段数组接收** 这是最基础的方法,通过在HTML表单中定义相同名称的输入字段,但通过...
在SpringMVC框架中,开发人员经常需要处理对象实例的传递和返回,这涉及到模型绑定、数据转换和服务层之间的交互。本示例将探讨如何在SpringMVC中有效地完成这一任务,并结合zTree这一前端组件展示如何进行数据交互...
总结一下,"springmvc框架已做service注入"是指在 Spring MVC 项目中,Controller 类通过 Spring 的依赖注入机制,自动获得了 Service 类的实例,从而实现了业务逻辑和控制逻辑的分离。这一设计遵循了面向对象设计...
在这个例子中,`createUser` 方法使用 `@RequestBody` 从请求体中获取JSON数据并转换为 `CreateUserRequest` 对象。而 `getUser` 方法返回一个 `User` 对象,通过 `@ResponseBody` 将其转换为JSON并返回给客户端。 ...
在Spring MVC框架中,RequestContextHolder是一个非常实用的工具类,它允许我们在Service层以及其它非Controller层获取到当前HTTP请求的相关信息,如HttpServletRequest对象、HttpServletResponse对象等。...
以下是关于在Spring MVC中获取`PathVariable`的值的详细方法: ### 一、URL模板与`@PathVariable` 在URL模板中,大括号 `{}` 用于定义变量,例如 `/del/{id}`。这里的 `{id}` 是一个变量,它会在请求匹配到该路径...
java SpringMVC获取URLjava SpringMVC获取URLjava SpringMVC获取URLjava SpringMVC获取URL
6. **返回响应**:最后,从Controller方法中返回ModelAndView,SpringMVC会自动检测到视图名"empty",并以XML格式返回`xml`对象的内容。 在实际应用中,你可能还需要考虑一些其他因素,例如错误处理、性能优化、...
当浏览器访问`http://localhost:8080/yourApp/hello`时,SpringMVC会调用`HelloController`中的`hello()`方法,并显示对应的视图。 以上就是SpringMVC的基本配置,通过控制层、业务逻辑层和持久层的分离,我们可以...
ajax post 上传图片springmvc获取并保存base64编码的图片的方法
通过重写dispatcherservlet的一个doservice方法把springmvc的url对应方法打印出来。 所需要做的是: 1,使用本文件作为原先springmvc的xml文件的dispatcherservlet。 2,启动项目,随意发送一个请求,可以在控制台...
SpringMVC+Mybatis整合及dao、service强封装:一、SPringMVC与Mybatis框架整合,其中SpringMVC主要采用注解方式实现,Mybatis采用xml为主,对数据库开发、测试、部署环境进行分离配置;二、在封装上针对Mybatis进行...
在SpringMVC和ExtJS4的结合中,SpringMVC可能负责处理后端数据的获取和更新,而ExtJS4则负责在前端呈现这些数据为可交互的树形视图。 **实现步骤** 1. **配置SpringMVC**:首先,需要在SpringMVC的配置文件中定义...
在SpringMVC框架中,处理数据的传递和...通过上述步骤,你可以在SpringMVC应用中顺利地处理对象实例的传递和返回,并结合zTree展示层级数据。这在构建Web应用时非常有用,特别是在处理表单提交、展示树状结构数据时。
解决 SpringMVC 中的中文乱码问题可以通过多种方法来实现,包括在 web.xml 文件中配置字符编码、使用注解配置字符编码、使用 CharacterEncodingFilter 或者自定义 Filter 等。这些方法都可以有效地解决中文乱码问题...
控制器可以通过`ModelAndView`对象或者直接在`@RequestMapping`方法中返回逻辑视图名来指定JSP页面。 例如,一个简单的控制器可能是这样的: ```java @Controller public class HelloWorldController { @...
### SpringMVC中文教程知识点概览 #### 一、SpringMVC简介 SpringMVC是Spring框架的一个模块,专门用于简化Web应用程序...希望本文档能为读者提供足够的基础知识和实践经验,以便能够在实际项目中成功应用SpringMVC。
在实际项目中,我们还可以使用`@PathVariable`捕获URL路径中的动态参数,`@RequestParam`获取请求参数,`@RequestBody`读取请求体中的JSON或XML数据,以及`@ResponseBody`将方法返回值直接写入响应体。 另外,`@...