即使在指定" loadonstartup" WebServlet注释中的元素,Tomcat不会选择servlet

时间:2015-02-25 21:54:53

标签: java tomcat java-ee servlets annotations

我有一个连接到数据库的Servlet,并将数据加载并存储到一些集合对象中,以便以后在我的webapp启动时使用。我在部署描述符中定义了这个servlet。

的web.xml

<servlet>
    <servlet-name>MasterDataLoader</servlet-name>
    <servlet-class>com.istore.web.controllers.MasterDataLoader</servlet-class>
    <load-on-startup>10</load-on-startup>
</servlet>

我试图用我的Servlet中的注释替换上面的用法,因此修改了我的MasterDataLoader servlet如下并删除了web.xml条目但是这个servlet由于某种原因永远不会被Tomcat 8选中,因此数据永远不会被加载服务器启动。我没有在错误日志中看到任何错误。我错过了什么吗?

MasterDataLoader.java(带注释)

@WebServlet(name = "MasterDataLoader", loadOnStartup=10)
public class MasterDataLoader extends HttpServlet {

    private static final String DATASOURCE = "dataSource";

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        loadAll();
    }

    private void loadAll() {
        ServletContext appContext = getServletContext();
        appContext.setAttribute("menuCategories", getAllMenuCategories());
    }

    private List<Category> getAllMenuCategories() {
        LOG.debug("Fetching all menu categories from the db....");
        List<Category> categoriesLst = null;
        try {
            DataSource dataSource = (DataSource) getServletContext().getAttribute(DATASOURCE);
            categoriesLst = new MasterDao(dataSource).getAllCategories();
        } catch (SQLException sqle) {
            LOG.error("Exception while fetching all menu categories from the db....");
            LOG.error(sqle);
        }
        return categoriesLst;
    }

 ....
}

1 个答案:

答案 0 :(得分:0)

在注释中添加urlPatterns并且它有效。虽然urlPatterns未在代码库中的任何地方被引用/调用。看起来urlPatterns是强制属性。

@WebServlet(name = "MasterDataLoader", urlPatterns = {"/dataLoader"}, loadOnStartup = 10)