2013-07-02 124 views
0

試圖學習Ant/Tomcat,我遇到了部署我的戰爭的一些困難。我在catalina,localhost或localhost_access日誌中沒有發現任何錯誤,所以我確信它只是一個配置問題。 Ant構建運行良好。部署戰爭。當我到localhost:8080/antDemo/hello時,我得到了一個404代碼。將戰爭部署到tomcat配置問題

有一件事對我來說很奇怪,當我導航到tomcat/webapps/antDemo時,我只能看到HelloServlet.java文件和一個META-INF文件夾,當我期望看到一個web.xml和一個類文件夾或類似的東西。

我讀過很多堆棧溢出問題(雖然感覺像一個白癡不能排序),但沒有運氣。

幫助會很好,但更重要的是,朝着全面的信息資源方向發展,不僅解釋瞭如何配置這樣的事情,而且爲什麼需要這樣配置。獲取爲什麼一直難以找到......並且是最重要的部分。

項目結構:

tomcatdemo 
|-src 
|---HelloServlet.java 
|-WebContent 
|---WEB-INF 
|------classes 
|---------HelloServlet.class 
|------web.xml 
|-build.xml 

HelloServlet.java

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class HelloServlet extends HttpServlet{ 

    public void doGe(HttpServletRequest request, HttpServletResponse response) 
    throws IOException{ 
     PrintWriter out = response.getWriter(); 
     out.println("<html>"); 
     out.println("<body>"); 
     out.println("<h1>Hello Servlet Get</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } 
} 

的build.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project default="clean" basedir="."> 
    <property name="tomcat" value="C:\tomcat"/> 
    <property name="tomcat.deployment" value="${tomcat}/webapps"/> 
    <property name="tomcat.bin" value="${tomcat}/bin"/> 
    <property name="base" value="."/> 
    <property name="source" value="${base}/src"/> 

    <target name="clean"> 
     <delete file="${tomcat.deployment}/antDemo.war"/> 
     <antcall target="compile"/> 
    </target> 

    <target name="compile"> 
     <javac srcdir="src" destdir="${base}/WebContent/WEB-INF/classes" classpath="C:/tomcat/lib/servlet-api.jar"/> 
     <antcall target="deployTarget"/> 
    </target> 


    <target name="warTarget"> 
     <war warFile="antDemo.war" webxml="${base}/WebContent/WEB-INF/web.xml"> 
      <fileset dir="${source}"/> 
     </war> 
     <antcall target="deployTarget"/> 
    </target> 

    <target name="deployTarget"> 
     <copy file="${base}/antDemo.war" todir="${tomcat.deployment}" /> 
     <antcall target="startTomcat"/> 
    </target> 

    <target name="startTomcat"> 
     <exec executable="${tomcat.bin}/startup.bat"> 
      <env key="CATALINA_HOME" value="${tomcat}"/> 
     </exec> 
    </target> 

    <target name="stopTomcat"> 
     <exec executable="${tomcat.bin}/shutdown.bat"> 
      <env key="CATALINA_HOME" value="${tomcat}"/> 
     </exec> 
    </target> 
</project> 

的web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> 

<web-app> 

    <display-name>myServletWAR, a first Web Application</display-name> 
    <description> 
    </description> 

    <servlet> 
     <servlet-name>Hello</servlet-name> 
     <servlet-class>HelloServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Hello</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 

</web-app> 

編輯: 戰爭結構如下(和它顯然是錯誤的)

antDemo 
|-META-INF 
|----MANIFEST.MF 
|-HelloServlet.java 
+0

請發送你的'war'結構。 – AlexR

+0

@AlexR Tomcat是怎麼膨脹的?在/ tomcat/webapps/antDemo/ – Brad

+0

構建WAR文件後,其結構是什麼?您可以通過從.war重命名爲.zip來解壓WAR。如果WAR文件沒有正確創建,這可能會有所幫助。話雖如此,我會期待在服務器日誌中出現錯誤。 –

回答

1

問題是

  <fileset dir="${source}"/> 

您應該使用

  <fileset dir="${base}/WebContent"/> 

代替(未經測試)。

+0

謝謝。這是我的問題的一部分。一般來說,我的build.xml中有很多失敗。這幫助我揪出所有這些。一些額外的失敗是我的編譯目標是調用部署目標而不是戰爭目標。結果,後續的構建並沒有執行戰爭任務,所以相同的(破碎的)戰爭一直在部署到tomcat(facepalm)。再次感謝 – Brad

+0

,它非常有助於在生成的工件內部查看實際發生的情況。也就是說,如果你還在努力開始,我建議你從螞蟻切換到maven。你避免了這些問題,因爲Maven比你的項目更瞭解你的項目。 –

+0

這是非常有益的...謝謝你。有趣的是你應該提到maven。這就是我想用的(我在過去的項目中使用過它),但我的新僱主明確表示不使用maven。哦,好:) – Brad