簡體   English   中英

Java servlet不起作用,URL映射問題

[英]Java servlet does not work, url mapping issue

如果我犯了一個愚蠢的錯誤並提出了一個愚蠢的問題,那么我道歉。 我有一個名為HelloWorld的servlet-它是一個簡單的servlet,它實現了Servlet接口,該接口是“ 1stapp”項目的一部分。 其代碼如下:

 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 Servlet已成功編譯到WEB-INF classes目錄中。 部署描述符如下:

  <?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 firefox使我在加載頁面消息時遇到問題。 誰能說我做錯了嗎?

似乎至少有三個問題

WEB-INF/classes而不是在WEB-INF中搜索WEB-INF/classes

使用HttpServlet代替通用Servlet

覆蓋HttpServletdoXXX方法,而不是通用service方法。 service方法調度到相應的doXXX方法

這不是在web.xml映射Servlet的方法

首先,您必須在web.xml中聲明您的Servlet,如下所示

<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協議的便捷類。

如下更改您的Servlet類。

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();
    }
}

另外,您的Servlet類名稱應為HelloWorld而不是helloWorld。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM