Java Tomcat错误:资源不可用(HTTP 404)

Java Tomcat错误:资源不可用(HTTP 404),java,xml,jsp,tomcat,struts,Java,Xml,Jsp,Tomcat,Struts,我只是在尝试一个非常简单的网络应用程序,它可以将温度从摄氏度转换为华氏度和华氏度 所有的源代码、xml等都应该是正确的,因为我是从一本书中获取的 Java版本-1.7 Tomcat版本-8.0 操作系统:Windows 8.0 当我输入时会显示错误 Tomcat运行正常,我可以部署和使用其他Web应用程序 另外,我正在使用一个名为convert的自定义标记 Java类处理程序 package net.thinksquared.lab4; import javax.servlet.jsp.tag

我只是在尝试一个非常简单的网络应用程序,它可以将温度从摄氏度转换为华氏度和华氏度

所有的源代码、xml等都应该是正确的,因为我是从一本书中获取的

Java版本-1.7

Tomcat版本-8.0

操作系统:Windows 8.0

当我输入时会显示错误

Tomcat运行正常,我可以部署和使用其他Web应用程序

另外,我正在使用一个名为convert的自定义标记

Java类处理程序

package net.thinksquared.lab4;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.*;


public class Converter extends BodyTagSupport{

    private String _to;

    public String getTo() {
        return _to;
    }   

    public void setTo(String to) {
        _to = to;
    }

    public int doAfterBody(){

        try {
            BodyContent bc = getBodyContent();
            JspWriter out = bc.getEnclosingWriter();
            double result = 0.0;
            double temp = Double.parseDouble(bc.getString());
            if(_to.equals("F")) {
                result = toFahrenheit(temp);
            } else {
                result = toKelvin(temp);  
            }
            bc.getEnclosingWriter().print(result);

        } catch(Exception E) {

        }      
        return EVAL_PAGE; //tells servlet container to process rest of JSP page.
    }

    private double toFahrenheit(double c){
        return 32.0 + (c*1.8);
    }

    private double toKelvin(double c){
        return 273.0 + c;
    }

}
JSP


您的项目目录已经在Tomcat中的webapps下,这一事实使得这一点变得困难。您可以:

  • 将项目目录移到其他位置,并使编译脚本将lab4.war文件放入webapps文件夹(推荐),或

  • 您可以更改源文件夹结构(不推荐),将web文件夹中的所有内容上移到lab4文件夹中

  • webapps文件夹应包含*.war文件或包含web应用程序和web-INF文件夹的文件夹。您的结构不符合这两个条件


    此外,仅仅将war文件移动到webapps文件夹中可能会导致问题,因为它需要解压缩到名为lab4的文件夹中,这就是您的项目所在的文件夹。这可能会给你带来糟糕的结局。

    我找到了解决办法。TLD不正确

    正确的答案是:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" 
                            "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    
    <taglib>
    
        <tlibversion>1.2</tlibversion>
        <jspversion>1.1</jspversion>
        <shortname>temp</shortname>
    
        <tag>
            <name>convert</name>
            <tagclass>net.thinksquared.lab4.Converter</tagclass>
            <bodyContent>JSP</bodyContent>
            <attribute>
                <name>to</name>
                <required>no</required>
            </attribute>
    
        </tag>
    
    </taglib>
    
    
    1.2
    1.1
    临时雇员
    转换
    net.thinksquared.lab4.Converter
    JSP
    到
    不
    

    我也按照Jason的建议做了:将lab4.war放在webapps中,并删除了文件夹lab4。

    如果您使用404,则意味着无法找到您的欢迎文件。因此,标签代码不相关。此外,您还可以使用manager应用程序查看您的web应用程序是否已加载并正在运行。我尝试了第一个选项。我删除了lab4文件夹,并将lab4.war放在webapps中。我收到了同样的错误。谢谢
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" 
                            "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    
    <taglib>
        <tlibversion>1.2</tlibversion>
        <jspversion>1.1</jspversion>
    
        <tag>
            <name>convert</name>
            <tagClass>net.thinksquared.lab4.Converter</tagClass>
            <bodyContent>JSP</bodyContent>
            <attribute>
                <name>to</name>
                <required>no</required>
            </attribute>
    
        </tag>
    
    <taglib>
    
    <?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>Lab4: Custom Tags</display-name>
    
      <welcome-file-list>
        <welcome-file>test.jsp</welcome-file>
      </welcome-file-list>  
    
    <taglib>
        <taglib-uri>/tags/lab4-converter</taglib-uri>
        <taglib-location>/WEB-INF/lab4-converter.tld</taglib-location>
    </taglib>
    
    </web-app>
    
    @echo off
    
    REM ----------------------------------------------------------------------
    REM     This batch file creates a WAR file for Lab 4, the lab on custom tags. 
    REM The output is lab4.war.
    REM
    REM     NOTE: To get this batch file on your system, you should change the 
    REM     PATH variable to point to your JDK location.
    REM ----------------------------------------------------------------------
    
    set PATH=%PATH%;C:\Program Files\Java\jdk1.7.0_55\bin
    set APP_NAME=lab4
    
    echo Cleaning up build directory
    rmdir /S/Q build
    
    echo Creating buildnment directory
    mkdir build\WEB-INF\classes
    
    echo Installing web.xml and .tld files
    copy .\web\WEB-INF\*.* .\build\WEB-INF\*.*
    
    echo Installing web pages 
    copy .\web\ .\build\
    
    echo Compiling java code
    javac -deprecation -d build/WEB-INF/classes -classpath ./lib/jsp-api.jar ./src/*.java
    
    
    cd build
    
    echo creating WAR file
    jar cvf %APP_NAME%.war .
    copy %APP_NAME%.war ..
    
    pause
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" 
                            "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
    
    <taglib>
    
        <tlibversion>1.2</tlibversion>
        <jspversion>1.1</jspversion>
        <shortname>temp</shortname>
    
        <tag>
            <name>convert</name>
            <tagclass>net.thinksquared.lab4.Converter</tagclass>
            <bodyContent>JSP</bodyContent>
            <attribute>
                <name>to</name>
                <required>no</required>
            </attribute>
    
        </tag>
    
    </taglib>