用Spring将Service注入到Servlet中
来源:互联网 发布:js自动获取input光标 编辑:程序博客网 时间:2024/05/21 14:03
转载请注明出处: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;
- @Override
- public 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;
- @Component
- public class LaunchActivityQueryServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- //注入IPbaActivityInfoCurrentDAO
- @Resource
- private 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>
大功告成!
0 0
- 用Spring将Service注入到Servlet中
- 如何用Spring将Service注入到Servlet中
- 如何用Spring将Service注入到Servlet中(注解模式)
- 如何用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 )
- 如何用Spring将Service注入到ServletContextListener中
- Servlet中使用Spring注入Service层
- Spring中,将request和response由servlet传入service
- spring 如何将spring中的dao、service等注入到普通的Java类
- Spring容器启动后注入service到Servlet并自动执行
- CXF:将spring bean 注入到 jaxws:endpoin中去
- Spring boot将配置属性注入到bean类中
- Spring boot将配置属性注入到bean类中
- servlet中利用spring的注解@Autowired自动注入service失败,优雅的解决方法
- 在servlet注入service
- 使用spring向servlet中注入
- Servlet中注入Spring的bean
- iOS 字符串小写转大写
- sqlplus导入dmp数据库文件
- lua和V8 JavaScript初学中,,,,(二)
- javascript 解析json的代码
- tomcat部署web项目的3中方法
- 用Spring将Service注入到Servlet中
- hdu1420
- [LeetCode] Word Search
- CBitmap转换成GDI+的Bitmap (Image)
- PAAS平台对比:OpenShift VS CloudFoundry【51CTO调研报告】
- iOS-UI-tabelView
- 如何在eclipse中导入两个相同的工程
- 转载_蓝牙协议栈架构
- jQuery只网站品牌列表的效果