如何用Spring将Service注入到Servlet中
来源:互联网 发布:软件开发网校 编辑:程序博客网 时间:2024/06/05 09:46
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45696707
解决方法有两种(推荐使用第二种)
方法一:
直接重写Servlet的Init()方法,代码如下:
public void init(ServletConfig servletConfig) throws ServletException {ServletContext servletContext = servletConfig.getServletContext();WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);AutowireCapableBeanFactory autowireCapableBeanFactory = webApplicationContext.getAutowireCapableBeanFactory();autowireCapableBeanFactory.configureBean(this, BEAN_NAME);}
这里的BEAN_NAME即为我们需要注入到Spring容器中的服务,但这并不是一个好的方法,因为我们需要在每一个Servlet中都进行这样的操作。
方法二:
我们可以写一个类似于“org.springframework.web.struts.DelegatingRequestProcessor”的委托的Bean,然后通过配置的方法把我们的服务注入到servlet中,具体方法如下,
Step 1:编写委托类DelegatingServletProxy
package com.telek.pba.base.util; import java.io.IOException; import javax.servlet.GenericServlet;import javax.servlet.Servlet;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse; import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils; /** * 以下是类似org.springframework.web.struts.DelegatingRequestProcessor的一个委托 * 用于通过配置的方法,在Servlet中注入Service * @author liyinwei * */public class DelegatingServletProxy extends GenericServlet{ /** * */private static final long serialVersionUID = 1L;private String targetBean;private Servlet proxy; @Overridepublic void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {proxy.service(req, res);} /** * 初始化 */public void init() throws ServletException {this.targetBean = getServletName();getServletBean();proxy.init(getServletConfig());} /** * 获取Bean */private void getServletBean() {WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());this.proxy = (Servlet) wac.getBean(targetBean);} }
Step 2:修改Web.xml配置
在纯Servlet模式下,我们的配置方式如下
<servlet> <description>活动发起模块活动查询分页Servlet</description> <display-name>launchActivityQueryServlet</display> <servlet-name>LaunchActivityQueryServlet</servlet-name> <servlet-class>com.telek.pba.launch.servlet.LaunchActivityQueryServlet</servlet-class><servlet> <servlet-mapping> <servlet-name>LaunchActivityQueryServlet</servlet-name> <url-pattern>/servlet/launch/LaunchActivityQueryServlet</url-pattern></servlet-mapping></servlet>
如果采用我们这种代理的方法,则配置应该修改为:
<servlet> <description>活动发起模块活动查询分页Servlet</description> <display-name>launchActivityQueryServlet</display> <servlet-name>launchActivityQueryServlet</servlet-name> <servlet-class>com.telek.pba.base.util.DelegatingServletProxy</servlet-class><servlet> <servlet-mapping> <servlet-name>launchActivityQueryServlet</servlet-name> <url-pattern>/servlet/launch/LaunchActivityQueryServlet</url-pattern></servlet-mapping></servlet>
注意:默认情况下,Servlet的配置中,LaunchActivityQuery的首字母一般为大写,而我们的标题中已注明,我们采用Spring的注解模式,如果是自动扫描注解的话,默认情况下,注解的value值为首字母小写,即:launchActivityQuery,因此,在我们新的配置中,要注意将首字母改为小写,否则会报无法找到Bean的错误。
Step 3:至此,我们就可以像SSH的注入方式一样,注入Servlet了,以下是个小示例:
package com.telek.pba.launch.servlet; import java.io.IOException; import javax.annotation.Resource;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component; import com.telek.pba.base.model.PbaUserInfo;import com.telek.pba.launch.dao.IPbaActivityInfoCurrentDAO; @Componentpublic class LaunchActivityQueryServlet extends HttpServlet { private static final long serialVersionUID = 1L; //注入IPbaActivityInfoCurrentDAO@Resourceprivate IPbaActivityInfoCurrentDAO pbaActivityInfoCurrentDAO; /** * Constructor of the object. */public LaunchActivityQueryServlet() {super();} /** * Destruction of the servlet. <br /> */public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here} /** * The doGet method of the servlet. <br /> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//sth to do} /** * The doPost method of the servlet. <br /> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//sth to do} /** * Initialization of the servlet. <br /> * * @throws ServletException if an error occurs */public void init() throws ServletException {// Put your code here} }
最后,请留心在Spring配置文件中,配置上自动扫描包的路径:
<context:component -scan base-package="com.telek.pba.*.dao.impl, com.telek.pba.*.service.impl, com.telek.pba.*.servlet"></context:component>
大功告成!
2 2
- 如何用Spring将Service注入到Servlet中
- 如何用Spring将Service注入到Servlet中(注解模式)
- 如何用Spring将Service注入到Servlet中(注解模式)
- 如何用Spring将Service注入到ServletContextListener中
- 用Spring将Service注入到Servlet中
- 如何使用spring将service层注入到servlet中去(how to use Spring to inject ur service layer into the servlet )
- 如何使用spring将service层注入到servlet中去(how to use Spring to inject ur service layer into the servlet )
- Servlet中使用Spring注入Service层
- 如何用vb将计算结果输出到word中?
- 如何用JUnit4测试spring service
- Spring中,将request和response由servlet传入service
- 如何用Pl*SQL将Excel中数据导入到oracle中
- 如何用Pl*SQL将Excel中数据导入到oracle中
- spring 如何将spring中的dao、service等注入到普通的Java类
- Spring容器启动后注入service到Servlet并自动执行
- CXF:将spring bean 注入到 jaxws:endpoin中去
- Spring boot将配置属性注入到bean类中
- Spring boot将配置属性注入到bean类中
- 子div块中设置margin-top时影响父div块位置的解决办法及其原因
- C++ Primer 读书笔记 – 第五章
- 使用startservice实现一个简单的音乐播放器
- 在xcode中修改整个项目名
- 《剑指Offer》学习笔记--面试题39:二叉树的深度
- 如何用Spring将Service注入到Servlet中
- 在LibreOffice 中启用录制宏的功能
- 修改ORACLE的字段顺序
- grant connect,resource to user
- POJ 1664 放苹果【DFS/递归】
- GitHub和SourceTree入门教程
- 计算机书籍系列-----------书目
- C++ Primer 读书笔记 – 第六章
- 图片轮播