2017-10-12 10 views
0

私はプログラムで設定されたjettyサーバーを持っています。私は9.3.7から9.4.7にアップグレードしましたが、スペースを含むコンテキストパスはもはや機能しません。Jetty 9.4 ServletContextHandler.setContextPathの動作またはリクエストデータの変更

したがって、servicePath = "/ Foo/Bar One Two"と要求には%20の置換スペースがあります。私のログには、要求 "を示しています。" // localhostをGET:8180 /フー/バーを%20One%20Two/foobarにHTTP/1.1" を

私のサーバーは、唯一の違いは、コンテキスト・パスという2つの同一のサーブレットがあり

。だから今org.eclipse.jetty.serverを要求

ServletHolder holder = new ServletHolder(...); 
ServletContextHandler handler = new ServletContextHandler(); 
handler.setContextPath(servicePath); 
handler.setVirtualHosts(connectors); 
handler.addServlet(holder, "/*"); 
contextHandlers.addHandler(handler); 

:?。コンテキストパスを指定する私のコードがどのように見えるか変更されたことがリソースパスがサーブレットに提示された方法で可能性があり

.Requestには以前にないときにエンコードされたURL情報があります。

  1. 要求元のURL(originalURI)は、org.eclipse.jetty.server.Requestが完全にエンコードされていることが保証されていますか?
  2. 明らかに、ServletContextHandler.setContextPath()は、エンコードされていないパスを受け入れます。それは両方を受け入れますか?

おかげ

+0

request.getContextPath()がエンコードされたパスを返すように見えます。これは保証されていますか? –

答えて

0

私は桟橋9.4はrequest.getContextPath()が応答する方法を変更することを決定しました。これで、コード化されたパスが返されます。

メモ実験では、ServletContextHandler.setContextPath()がエンコードされていないパスを受け入れることを示しています。

関連する問題