【问题标题】:Tomcat error: Resource Not Available (HTTP 404)Tomcat 错误:资源不可用 (HTTP 404)
【发布时间】:2015-12-30 22:01:39
【问题描述】:

我只是在尝试一个非常简单的 web 应用程序,它将温度从摄氏度转换为°F 和 K。

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

Java 版本 - 1.7

Tomcat 版本 - 8.0

操作系统:Windows 8.0

当我输入http://localhost:8080/lab4/时出现错误。

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

<%@ page contentType="text/html language="java";charset=UTF-8" %>

<%@ taglib uri="/tags/lab4-converter" prefix="temp" %>
<temp:convert to="F">100</temp:convert>

顶级域名

<?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>

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>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>

最后,我有这批用于编译和构建。 编译.bat

@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

I'm working with these directory:

【问题讨论】:

  • 如果您使用 localhost:8080/lab4 得到 404,那么这意味着您的欢迎文件无法找到。因此标签代码不相关。此外,您可以通过管理器应用查看您的网络应用是否已加载并正在运行。

标签: java xml jsp tomcat struts


【解决方案1】:

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

  1. 将您的项目目录移至其他位置并让您的编译脚本将lab4.war 文件放入webapps 文件夹(推荐),或者

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

webapps 文件夹应包含 *.war 文件或包含 Web 应用程序和 WEB-INF 文件夹的文件夹。你的结构不符合这些。

此外,将您的 war 文件移动到 webapps 文件夹可能会导致问题,因为它需要解压缩到一个名为 lab4 的文件夹 - 这是您的项目所在的位置。这对你来说可能会很糟糕。

【讨论】:

  • 我尝试了第一个选项。我删除了 lab4 文件夹并将 lab4.war 放在 webapps 中。我收到了同样的错误。谢谢
【解决方案2】:

我找到了解决方案。 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>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多