サーブレット

サーブレットとは?

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");

前の記事

JSP

次の記事

JavaBeans