java - 将war部署到tomcat配置问题

标签 java tomcat deployment tomcat7 web.xml

尝试学习 Ant/Tomcat,但我在部署我的 war 时遇到了一些困难。我在 catalina、localhost 或 localhost_access 日志中没有收到任何错误,因此我相信这只是一个配置问题。 Ant 构建运行良好。部署 war 。当我转到 localhost:8080/antDemo/hello 时,我得到一个 404。代码如下。

有一件事对我来说很奇怪,当我导航到 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>

网络.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>

编辑: war 结构如下(而且明显错误)

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

最佳答案

问题是

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

你应该使用

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

相反(未经测试)。

关于java - 将war部署到tomcat配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17433696/

相关文章:

java - 强制停止 Android 应用程序

java - 使用 Axis2 部署 Web 服务时出错

iis - 类型或 namespace 名称'Script'在 namespace 'System.Web'中不存在

ios - 从希腊部署 iOS 应用程序

Java全屏独占模式

Java ArchUnit : detect annotation on getMethodCallsFromSelf mehods

java - JPA 在每次迭代后开始消耗越来越多的内存

spring boot MVC 错误编码的 POST 请求

java - Servlet 问题 - 资源不可用

java - 无法使用 Deploy to container Plugin 从 jenkins 对 tomcat 部署 war