我試圖重現一個僅使用javax.servlet.Servlet接口實現Servlet的Servlet示例。但是,它不起作用。當我嘗試使用Web瀏覽器運行小服務程序時,它顯示錯誤消息:具有註釋javax.servlet.annotation.WebServlet的類x需要是javax.servlet.http.HttpServlet的派生類
請求的資源()不可用。
登錄GlassFish中錯誤消息是
[#| 2012-10-15T07:00:58.703-0500 |嚴重| glassfish3.0.1 |全球| _ThreadID = 39; _ThreadName = Thread- 1; | 具有註釋的類app01a.MyServlet javax.servlet.annotation.WebServlet需要是派生類 javax.servlet.http.HttpServlet。符號:TYPE位置:類 app01a.MyServlet |#]
我使用的是GlassFish,Eclipse和jdk1.7.0_03。
這是怎麼發生的?
我知道實現Servlet的正常方式是擴展HttpServlet類。不過,我很好奇作者爲什麼這樣做。
本書的名稱是「Servlet和JSP:Budi Kurniawan的教程」。
下面是示例代碼。
謝謝您的幫助
package app01a;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
/**
* Servlet implementation class MyServlet
*/
@WebServlet("/MyServlet")
public class MyServlet implements Servlet {
private transient ServletConfig servletConfig;
/**
* Default constructor.
*/
public MyServlet() {
}
/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
this.servletConfig = servletConfig;
}
/**
* @see Servlet#destroy()
*/
public void destroy() {
}
/**
* @see Servlet#getServletConfig()
*/
public ServletConfig getServletConfig() {
return servletConfig;
}
/**
* @see Servlet#getServletInfo()
*/
public String getServletInfo() {
return "My Servlet";
}
/**
* @see Servlet#service(ServletRequest request, ServletResponse response)
*/
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
String servletName = servletConfig.getServletName();
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<html><head></head><body>Hello from " +
servletName + "</body></html>");
}
}