2017-02-06 5 views
0

Если бы я сделал глупую ошибку и задал глупый вопрос, тогда извинитесь. У меня есть сервлет HelloWorld - это простой сервлет, который реализует интерфейс Servlet, который является частью проекта «1stapp». Его код выглядит следующим образом:Java-сервлет не работает, проблема с картированием url

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; 
import javax.servlet.*; 
public class helloworld implements Servlet 
{ 
    private ServletConfig config; 
    public void init(ServletConfig config) 
     throws ServletException { 
     this.config=config; 
    } 
    public void destroy(){} 
    public ServletConfig getServletConfig() { 
     return config; 
    } 
    public String getServletInfo() { 
     return "this is simple hello World Servlet"; 
    } 
    public void service(ServletRequest request, ServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out=response.getWriter(); 
     out.println("<html><head>"); 
     out.println("<title>Simple Servlet</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Hello, World</h1>"); 
     out.println("</body></html>"); 
     out.close(); 
     } 
    } 

HelloWorld сервлет был успешно собран в classes каталог в WEB-INF. Дескриптор развертывания заключается в следующем:

<?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> 
     <servlet> 
      <servlet-name>hello</servlet-name> 
      <servlet-class>helloworld</servlet-class> 
     </servlet> 

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

Теперь, когда я печатаю localhost:8080/1stapp/hello светлячок geves меня проблема загрузки страницы сообщение. Может ли кто-нибудь сказать, что я сделал не так?

+0

Можете ли вы добавить сообщение об ошибке и недостающую часть вашего 'web.xml' – andih

+0

Можете ли вы добавить, какую точную ошибку отображает Firefox. – soufrk

+0

Вам конкретно нужен web.xml? он работает без этого. –

ответ

0

Это не способ отображения сервлета в web.xml

Прежде всего вы должны объявить сервлет в web.xml, как показано ниже

<servlet> 
     <servlet-name>hello</servlet-name> 
     <servlet-class>HelloWorld</servlet-class> 
</servlet> 

Затем сопоставить шаблон URL в Servlet, как

<servlet-mapping> 
     <servlet-name>hello</servlet-name> 
     <url-pattern>/hello</url-pattern> 
</servlet-mapping> 

И вам лучше расширить HttpServlet, а не Servlet. HttpServlet - удобный класс для работы с протоколом HTTP.

Измените свой класс сервлета, как показано ниже.

public class HelloWorld extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<html><head>"); 
     out.println("<title>Simple Servlet</title>"); 
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Hello, World</h1>"); 
     out.println("</body></html>"); 
     out.close(); 
    } 
} 

Кроме того, ваше имя класса сервлета должно быть HelloWorld вместо helloWorld.

+0

Я не использовал какой-либо пакет, я просто написал HelloWorld.java, поместил там сервлет-код и скомпилировал его в каталог классов – olzhabala

+0

Хорошо, если вы не имеет никакого пакета, который прекрасен (отредактирован ответ). Чтобы быть конкретным, вам нужно расширить HttpServlet вместо реализации интерфейса Servlet. –

+0

Это то, что я пытаюсь понять. Для веб-страниц мне нужно расширить httpservlet или он будет работать с любым классом, реализующим интерфейс сервлета. Можете ли вы рассказать мне об этом? – olzhabala

1

Там, как представляется, как минимум три проблемы

Классы ищутся в WEB-INF/classes, а не в WEB-INF

Используйте HttpServlet вместо родового Servlet

Заменять doXXX методы HttpServlet и не обобщенный service способ. Метод service отправляет на соответствующий метод doXXX

+0

то, что я делаю сейчас, пытается понять простой интерфейс интерфейса сервлета – olzhabala

+0

Если вы внимательно посмотрите на мой первый пост, я написал, что выполнил файл класса в поддиректории классов web-inf – olzhabala