При отображении сервлета вам нужно отдельно указать каждую JSP следующим образом:
<servlet>
<servlet-name>search</servlet-name>
<jsp-file>/search.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>search</servlet-name>
<url-pattern>/search</url-pattern>
</servlet-mapping>
Проще, если все эти JSP находятся на общем пути. Например. /app/*
.
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>com.example.FriendlyURLServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
с
request.getRequestDispatcher("/WEB-INF" + request.getPathInfo() + ".jsp").forward(request, response);
Предполагается, что JSP находятся в папке /WEB-INF
, поэтому их нельзя запросить напрямую. Это покажет /WEB-INF/search.jsp
на http://example.com/app/search.
В качестве альтернативы вы можете использовать Tuckey's URLRewriteFilter
. Это очень похоже на Apache HTTPD mod_rewrite
.