Servlet Mapping: возможно ли добавлять сервлетные отображения во время выполнения? - PullRequest
4 голосов
/ 19 октября 2011

Можно ли добавить отображение сервлета во время выполнения?либо с помощью ContextListener, либо с помощью метода init() сервлета?

В приложении, которое я использую, все запросы обрабатываются с помощью одного сервлета, и их сопоставления определены в web.xml файл.Количество сопоставлений увеличивается, и для добавления нового сопоставления требуется новый выпуск.

Отображение сервлета на /* не будет работать, поскольку запросы, отправляемые на JSP , и статический контент также будут перенаправляться на этот сервлет.

Использование фильтра может бытьТем не менее, эта опция добавит требование к фильтру, чтобы знать, какой путь к префиксу к RequestDispatcher.

Например:

Отображение сервлетов диспетчера

<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/action/*</url-pattern>
</servlet-mapping>

Определение фильтра маршрутизации

<filter>
    <filter-name>RoutingFilter</filter-name>
    <filter-class>com.ssv.web.filter.RoutingFilter</filter-class>
    <init-param>
        <param-name>exclude</param-name>
        <param-value>/static/**:/action/**:/**/*.jsp</param-value>
    </init-param>
    <init-param>
        <param-name>dispatcher-prefix</param-name>
        <param-value>/action/**</param-value>
    </init-param>
</filter>

В приведенном выше примере я хотел бы пропустить создание фильтра, отображение фильтра и отображение сервлета и вместо этого динамически определять отображения в ContextListener.

Я использую Tomcat.

Ответы [ 2 ]

2 голосов
/ 19 октября 2011

В сервлете 3.0 (tomcat 7) это возможно: ServletContext.addServlet(..)

Но в вашем случае может быть разумнее этого не делать.Например, Spring DispatcherServlet сопоставлен с /*.Он пересылается внутри JSP и обрабатывает запросы в своих собственных не сервлетных компонентах, поэтому ему не нужно регистрировать их динамически.Взгляните на spring-mvc в любом случае, даже если вы его не используете.

0 голосов
/ 06 июня 2018

Чтобы динамически добавить свой собственный сервлет, вам нужен объект servletcontext. Из документации API существует метод для привязки вашего сервлета к servletContext.

  Servletconfig.getServletContext().addServlet("YourServletname",yourServletname.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...