`
laoli5290
  • 浏览: 81296 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

在servlet中如何使用被Spring管理的service

阅读更多

    我的使用场景是SpringMvc+MyBatis,我总结了以下两种方式,三种方法。两种方式指的是采用注入方式和获取spring管理的bean。三种方法指的是,代理注入、硬编码获取bean和实现ApplicationContextAware接口获取bean。

    第一种方式:采用注入方式。

    编写一个代理类,代码如下:

@SuppressWarnings("serial")
public class ProxyServlet extends HttpServlet {

	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {
		proxyServlet.service(req, res);
	}

	@Override
	public void init() throws ServletException {
		this.targetBean = getServletName();
		getServletBean();
		proxyServlet.init(getServletConfig());
	}

	private String targetBean;
	
	private Servlet proxyServlet;
	
	private void getServletBean(){
		WebApplicationContext wac = WebApplicationContextUtils
				.getRequiredWebApplicationContext(getServletContext());
		this.proxyServlet = (Servlet) wac.getBean(targetBean);
	}
}

    然后编写需要注入service的servlet,代码如下:

 

 

 

@Component
public class MemcacheServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Autowired
	private GlobalCacheService globalCacheService;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MemcacheServlet() {
        super();
        
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String flag = request.getParameter("flag");
		globalCacheService.test();
		if("q".equals(flag)){
			//取缓存
			String name = (String)globalCacheService.getCacheValue("_name1", Object.class);
			System.out.println("执行取缓存操作: " + name);
		}else if("f".equals(flag)){
			//放缓存
			String username = request.getParameter("username");
			globalCacheService.deleteCacheValue("_name1");
			if(!StringUtil.isBlank(username)){
				System.out.println("执行存缓存操作: " + username);
				globalCacheService.setCacheValue("_name1", username, 28800);
			}else{
				System.out.println("执行存缓存操作: " + username);
				globalCacheService.setCacheValue("_name1", "lzx", 28800);
			}
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		this.doGet(request, response);
	}

}

    最后在web.xml中配置如下:

<servlet>
	<servlet-name>memcacheServlet</servlet-name>
    <servlet-class>com.hsis.core.servlet.web.ProxyServlet</servlet-class>
  </servlet>
<servlet-mapping>
	<servlet-name>memcacheServlet</servlet-name>
	<url-pattern>*.to</url-pattern>
  </servlet-mapping>

    第二种方式获取spring管理的service,采用硬编码或者实现AplicationContextAware接口。

      2.1 采用硬编码方法如下:

     

ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
或者
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(servletContext);
LzxService lzxService = (LzxService)wac.getBean("lzxService");

    注:WebApplicationContext继承的ApplicationContext。

      2.2 采用实现AplicationContextAware接口方法,首先创建一个类SpringContextUtil,代码如下:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringContextUtil implements ApplicationContextAware {
	
	private static ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		applicationContext = applicationContext;
	}
	
	public static ApplicationContext getApplicationContext(){
		return applicationContext;
	}
	
	public static Object getBean(String name){
		return applicationContext.getBean(name);
	}
	
	public static <T> T getBean(String name, Class<T>  requiredClass){
		return applicationContext.getBean(name, requiredClass);
	}

}

 applicationContext.xml中配置一下:

 

 

 

<bean class=”SpringContextUtil” />

 

     在servlet中使用即可:

globalCacheService = (GlobalCacheService) SpringContextUtil.getBean("globalCacheService", GlobalCacheService.class);

     注:实现Aware接口的类,初始化之后可以获取对应的资源,实现ApplicationContextAware接口的bean,初始化后被注入applicationContext实例。

      如果使用ClassPathXmlApplicationContextFileSystemClassPathXmlApplicationContextFileSystemXmlApplicationContext等对象去加载Spring配置文件,会生成一个新的application对象,这样会产生冗余。

3
2
分享到:
评论

相关推荐

    servlet+hibernate+spring实现添删改查

    【标题】"servlet+hibernate+spring实现添删改查"是一个常见的Web开发教程主题,它涵盖了Java后端开发中的三个核心框架:Servlet、Hibernate和Spring。这个主题主要针对初学者,旨在帮助他们理解如何整合这三个技术...

    Servlet,JSP和Spring MVC 初学指南源码

    在这个名为“budi-kurniawan-servlet-jsp-springmvc-examples-4754f4ab5d5c”的压缩包中,可能包含了各种示例代码,涵盖了Servlet、JSP和Spring MVC的基本用法和组合应用。例如: 1. Servlet示例:展示了如何创建和...

    jsp servlet struts hibernate spring

    【标题】: "Java Web开发中的JSP、Servlet、Struts、Hibernate和Spring技术详解" 【描述】: "本文深入探讨Java Web开发中常见的技术,包括JSP、Servlet、Struts、Hibernate和Spring,讲解它们的工作原理和实用技巧...

    spring管理servlet的利器--SimpleServletHandlerAdapter

    在Spring框架中,Servlet的管理是一项重要的任务,它涉及到Web应用的请求处理和业务逻辑的集成。`SimpleServletHandlerAdapter`是Spring MVC中一个关键组件,它为非Spring MVC注解驱动的Servlet提供了一种简单的方式...

    原生Servlet与Spring Controller性能比较--Servlet项目

    在Java Web开发中,Servlet和Spring MVC(主要通过Controller)是两种常见的请求处理机制。本文将深入探讨原生Servlet与Spring Controller在性能方面的差异,并基于一个名为"AbTest"的Servlet项目源码进行分析。 ...

    JSP 开发之servlet中调用注入spring管理的dao

    具体到我们的场景,如果DAO对象被Spring管理,而Servlet不在Spring容器中,那么我们就需要在Servlet初始化的时候从Spring容器中获取DAO对象。 具体操作步骤如下: 1. 在Servlet中定义一个私有成员变量作为DAO对象...

    在Java的Servlet中使用Spring JdbcTemplate-Eclipse版

    本资源是一个完整的通过Servlet-Service-Dao-JdbcTemplate访问MySQL数据库的JavaWeb Project,可以直接导入到Eclipse中进行调试运行,注意默认编译器是JDK1.8。

    Servlet使用MVC模式(Dao\Service\Servlet)增删查改

    在这个名为"Servlet使用MVC模式(Dao\Service\Servlet)增删查改"的小程序中,我们将深入探讨如何利用这些组件来实现对MySQL数据库的操作。 **模型(Model)** 模型层是应用程序的核心,负责处理业务逻辑和数据访问...

    使用jsp-servlet-service-dao四层结构完成用户信息的增删改查操作

    这通常在Servlet中实现,通过检查当前登录用户的权限,只有管理员才能执行删除操作。 在`web5`这个压缩包文件中,可能包含了项目的所有源代码、配置文件、静态资源(如CSS、JavaScript和图片)等。开发者需要解压并...

    飞思J2EE源代码(Servlet+Struts+Spring+Hibernate)

    在本项目中,Spring可能被用来管理Bean的生命周期,实现事务控制,并协调Struts和Hibernate的集成。理解Spring,你需要熟悉Bean的配置、Spring的AOP以及Spring MVC,它是Spring为Web应用提供的MVC实现。 Hibernate...

    sftp直接以url模式读取-----------包括servlet如何借用springproperties取文件

    总之,这个主题涉及了Java中使用SFTP协议读取远程文件的技术,以及如何结合SpringProperties和Servlet来管理和访问这些配置。了解和掌握这些知识点,对于开发需要处理远程文件系统的Java应用是至关重要的。

    在Java的Servlet中使用Spring JdbcTemplate-MyEclipse版.rar

    本资源是一个完整的通过Servlet-Service-Dao-JdbcTemplate访问MySQL数据库的JavaWeb Project,可以直接导入到MyEclipse中进行调试运行,注意默认编译器是JDK1.6。

    servlet实现学生信息管理系统源码

    在本项目中,"servlet实现学生信息管理系统源码"是一个使用Java编程语言开发的Web应用程序,主要目标是实现对学生信息的高效管理。这个系统基于Servlet技术,它是一种用于构建动态Web应用的标准Java API,提供了...

    Spring+Servlet读取数据库返回JSON数据(源码).zip

    在Java Web开发中,Spring框架和Servlet技术是两个核心组件,它们经常被用来构建高效、可扩展的Web应用程序。Spring框架提供了丰富的功能,包括依赖注入、面向切面编程、MVC(模型-视图-控制器)架构等,而Servlet则...

    spring+spring mvc+mybatis框架整合实现超市货物管理系统

    在本文中,我们将深入探讨如何使用JavaEE技术栈,特别是Spring、Spring MVC和MyBatis框架,来构建一个超市货物管理系统的实现。这个系统涵盖了基本的登录功能以及与MySQL数据库的交互,包括增删改查操作和分页显示。...

    基于Spring+MyBatis+Servlet整合的人员信息管理系统.zip

    在人员信息管理系统的实现过程中,Spring负责业务逻辑的组织和控制,MyBatis处理与数据库的交互,而Servlet则作为两者之间的桥梁,接收前端请求并调用后端服务。例如,当用户提交新增人员信息的请求时,Servlet接收...

    java定时任务代码-spring管理.txt

    根据提供的部分代码示例,可以看出项目中使用了Spring框架进行初始化。Spring框架的初始化过程主要包括以下几个步骤: 1. **Servlet配置**:在`web.xml`文件中配置一个名为`ServiceDispatcher`的Servlet,该Servlet...

    Spring Web Service 实战篇(1)

    《Spring Web Service实战篇(1)》主要涵盖了在Java环境中使用Spring框架构建Web服务的相关技术。本实战篇将深入探讨Spring Web Service的核心概念、架构设计以及实现步骤,旨在帮助开发者熟练掌握这一强大的工具。 ...

    基于Servlet+Spring+Mybatis的客户关系管理系统.zip

    《基于Servlet+Spring+Mybatis的客户关系管理系统》 在当今的企业运营中,客户关系管理(Customer Relationship Management,简称CRM)系统是至关重要的工具,它帮助企业有效地管理与客户的交互,提高销售效率,...

Global site tag (gtag.js) - Google Analytics