<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    athrunwang

    紀元
    數據加載中……
    Spring容器啟動后自動執行Servlet進行預處理

    通常做法是定義一個Servlet,并在web.xml中配置Servlet的啟動順序<load-on-startup>的值在DispatcherServlet之后。但這樣做的缺點是在Servlet中無法使用Spring的依賴注入功能,只能使用WebApplicationContext的getBean()方法獲取bean。

    找到的解決辦法如下:

    1、自定義一個用于代理啟動Servlet的類DelegatingServletProxy:

    package com.test.common.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;
    public class DelegatingServletProxy extends GenericServlet {
    private String targetBean;
    private Servlet proxy;
    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
    throws ServletException, IOException {
    proxy.service(arg0, arg1);
    }
    @Override
    public void init() throws ServletException {
    this.targetBean = getServletName();
    getServletBean();
    proxy.init(getServletConfig());
    }
    private void getServletBean() {
    WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
    this.proxy = (Servlet)wac.getBean(targetBean);
    }
    }

    2、編寫啟動Servlet:

    package com.test.common.util;
    import java.io.IOException;
    import java.util.List;
    import javax.annotation.Resource;
    import javax.servlet.ServletConfig;
    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 cn.edu.swu.oa.agency.model.Department;
    import cn.edu.swu.oa.agency.model.Group;
    import cn.edu.swu.oa.agency.service.DepService;
    import cn.edu.swu.oa.agency.service.GroService;
    import cn.edu.swu.oa.common.model.SysCode;
    import cn.edu.swu.oa.safe.model.User;
    import cn.edu.swu.oa.safe.service.UserService;
    /**
     * 
     *
     * 類型解釋:Spring啟動完成后執行初始化操作
     * 類型表述:預讀某些實體的Key-Value,放入map,方便以后使用
     * @author 
     * @version 
     *
     */
    @Component("initialServlet")
    public class InitialServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Resource
    private UserService userService;
    @Resource
    private DepService depService;
           
    @Resource
    private GroService groService;
        /**
         * @see HttpServlet#HttpServlet()
         */
        public InitialServlet() {
            super();
        }
    /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    }
    @Override
    public void init(ServletConfig config) throws ServletException {
    //初始化eserMap
    List<User> users = userService.getUsers();
    for(int i = 0; i < users.size(); i++) {
    User user = users.get(i);
    Integer userId = user.getUserId();
    String userName = user.getUserName();
    SysCode.userMap.put(userId, userName);
    }
    //初始化depMap
    List<Department> deps = depService.getAllDeps();
    for(int i = 0; i < deps.size(); i++) {
    Department dep = deps.get(i);
    Integer depId = dep.getDepId();
    String depName = dep.getDepName();
    SysCode.depMap.put(depId, depName);
    }
    //初始化groMap
    List<Group> gros = groService.getAllGroups();
    for(int i = 0; i < gros.size(); i++) {
    Group gro = gros.get(i);
    Integer groId = gro.getGroId();
    String groName = gro.getGroName();
    SysCode.groMap.put(groId, groName);
    }
    }
    }

     3、在web.xml文件中配置InitialServlet :

    <servlet>


        <description></description>
        <display-name>InitialServlet</display-name>
        <servlet-name>initialServlet</servlet-name>
        <servlet-class>
                com.test.common.util.DelegatingServletProxy 
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>initialServlet</servlet-name>
        <url-pattern>/InitialServlet</url-pattern>
    </servlet-mapping>
     完成這些操作后,就可以在Spring容器啟動后執行自定義的Servlet,并且在自定義Servlet中可以使用Spring Annotation的自動注入功能。 <script></script>

    posted on 2013-09-13 13:26 AthrunWang 閱讀(713) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲综合精品一二三区在线| 亚洲中文字幕无码不卡电影| 亚洲人成免费网站| 最近2019中文字幕免费大全5 | 亚洲精品免费在线观看| 成人免费av一区二区三区| 日韩亚洲变态另类中文| 成年女人A毛片免费视频| 久久夜色精品国产亚洲| 国产精品无码一二区免费| av无码免费一区二区三区| 亚洲国产精品无码久久SM| 国产精品免费观看调教网| 亚洲福利一区二区精品秒拍| 嘿嘿嘿视频免费网站在线观看| 亚洲精品视频免费在线观看| 欧美大尺寸SUV免费| 久久亚洲中文字幕无码| 久久亚洲国产精品123区| 久久精品无码精品免费专区| 亚洲国产精品综合久久久| 免费高清在线爱做视频| 日韩免费高清一级毛片| 精品亚洲成α人无码成α在线观看 | 美女黄色免费网站| 亚洲欧洲日产国码无码网站| 18禁黄网站禁片免费观看不卡| 亚洲AV成人噜噜无码网站| 日韩一级免费视频| 中文字幕在线免费看| 67pao强力打造67194在线午夜亚洲| 99久久这里只精品国产免费| 激情婷婷成人亚洲综合| 亚洲av中文无码乱人伦在线咪咕 | 一级黄色免费网站| 久久精品亚洲精品国产色婷 | 国产综合免费精品久久久| 亚洲免费闲人蜜桃| 亚洲一区视频在线播放| 97在线观看永久免费视频| yellow视频免费看|