7

のバージョン2.4を使用していて、サーバーの起動時に呼び出されるメソッドServletを取得する必要があるContextPathため、呼び出すことができるRequestオブジェクトがなく、サーブレットバージョンにもメソッドがありません。init()getContextPath()getContextPath()ServletContext

どういうわけかこれを取得する方法はありContextPath()ますか?

4

4 に答える 4

2

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

于 2012-12-14T13:58:58.757 に答える
1

この投稿で説明されているように、サーブレット 2.5 からのみ可能なようです: ServletContext getContextPath()

于 2012-12-14T13:51:37.427 に答える
1

サーブレット 2.4 では、オブジェクト ServeltContext にメソッド getContextPath がありません。

2 つのオプションを提案できます。

  1. コンテキスト パスをサーブレットのパラメーターとして設定します。

    <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>

  2. メソッド getRealPath() からコンテキスト パスを特定してみてください。

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String )

ドキュメントによると:

指定された仮想パスの実際のパスを含む文字列を返します。たとえば、パス "/index.html" は、"http://host/contextPath/index.html" の要求によって処理されるサーバーのファイル システム上の絶対ファイル パスを返します。ここで、contextPathはこの ServletContextのコンテキスト パスです。 .

于 2012-12-14T13:58:38.993 に答える
-2

このコードを試してください:

class demo extends HttpServlet {
       public void init(ServletConfig config) {
             String path = config.getServletContext().getRealPath("/");
       }
}

それはうまくいくはずです

于 2012-12-14T13:50:51.360 に答える