2012-03-29 30 views
0

我正在開發一個GWT Web應用程序,並在部署到Tomcat時遇到問題。Tomcat jaas.conf/log4j.properties位置

問題很簡單,但我不知道如何解決它,而不告訴Tomcat在哪裏查找這些文件。

當我將應用程序部署到Tomcat上時,它會查找/ bin目錄中的文件,因此如果將log4j.properties和jaas.conf放在該目錄中,它就像一個魅力一樣。

事情是我想能夠將這些文件保存在我的webapp中。

我該怎麼辦? 有什麼我可以添加到web.xml?

我試圖把這兩個文件放到/WEB-INF/classes目錄中,但沒有成功。

當我在Eclipse中運行我的項目時,我的jaas.config必須位於/ war文件夾中,而log4j.properties保留在/ src文件夾中。

編輯: 我讀this,並嘗試它,即使我不使用log4j的Tomcat內部日誌記錄,但它也沒有工作。

我使用Tomcat 7.0

回答

0

這個答案適合我的特殊問題,但任何人都可以確定地適應它,使它在他的項目中工作。

我的項目有兩個servlet,具體取決於外部文件。爲了將這些外部文件集中到我的webapp文件夾中,我使用了第三個sevlet來設置文件的位置。在我的GWT web.xml中,我添加了StartUpServlet,並將其設置爲首先由我的Servlet容器(Tomcat)加載。這是我的web.xml:

 <?xml version="1.0" encoding="utf-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 
    <servlet> 
     <servlet-name>StartUpServlet</servlet-name> 
     <servlet-class>com.banctecmtl.ca.vlp.view.webview.server.StartUpServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet> 
     <servlet-name>VlpControllerService</servlet-name> 
     <servlet-class>com.banctecmtl.ca.vlp.view.webview.server.VlpControllerServiceImpl</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 
    <servlet> 
     <servlet-name>UserAccessService</servlet-name> 
     <servlet-class>com.banctecmtl.ca.vlp.view.webview.server.UserAccessServiceImpl</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 

    <servlet> 
     <servlet-name>EventService</servlet-name> 
     <servlet-class>de.novanic.eventservice.service.EventServiceImpl</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 


    <servlet-mapping> 
     <servlet-name>EventService</servlet-name> 
     <url-pattern>/VirtualLabPortal/gwteventservice</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>VlpControllerService</servlet-name> 
     <url-pattern>/VirtualLabPortal/VlpController</url-pattern> 

    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>UserAccessService</servlet-name> 
     <url-pattern>/VirtualLabPortal/UserAccess</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
     <servlet-name>StartUpServlet</servlet-name> 
     <url-pattern>/VirtualLabPortal/StartUpServlet</url-pattern> 
    </servlet-mapping> 


    <!-- Default page to serve --> 
    <welcome-file-list> 
     <welcome-file>VirtualLabPortal.html</welcome-file> 
    </welcome-file-list> 
</web-app> 

在這種StartUpServlet,我設置像這樣的文件的位置:(有可能是一個更好的方式來做到這一點,但它的工作):

public class StartUpServlet extends RemoteServiceServlet { 
    /** 
    * This Servlet is used to set configuration file locations. 
    */ 
    private static final long serialVersionUID = 6459940076859400546L; 
    private final String CONFIG_FOLDER = "config"; 
    private final String LOG_FOLDER = "logs"; 

    public void init() { 
     // Check the current of to have the good file separator for file 
     // browsing 
     String os = System.getProperty("os.name").toLowerCase(); 
     // windows 
     String fileSeparator; 
     if (os.indexOf("win") >= 0) { 
      fileSeparator = "\\"; 
     } else { 
      fileSeparator = "/"; 
     } 

     String jaasConfigPath = super.getServletContext().getRealPath(
       CONFIG_FOLDER + fileSeparator + "JaasConfig.conf"); 
     String jaasConfigName = "JaasConfig"; 
     String configFile = super.getServletContext().getRealPath(
       CONFIG_FOLDER + fileSeparator + "config.properties"); 

     String log4j = getServletContext().getRealPath(
       CONFIG_FOLDER + fileSeparator + "log4j.properties"); 
     String logFile = getServletContext().getRealPath(
       LOG_FOLDER + fileSeparator + "vlplog.log"); 

     // Order is important here as the log4j properties file use the system 
     // property : "logFile" 
     System.setProperty("logFile", logFile); 
     PropertyConfigurator.configure(log4j); 
     System.setProperty("jaasConfigName", jaasConfigName); 
     System.setProperty("jaasConfigPath", jaasConfigPath); 
     System.setProperty("configFile", configFile); 
    } 
} 

基本上,我得到了ServletContext的真實路徑,所以它給了我,在Tomcat,以下路徑:${CATALINA_HOME}/webapps/<myapps>

然後我用它來設置文件位置:config/config.properties,config/log4j.properties和我的config/JaasConfig 。

一旦它們被設置,我可以使用他們在我的其他servlet這樣System.getProperty(KEY);

感謝@Aviram幫助我設定JaasConfig的位置。

2

關於的jaas.config: 實現一個ServletContextListenercontextInitialized方法中執行以下操作(這是如果的jaas.config是在戰爭的根源,否則,只是改變了路徑):

String jaasConfigPath = event.getServletContext().getRealPath("jaas.config"); 
System.setProperty("java.security.auth.login.config", jaasConfigPath); 
+0

我會仔細研究它! – David 2012-04-04 15:18:54