Java servlet不起作用,url映射问题

时间:2017-02-06 09:25:18

标签: java servlets

如果我犯了一个愚蠢的错误,并提出一个愚蠢的问题,那么我道歉。我有一个名为HelloWorld的servlet - 它是一个简单的servlet,它实现了作为“1stapp”项目一部分的Servlet接口。其代码如下:

 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已成功编译到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时,firefox会解决加载页面消息的问题。谁能说出我做错了什么?

2 个答案:

答案 0 :(得分:1)

似乎至少有三个问题

WEB-INF/classes而不是WEB-INF

中搜索类

使用HttpServlet代替通用Servlet

覆盖doXXX的{​​{1}}方法,而不是通用HttpServlet方法。 service方法将调度到相应的service方法

答案 1 :(得分:0)

这不是在web.xml

中映射Servlet的方法

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

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

然后将您的网址格式映射到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。