2016-03-26 17 views
2

Я новичок в сервлетах и ​​jsp. Я сделал небольшое приложение для Eclipse JEE. Но когда я выполняю, я получаю ошибку «http 404: resource not found», даже если Tomcat установлен правильно на Eclipse. Вот код, я использую:Http 404 ресурс не найден

Это мой ServletDemo.java

package com.advancejava; 

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

/** 
    * Servlet implementation class ServletDemo 
*/ 
@WebServlet(description = "ServletDemo", urlPatterns = { "/ServletDemo" }) 

    public class ServletDemo extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public ServletDemo() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 
protected void processRequest(HttpServletRequest request, 
     HttpServletResponse response)throws ServletException, IOException { 
    response.setContentType("text/html"); 
    try(PrintWriter pw = response.getWriter()) { 
     pw.println("<!DOCTYPE html>"); 
     pw.println("<html>"); 
     pw.println("<head>"); 
     pw.println("<body>"); 
     pw.println("<h1>Servlet Demo"+request.getContextPath()+"</h1>"); 
     pw.println("</body>"); 
     pw.println("</html>"); 
    } 
} 
/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
*  response) 
*/ 
protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 
    PrintWriter pw = response.getWriter(); 
    try{ 
     pw.println("<html>"); 
     pw.println("<head>"); 
     pw.println("<title>Servlet</title>"); 
     pw.println("</head>"); 
     pw.println("<body>"); 
     pw.println("<p>First DemoServlet</p>"); 
     pw.println("</body>"); 
     pw.println("</html>"); 
    } 
    finally{ 
     System.out.println("This is my Servlet Page"); 
    } 
} 

}

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
metadata-complete="true" version="3.0"> 
<display-name>ServletDemo</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 
<servlet> 
    <servlet-name>ServletDemo</servlet-name> 
    <servlet-class>com.advancejava.ServletDemo</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ServletDemo</servlet-name> 
    <url-pattern>/ServletDemo</url-pattern> 
</servlet-mapping></web-app> 

мой index.html

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="ISO-8859-1"> 
    <title>Insert title here</title> 
    </head> 
    <body> 
     Advance java 
      <a href="com.advancejava.ServletDemo"></a> 
    </body> 
</html> 

Если есть ошибки, пожалуйста, f примирите меня и предложите мне, как исправить их.

+0

Не эта строка '' , должен быть '' . Поскольку в противном случае нет смысла создавать «url-pattern» для упомянутого Servlet, если вы хотите, чтобы пользователи страницы увидели структуру каталогов соответствующего сервлета. Кроме того, вы используете аннотации, а также web.xml, что приводит к большей путанице :-). Используйте любой, но не оба :-) –

+0

Его перенаправление следующего URL-адреса и той же ошибки http: // localhost: 8080/AdvanceJavaPractice/servlet/com.advancejava.ServletDemo –

+0

Извините, замените его на 'Something', do watch 'href' без первой косой черты. Теперь, когда вы откроете 'index.html', например say' localhost: 8080/index.html', теперь при нажатии 'Something', адрес в браузере будет' localhost: 8080/ServletDeo' –

ответ

2

Поскольку вы уже объявить сервлет на

@WebServlet(description = "ServletDemo", urlPatterns = { "/ServletDemo" }) 

не объявлять дважды в вашем web.xml.


URL, чтобы сервлет должен быть

http://localhost:8080/{contextPath}/ServletDemo 

contextPath будет ваш Projectname по умолчанию, если вы используете затмение


есть еще одна вещь, удаление метаданных полная = "true" в вашем web.xml. Иначе это не сработает.

<?xml version="1.0" encoding="ISO-8859-1"?> 

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
version="3.0"> 
<display-name>ServletDemo</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 
+0

Я получаю эти два исключения java.lang.ClassNotFoundException: ServletDemo и javax.servlet.ServletException: Ошибка создания экземпляра класса сервлета ServletDemo –

+0

Я скопировал весь ваш код и сделал это выше, он должен работать. –

+0

Без изменений об ошибке сейчас я получаю http 404 ресурс не найдена ошибка. Я изменил код web.xml так, как вы указали здесь. Но никаких изменений в ошибке –

0

Предыдущий ответ: Индексная страница должна быть «my index.html» или «index.html». Нужно идти прямо с тем, что находится в сервлете.

index.html

Проводка дважды действительно является проблемой. Я рад, что это было разрешено. это полезно и мне. Благодаря

+0

Извините за недоумение свой индекс.html –

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