javax.servlet.Servlet インターフェイスのみを使用してサーブレットを実装するサーブレットの例を再現しようとしました。しかし、それは機能していません。Web ブラウザーを使用してサーブレットを実行しようとすると、次のエラー メッセージが表示されます。
ご要請のリソースはご利用できません。
グラスフィッシュに記録されたエラーメッセージは
[#|2012-10-15T07:00:58.703-0500|SEVERE|glassfish3.0.1|global|_ThreadID=39;_ThreadName=Thread-1;|アノテーション javax.servlet.annotation.WebServlet を持つクラス app01a.MyServlet は、 javax.servlet.http.HttpServlet の派生クラスになります。記号: TYPE 場所: クラス app01a.MyServlet |#]
私はグラスフィッシュ、エクリプス、jdk1.7.0_03 を使用しています。
なぜこうなった?
サーブレットを実装する通常の方法は、HttpServlet クラスを拡張することです。しかし、著者がなぜそうしているのかについては興味があります。
本の名前は「Servlet and JSP: A Tutorial By 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>");
}
}