Можно ли добавить отображение сервлета во время выполнения?либо с помощью 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.