ServletContainerInitializer не вызывается, когда он является частью большого веб-приложения - PullRequest
0 голосов
/ 13 февраля 2020

Моя цель - зарегистрировать сервлет для обслуживания заданного URL-адреса в стороннем веб-приложении. Он разработан и управляется другой командой, поэтому я не могу получить доступ к их сети. xml. Кроме того, они установили metadata-complete = "true" в своей сети. xml, поэтому я даже не могу разработать веб-фрагмент. Поэтому я прибег к написанию ServletContainerInitializer, где я регистрирую один из моих собственных сервлетов.

Я создал проект eclipse с двумя классами, один для реализации ServletContainerInitializer, а другой - Servlet, и выполнил шаги, в значительной степени соответствующие Веб-спецификация JEE (версия сервлета 3.0). Моя реализация похожа на эту статью.

Я успешно протестировал вызов сервлета, создав еще одно простое веб-приложение всего с несколькими JSP и запросив URL, привязанный к моему сервлету. Для этого я удалил банку, созданную из вышеупомянутого проекта, в каталог WEB-INF / lib веб-проекта. Я даже мог видеть сообщение +++++ ServletContainerInitializer с именем +++++ , которое я установил как System.out.println, когда сервер запускается.

Однако, когда я опускаю jar в собственное стороннее веб-приложение (в WEB-INF / lib), в котором есть множество других jar, JSP, классов сервлетов и т. Д. c. (поскольку это большое приложение), мой ServletContainerInitializer не вызывается, а мой сервлет недоступен.

Для обоих вышеупомянутых случаев контейнером является тот же Tomcat 8.5, а версия сервлета - 3.0.

Будут оценены любые предложения, подсказки или указатели на то, что идет не так.

// My class implementing ServletContainerInitializer    
    @Override
    public void onStartup (Set<Class<?>> pageClasses, ServletContext ctx)throws ServletException {          
        System.out.println("+++++   ServletContainerInitializer called     +++++");     
        ServletRegistration.Dynamic servletRegistration = ctx.addServlet("Controller", Controller.class);
        servletRegistration.addMapping("/welcome/*");
        servletRegistration.setLoadOnStartup(0);
    }
// My Servlet class 
    public class Controller extends HttpServlet {       
        private static final long serialVersionUID = 1L;
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            resp.setContentType("text/html");
            resp.getWriter().write("<h2>Hello from Servlet</h2>");
        }  
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...