2012-10-15 51 views
2

我試圖重現一個僅使用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>"); 
    } 

} 

回答

0

我可以看到你問的這個問題而回,但我也有類似的問題。

嘗試完全刪除WebServlet並再次部署站點。您可能會收到更接近問題根源的更有用的錯誤消息。

我這樣做,發現我在我的一個實體類中做了一個無效的NamedQuery。之後我把WebServlet註釋放回去,並且網站很好。

1

我在讀這本書,也遇到了同樣的問題在碼頭與以下錯誤消息: WARN:oeja.WebServletAnnotation:main: app01a.MyServlet is not assignable from javax.servlet.http.HttpServlet

這是因爲發生了@WebServlet標註可以只適用於javax.servlet.http.HttpServlet的子類。

The Java 6 EE Tutorial說:

中的類@WebServlet註解必須擴展javax.servlet.http.HttpServlet類

所以這個問題可以通過更換extends HttpServletimplements Servlet容易固定。

相關問題