[英]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
覆蓋HttpServlet
的doXXX
方法,而不是通用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.