2010-11-22 3 views
1

Я пытаюсь сделать свой первый сервлет для запуска в eclipse для j2ee с tomcat 7.0, но я не могу понять, что я делаю неправильно. Я запускаю весь проект следующим образом: Щелкните правой кнопкой мыши мой проект-> Запустить как-> Запустить на сервере, файл index.html появится мне в браузере, но когда я нажму «Продолжить», он покажет мне это сообщение:Как сделать мой первый сервлет работы?

HTTP Status 404 -/PDPJ_L5/привет - The запрошенный ресурс (/ PDPJ_L5/привет) это не доступно.

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

Вот мой проект (PDPJ_L5) структура каталогов:

PDPJ_L5

  • JAX-WS Web Services
  • Дескриптор развертывания: PDPJ_L5
  • Java Resources: ЦСИ, который содержит сервлеты пакет с моим сервлетом Hello.java
  • Ресурс JavaScript
  • сборки
  • META-INF
  • WEB-INF с Lib папки, мой index.html и web.xml

В index.html Содержание:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Some title</title> 
</head> 
<body> 
<H1 ALIGN="CENTER">Choose your option:</H1> 
<form action="http://localhost:8080/PDPJ_L5/hello" method="GET"> 
    <center> 
     <INPUT TYPE="RADIO" NAME="group" VALUE="one">ONE<BR> 
     <INPUT TYPE="RADIO" NAME="group" VALUE="two">TWO<BR><BR> 
     <INPUT TYPE="SUBMIT" VALUE="Continue"> 
    </center> 
</form> 
</body> 
</html> 

Вот Hello.java сервлет:

package servlets; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class Hello 
*/ 
public class Hello extends HttpServlet 
{ 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Hello() 
    { 
     super(); 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     response.setContentType("text/html"); 

     PrintWriter out = response.getWriter(); 
     out.println("<HEAD><TITLE>Success</HEAD><BODY>"); 
     out.println("<h1> It works </h1>"); 
     out.println("</BODY>"); 
     out.close(); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     doGet(request, response); 
    } 

} 

И файл web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app 
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-application_2_3.dtd"> 

<web-app> 
    <servlet> 
     <servlet-name>Hello</servlet-name> 
     <servlet-class>servlets.Hello</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Hello</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
</web-app>  
+0

Я удивлен по умолчанию web.xml Eclipse создал точки для Servlet 2.3 * http: //java.sun.com/dtd/web-application_2_3.dtd*? Mine имеет * web-app_2_5.xsd * – JoseK

+0

@Jose: Большая вероятность того, что он читает сильно устаревший учебник/книгу, доказанный наличием с 1998 года устаревшего тега '

' и использования HTML-тегов верхнего уровня в стиле 90-х. Я бы все равно использовал Servlet 3.0, поскольку Tomcat 7 является контейнером, поддерживающим сервлет 3.0. – BalusC

ответ

0

Я нашел решение для своей проблемы.

Я построил военный архив с помощью команды jar и поместил его в папку webapps tomcat, и он работает таким образом.

Единственная проблема заключается в том, что он не работает в режиме затмения с запуском на сервере, но таким образом он работает.

Благодарим за помощь.

0

Когда ваша страница индекса загружается, какой порт фактически используется? Ваша гиперссылка идет на 8080, но я думаю, что «Run on Server» запускает временный сервер, который будет привязываться к случайному порту.

+0

Когда загружается индексная страница, адрес в браузере: http: // localhost: 8080/PDPJ_L5 /, поэтому это порт 8080 – DaJackal

0

Что говорят файлы журнала Tomcat (или если вы используете экземпляр Tomcat из консоли Eclipse)? Обычно это происходит, когда генерируется некоторое исключение при инициализации сервлета или обслуживании запроса.

+0

Just INFO, нет никаких предупреждений и исключений – DaJackal

+0

Нужна более подробная информация; как вы начинаете Tomcat? Из Eclipse или запустив файл .bat? На какие файлы журналов вы посмотрели? –

+0

Я запустил Tomcat Server в Eclipse, запустив на сервере, и посмотрел на консольное представление из Eclipse – DaJackal

0

Предполагая, что вы правильно щелкните> Построен проект.

В рабочем пространстве Eclipse (в проводнике Windows) вы можете найти фактический файл класса - PDPJ_L5/build/classes/servlets/Hello.class? он существует?

+0

Да, он существует. – DaJackal