JSP ページのセットがあり、.jsp 拡張子を非表示にしたいと考えています (少し調べたところ、SEO に適しているようです)。
私が遭遇した1つの解決策は次のとおりです。
<servlet>
<servlet-name>mypage</servlet-name>
<jsp-file>/some-page.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>mypage</servlet-name>
<url-pattern>/some-page</url-pattern>
</servlet-mapping>
これは機能しますが、サイトのすべての jsp ページに対してこのマッピングを設定する必要があると思います。
ここに投稿された別のソリューションに出くわしました(簡単なURLです):JSP /サーブレットの隠し機能
...単純なサーブレットを使用してリクエストを転送します。私の web.xml には次のものがあり、正常に動作します。
<servlet>
<servlet-name>MyServletName</servlet-name>
<servlet-class>myservlets.PrettyUrlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletName</servlet-name>
<url-pattern>/myservlet/*</url-pattern>
</servlet-mapping>
問題は、次の URL にアクセスしたくないことです: www.mydomain.com/myservlet/some-page
URL を使用したい: www.mydomain.com/some-page
そこで、url-pattern を「/*」に変更しました
<servlet>
<servlet-name>MyServletName</servlet-name>
<servlet-class>myservlets.PrettyUrlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletName</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
しかし、これは無限ループを引き起こします:
Exception in thread "http-bio-8080-exec-1" java.lang.StackOverflowError
at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:219)
at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
.
.
at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at myservlets.PrettyUrlServlet.doGet(PrettyUrlServlet.java:22)
修正方法がわかりません。何か案は?