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

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

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

    athrunwang

    紀(jì)元
    數(shù)據(jù)加載中……
    Spring容器啟動(dòng)后自動(dòng)執(zhí)行Servlet進(jìn)行預(yù)處理

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

    找到的解決辦法如下:

    1、自定義一個(gè)用于代理啟動(dòng)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、編寫啟動(dòng)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啟動(dòng)完成后執(zhí)行初始化操作
     * 類型表述:預(yù)讀某些實(shí)體的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容器啟動(dòng)后執(zhí)行自定義的Servlet,并且在自定義Servlet中可以使用Spring Annotation的自動(dòng)注入功能。 <script></script>

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


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲日韩精品一区二区三区无码| 亚洲国产综合精品中文字幕| 免费不卡视频一卡二卡| 男男AV纯肉无码免费播放无码| 亚洲成年人啊啊aa在线观看| 亚洲国产美女福利直播秀一区二区| 一级毛片免费播放男男| 日本人的色道免费网站| 亚洲人成网站18禁止一区| 精品特级一级毛片免费观看| 在线观看免费中文视频| 亚洲综合色在线观看亚洲| 亚洲无码一区二区三区| 最近2019年免费中文字幕高清| 337p日本欧洲亚洲大胆色噜噜| jizz免费一区二区三区| 青青青国产免费一夜七次郎| 婷婷精品国产亚洲AV麻豆不片| 亚洲AV成人精品日韩一区 | 亚洲区视频在线观看| 美女无遮挡拍拍拍免费视频| 女人18毛片水最多免费观看| 亚洲精品高清久久| 99久久免费国产特黄| 亚洲综合亚洲综合网成人| 久久99精品视免费看| 精品国产_亚洲人成在线高清| 免费人成网站永久| 四虎影视免费永久在线观看| 国产精品亚洲自在线播放页码| 久99久精品免费视频热77| 亚洲一区二区三区久久| 中文字幕免费在线观看| 亚洲精品乱码久久久久久V| 亚洲第一成年免费网站| wwwxxx亚洲| 亚洲福利中文字幕在线网址| 一区二区在线免费观看| 久久亚洲中文字幕无码| 亚洲AV无码一区二区二三区软件 | 亚洲AV无码精品蜜桃|