サーブレット
目次
サーブレットとは?
SunMicrosoftが開発したポストCGI技術
プロセスを生成せずに実行されるJAVAプログラム
WEBコンテナにロードされて待機し、ブラウザからは非同期で呼び出される為、高速に動作する。
クッキーもしくはURLにセッションIDを埋め込む事でセッションを維持したまま、
単一のスレッドを起動したまま複数のリクエストに対応する機能を持つ。
サーブレット基本構文
※testServlet.java
package testPackage;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(
  urlPatterns = { "/com/office/yone/index" },
  loadOnStartup = 1,
  initParams = {
    @WebInitParam(name = "prm1", value= "value1"),
    @WebInitParam(name = "prm2", value= "value2")
  }
)
public class testServlet extends HttpServlet {
 @Override
 protected void doGet(
  HttpServletRequest req,
  HttpServletResponse res)
  throws ServletException, IOException {
   
   フォワード
   RequestDispatcher dispatch = request.getRequestDispatcher("/test");
   dispatch.forward(req, res);
   
   リダイレクト
   res.sendRedirect("/test");
   
   クライアントへ直接htmlを送信
   PrintWriter out = res.getWriter();
   out.println("<~>");
 }
 
 @Override
 protected void doPost(
   HttpServletRequest req,
   HttpServletResponse res)
   throws ServletException, IOException
 {
  ~
 }
}
サーブレット登録
サーブレットのパス(URL)を定義
方法①:Tomcat7.0以降
@WebServlet("/(アプリケーションルート)")
public class (アプリケーションルート) extends HttpServlet {
 ~
}
方法②:Tomcat7.0以前
web.xmlへ登録
「Tomcat/デプロイメントディスクリプタ」参照
暗黙オブジェクト
JSP内で宣言無しに使用できるオブジェクト(組み込みインスタンス)
サーブレットではインスタンス化する必要がある
一覧
| オブジェクト名 | 概要 | 
|---|---|
| out | コンテンツを出力 | 
| request | リクエスト情報 | 
| response | レスポンス情報 | 
| session | セッション内での共有情報 | 
| application | ユーザー間での共有情報(コンテナ単位に生成) | 
| exception | JSPページ内で発生した例外情報 | 
| config | 初期化パラメータ情報 | 
| page | JSPページそのもの | 
| pageContext | 各暗黙オブジェクト | 
ServletContext
package ~;
import ~;
@WebServlet(~)
public class MyServlet extends HttpServlet  {
 
 @Override
 protected void doPost(
   HttpServletRequest req,
   HttpServletResponse res)
   throws ServletException, IOException
 {
  ServletContext application = this.getServletContext();
  String info = application.getServerInfo();
  String contextPath = application.getContextPath();
  String realPath = application.getRealPath(".");
  String prm = application.getInitParameter("prm");
  String attribute = (String) application.getAttribute("att");
 }
}
ServletConfig
package ~;
import ~;
@WebServlet(~)
public class MyServlet extends HttpServlet  {
 
 @Override
 protected void doPost(
   HttpServletRequest req,
   HttpServletResponse res)
   throws ServletException, IOException
 {
  ServletConfig config = this.getServletConfig();
  String prm = config.getInitParameter("prm");
  
  ServletContext context = config.getServletContext();
 }
}
HttpSession
package ~;
import ~;
@WebServlet(~)
public class MyServlet extends HttpServlet  {
 
 @Override
 protected void doPost(
   HttpServletRequest req,
   HttpServletResponse res)
   throws ServletException, IOException
 {
  HttpSession session = req.getSession();
  
  String prm1 = (String)session.getAttribute("prm1");
  String prm2 = (String)session.getAttribute("prm2");
  
  session.setAttribute("prm1", "value1");
  session.setAttribute("prm2", "value2");
 }
}
サーブレット実行方法
・javaファイルをコンパイル
・classファイルをデプロイ
webapps :公開ディレクトリ
 └ testApplication
   ├ testPackage
   |  └ testJsp.jsp
   └ WEB-INF
     └ classes:プログラム保存場所
        └  testPackage
           └  testServlet.class
ディスパッチャ
Dispatcher
サーブレットから他のサーブレットやJSPなどにリクエストを転送して処理を委託すること
例:画面→サーブレット→ディスパッチャ→JSP
RequestDispatcher dp = context.getRequestDispatcher("/test.jsp");
JSPにおける処理は「JSP ディスパッチ」参照
インクルード
dp.include(request, response);
フォワード
dp.forward(request, response);
リダイレクト
response.sendRedirect("/test.jsp");

