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

获取request对象:

首先配置web.xml文件-->

[html] view plaincopy

  1. <listener>
  2. <listener-class>
  3. org.springframework.web.context.request.RequestContextListener
  4. </listener-class>
  5. </listener>

然后在程序中获取:

代码:

[java] view plaincopy

  1. HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

在Controller中获取biz很简单,注解配置都行,一般用注解,@Autowired就搞定了,可是有时在普通java类中想获取到biz很麻烦,所以可以用下面的方式加载。

在普通类中加载biz,用SpringApplicationContext.getBean(xx.class);

代码:

[java] view plaincopy

  1. 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容器结合的更加密切。  
三、作用域依赖问题

如果将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>

原文地址:https://www.cnblogs.com/Jeely/p/10811949.html

时间: 2024-11-08 12:24:01

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

在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

在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

springMVC中得到request对象,session对象

RequestAttributes ra = RequestContextHolder.getRequestAttributes(); HttpServletRequest request = ((ServletRequestAttributes)ra).getRequest(); request.getSession().setAttribute("sessionMessage", "im'sessionMessage!"); 也可以让所有的Control继承一个

WebService中获取request对象一例

@WebService @Service public class WeiXinWebServiceImpl implements IWeiXinWebService { @Resource private WebServiceContext webServiceContext; public String getLoginUser() { HttpServletRequest request = (HttpServletRequest) webServiceContext.getMessage

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

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

as3中xml文件的加载和读取

---恢复内容开始--- as代码如下: xml如下: 总结: 用URLReuqest对象加载xml的url 创建一个URLLoader对象,将1中的URLRequest指定给他 给URLLoader添加COMPLETE的Event侦听 complete回调函数中,读取urlloader对象的data为xml xml.二级标签[index] //获取标签的innerhtml xml.二级标签[index][email protected]属性名 //获取属性值

Android新浪微博客户端(七)——ListView中的图片异步加载、缓存

原文出自:方杰|http://fangjie.sinaapp.com/?p=193转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54该项目代码已经放到github:https://github.com/JayFang1993/SinaWeibo 一.ListView的图片异步加载 我们都知道对每一个Weibo Item都有用户头像,而且每一条微博还可能带有图片.如果在加载列表的同时加载图片,这样有几个缺点,第一很费事,界面卡住,用户体验很不

【iOS和HTML 5交互】iOS中加载html5调用html方法和修改html5内容

近期项目开发中用到了这方面的技术了,那我们一起来看看. 1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作HTML5中的标签(CRUD-->增删改查) 1.用类选择器或者id选择器或者标签选择器等选择要进行操作的标签 2.把选择好的标签转换成字符串 3.webView调用stringByEvaluatingJavaScriptFromString方法