Отключить обработку расширений JSP

У меня есть веб-приложение JavaEE 1.4, работающее на WebSphere Application Server 6.0. В web.xml есть сервлет, настроенный на перехват всех запросов к серверу:

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

Это работает нормально, пока я не попытаюсь запросить что-то, заканчивающееся на *.jsp. В этом случае сервер пытается найти JSP с таким именем и завершается с ошибкой:

java.io.FileNotFoundException: JSPG0036E: Failed to find resource /cfvct/search_criteria.jsp
    at com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor.findWrapper(JSPExtensionProcessor.java:279)
    at com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor.handleRequest(JSPExtensionProcessor.java:261)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3226)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:253)
    at com.ibm.ws.webcontainer.VirtualHost.handleRequest(VirtualHost.java:229)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1970)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:120)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:434)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:373)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:253)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminaters(NewConnectionInitialReadCallback.java:207)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:109)
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:566)
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:619)
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:952)
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1039)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1475)

Мне нужно, чтобы этот запрос обрабатывался сервлетом, но, похоже, сервер использует некоторые JSPExtensionProcessor для обработки всех путей, заканчивающихся на .jsp. Есть ли способ изменить это поведение?


person Das    schedule 15.11.2008    source источник


Ответы (1)


Да, вам нужно сопоставить ваш сервлет с *.jsp, чтобы получить поддержку *.jsp, перенаправленную на ваш сервлет.

<servlet-mapping>
        <servlet-name>name</servlet-name>
        <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

Однако обычно иметь прямой доступ к jsps — плохая идея. Размещение их в WEB-INF в каком-либо каталоге, а затем сопоставление соответствующего URL-адреса (.do, .action и т. д.) с сервлетом, который затем выполняет внутреннее перенаправление на этот JSP, является лучшей практикой.

Таким образом, вместо того, чтобы набирать thisUrl.jsp, пользователь набирал thisUrl.do или thisUrl.action, после чего сервлет перенаправлял его на thisUrl.jsp.

person MetroidFan2002    schedule 15.11.2008