Webプロジェクトのサービス・ビジネス・レベルでプロジェクトのルートを取得する方法

1545 ワード

ここには2つの前提があります
1、struts 2フレームは使用されていません.servletが使用されていないため、サービスレイヤにrequestオブジェクトを渡すことはできません.
2、Springフレームを使用しています.
じゃ、聞くかもしれません.このような状況はありますか?答えはあります.例えば、WebServiceインタフェースプロジェクトを公表しています.サービスを提供するだけで、actionに触れる必要はありません.servlet.
では、私たちはどのようにプロジェクトの根幹を手に入れますか.
ここでは2つの方法を示します.
1.requestオブジェクトを取得し、最後にサーブレットContextオブジェクトから呼び出す方法
まずweb.xmlでリスナーを構成する必要があります
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

サービス層の方法では
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
System.out.println("***********"+request.getSession().getServletContext().getRealPath("/"));

2、任意のクラスclassのプロジェクト内のコンパイルフォルダを取得し、切り取る
WEB-INFclassesプロジェクトルートフォルダを取得
通常、プロジェクトで呼び出すために静的定数として定義します.
public static final String PATH_CLASS_ROOT = Constants.class.getClassLoader().getResource("").getPath();  
/*     */
public static final String ROOT_Path = PATH_CLASS_ROOT.substring(0,PATH_CLASS_ROOT.length() - "WEB-INF\\classes\\".length()); 

Webプロジェクトが呼び出されたと仮定し、印刷結果は
/E:/Apache-tomcat/apache-tomcat-7.0.53/wtpwebapps/demo/WEB-INF/classes/
ここまで来れば事実がわかるはずだ
/E:/Apache-tomcat/apache-tomcat-7.0.53/wtpwebapps/demo/こそ私たちのプロジェクトルートパスです
Constants.ROOT_を呼び出しましたPathはプロジェクトルートを取得します
もう一つはよく使うはずなので、いいでしょう(*^^*)ヒヒ…….