2012-05-06 3 views
0

Моя система имеет Tomcat семь, и все файлы находятся под webapps. Файловая структураОшибка Java Servlet 404

WebApps/WelcomeForm/веб/WelcomeForm.html

WEB-INF/web.xml

Библиотека/классы/привет/HelloWorldServlet.java HelloWorldServlet.class

веб папка содержит WelcomeForm.html.

WEB-INF содержит web.xml.

Lib держит сервлет-api.jar и

классы проводит HelloWorldServlet.java.

HTML-файл работает нормально, но я не могу запустить файл Java, как он возвращает сообщение:

HTTP Status 404 - /hello 

type Status report 

message /hello 

description The requested resource (/hello) is not available. 

Код для файлов ниже:

WelcomeForm.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <title>Welcome Form</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
      <form method="POST" action="/hello"> 
     <font size="10" color="red">Hello World!</font><BR> 

    Type your first name and click submit button <input TYPE=TEXT NAME="username" SIZE=20> 
      <P><input type="submit" value="Submit"> 


     </form> 

    </body> 
</html> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <servlet> 
     <servlet-name>HelloWorld</servlet-name> 
     <servlet-class>hello.HelloWorldServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>HelloWorld</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
</web-app> 

HelloWorldServlet.java

package hello; 

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

public class HelloWorldServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html"); 

     doPost(request,response); 
     } 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    String name = request.getParameter("username"); 
    PrintWriter out = response.getWriter(); 
    out.write("Your Name is :"); 
    out.print(name); 

    }  
} 

Что я делаю неправильно?

+0

Вы можете попробовать удалить 'servlet-api.jar' из своего каталога' lib' и изменить 'action ="/hello "' на 'action =" hello "'? –

+0

Банкомат API должен быть удален, поскольку Tomasz заявляет, и если вы не создаете URL-адрес через JSTL, вы должны убедиться, что он связан с веб-приложениями. Является ли файл сервлета в/WEB-INF/классах, или/WEB-INF/lib/classes? Это непонятно из вашего сообщения, потому что нет реального форматирования. Он должен быть в/WEB-INF/classes (под иерархией пакетов). –

+0

По-видимому, при развертывании возникла ошибка. Проверьте файлы журнала сервера Tomcat. Он указывает, когда он начнет развертывание вашего веб-приложения и почему он не прошел. – kapand

ответ

0

Проверьте URL-адрес браузера. Вам не хватает контекста.

Let Say, Вы работаете в http://localhost:8080/test/index.jsp, где test - это ваш контекстный путь.

Итак, при вызове сервлета Это должно быть как http://localhost:8080/test/hello.

В вашем случае это не так.

Итак, добавление cotextpath решит вашу проблему.

например. action="<%=request.getContextPath()%>/hello"

ИЛИ вы можете использовать

например action="hello"

Итак, когда вы добавляете «/» в action, всегда добавляйте контекстный путь.

Смежные вопросы