2015-12-30 4 views
0

Je suis juste essayer une webapp très simple qui convertit la température de celcius en ° F et K.erreur Tomcat: Ressource non disponible (HTTP 404)

Tout le code source, xml, etc, est censé être correct parce que je l'ai pris d'un livre.

version Java - 1.7

Tomcat version - 8.0

OS: Windows 8.0

L'erreur apparaît quand je rentre http://localhost:8080/lab4/.

Tomcat fonctionne correctement et je peux déployer et utiliser d'autres applications Web.

En outre, j'utilise un tag personnalisé appelé convertir.

classe Java gestionnaire

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> 

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> 

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

Enfin, j'ai ce lot pour compiler et construire. compile.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:

+0

Si vous obtenez 404 en utilisant http: // localhost: 8080/lab4 /, cela signifie que votre fichier de bienvenue est introuvable. Par conséquent, le code de l'étiquette n'est pas pertinent. En outre, vous pouvez utiliser l'application de gestion pour voir si votre application Web a été chargée et est en cours d'exécution. – rickz

Répondre

0

Le fait que votre répertoire de projet est déjà en webapps dans Tomcat est ce qui en fait difficile. Vous pouvez:

  1. déplacer votre répertoire de projet ailleurs et faire votre place compilation de script le fichier lab4.war dans le dossier webapps (recommandé), ou

  2. vous pouvez modifier la structure de votre dossier source (non recommandé) pour tout déplacer dans le dossier Web dans le dossier Lab4.

Le dossier webapps doit contenir des fichiers * .war ou des dossiers contenant l'application Web et le dossier WEB-INF. Votre structure ne rencontre aucun de ceux-ci. En outre, il suffit de déplacer votre fichier war dans le dossier webapps pour créer un problème, car il voudra décompresser dans un dossier appelé lab4, où se trouve votre projet. Cela finira probablement mal pour vous.

+0

J'ai essayé la 1ère option. J'ai supprimé le dossier lab4 et placé lab4.war dans les webapps. J'ai reçu la même erreur. Merci – Kelper

0

J'ai trouvé la solution. Le TLD était incorrect.

Le correct est:

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

J'ai aussi fait ce que Jason a suggéré: placé le lab4.war dans webapps et supprimé le dossier lab4.