のバージョン2.4を使用していて、サーバーの起動時に呼び出されるメソッドServlet
を取得する必要があるContextPath
ため、呼び出すことができるRequestオブジェクトがなく、サーブレットバージョンにもメソッドがありません。init()
getContextPath()
getContextPath()
ServletContext
どういうわけかこれを取得する方法はありContextPath()
ますか?
のバージョン2.4を使用していて、サーバーの起動時に呼び出されるメソッドServlet
を取得する必要があるContextPath
ため、呼び出すことができるRequestオブジェクトがなく、サーブレットバージョンにもメソッドがありません。init()
getContextPath()
getContextPath()
ServletContext
どういうわけかこれを取得する方法はありContextPath()
ますか?
1 つの Web アプリケーションを複数の異なるコンテキスト パスで公開できるため、コンテキスト パス (単数形) は特定の要求のコンテキストでのみ意味を持ちます。サーブレット 2.5 が に追加さgetContextPath()
れServletContext
、この Web アプリケーションの「プライマリ」コンテキスト パスを返すように指定されましたが、以前の仕様バージョンではこの情報にアクセスするコンテナに依存しない方法はありません。
特定のコンテナーで機能するトリックがある場合があります。たとえば、Tomcat では、このServletContext.getResource()
メソッドは、フォームのカスタム スキームで URL を返しますjndi://hostname/context/...
。したがって、使用できる場合があります
ctx.getResource("/").getPath()
Tomcat のコンテキスト パスを取得します (または、存在しないファイルを要求した場合に返されるように指定されているようにgetResource("/WEB-INF/web.xml")
、テールを削除することもできます)。さまざまなコンテナーを試して、それらで機能する同様のトリックを見つける必要があります。getResource()
null
この投稿で説明されているように、サーブレット 2.5 からのみ可能なようです: ServletContext getContextPath()
サーブレット 2.4 では、オブジェクト ServeltContext にメソッド getContextPath がありません。
2 つのオプションを提案できます。
コンテキスト パスをサーブレットのパラメーターとして設定します。
<servlet
>
<servlet-name>initServlet</servlet-name>
<servlet-class>net.cirrus-it.InitServlet`</servlet-class>
<init-param>
<param-name>contextPath</param-name>
<param-value>/myApp</param-value>
</init-param>
</servlet
>
メソッド getRealPath() からコンテキスト パスを特定してみてください。
ドキュメントによると:
指定された仮想パスの実際のパスを含む文字列を返します。たとえば、パス "/index.html" は、"http://host/contextPath/index.html" の要求によって処理されるサーバーのファイル システム上の絶対ファイル パスを返します。ここで、contextPathはこの ServletContextのコンテキスト パスです。 .
このコードを試してください:
class demo extends HttpServlet {
public void init(ServletConfig config) {
String path = config.getServletContext().getRealPath("/");
}
}
それはうまくいくはずです