JSP & Servlet

Java Server Pages

JSP File

  1. Javaを(ふく) むHTMLページ
  2. Javaコードからの動的(どうてき) コンテンツを(ふく)

.jsp & .html へのアクセス

  • webapp
    • a.html : http://ip:port/プロジェクトパス/a.html
    • b.jsp : http://ip:port/プロジェクトパス/b.jsp

JSP の本質

  graph BT
    HJB[Class HttpJspBase]
    HS((Interface HttpServlet))
    HJP((Interface HttpJspPage))

    HJB --> HS
    HJB -.-> HJP
  1. JSPはServletプログラム
  2. 初回(しょかい) の.jspページアクセス() 、Tomcat Serverが.javaを生成(せいせい) し、.classにコンパイル

JSP - Syntax

page Directives ディレクティブ

<%@ directive attribute="value" %>

  1. language 属性(ぞくせい) ︰JSP(ない)使用(しよう) する言語(げんご)
  2. contentType 属性(ぞくせい) ︰JSPが(かえ) すデータ(かた)
  3. pageEncoding 属性(ぞくせい) ︰JSPページファイル自体(じたい) のCharacter set
  4. import 属性(ぞくせい)
  5. autoflush 属性(ぞくせい) ︰out出力(しゅつりょく) ストリームバッファがいっぱいになった(あと)自動(じどう) フラッシュするかどうか
  6. buffer 属性(ぞくせい) ︰outバッファのサイズ。デフォルト8kb
  7. errorPage 属性(ぞくせい) ︰JSPエラー() のカスタム404ページへの自動(じどう) ジャンプ
  8. isErrorPage 属性(ぞくせい) :JSPがエラー情報(じょうほう) ページかどうか
  9. session 属性(ぞくせい)現在(げんざい) のJSPページでHttpSessionオブジェクトを作成(さくせい) するかどうか
  10. extends 属性(ぞくせい)

JSP Implicit Objects

  1. request
  2. response
  3. pageContext
  4. session
  5. application - ServletContext オブジェクト
  6. config - ServletConfig オブジェクト
  7. out
  8. page
  9. exception

JSP Scope Object

  1. pageContext ( PageContextImpl ):現在(げんざい) のJSPページ範囲(はんい) (ない)有効(ゆうこう)
  2. request ( HttpServletRequest ):1(かい) のリクエスト(ない)有効(ゆうこう)
  3. session ( HttpSession ):ブラウザを(ひら) いてリクエストしてからブラウザを() じるまで
  4. application ( ServletContext ):Webプロジェクト全体(ぜんたい)有効(ゆうこう)

使用優先順位

pageContext → request → session → application

常用タグ

Static include

<%@include file="/include/footer.jsp" %>

Dynamic include

<jsp:include page="/include/footer.jsp">
    <jsp:param value="root" name="username"/>
</jsp:include>

EL ( Expression Language ) & JSTL

  1. ELはJSPページでのデータ出力(しゅつりょく) のためにScriptを()()
  2. ELがnullを出力(しゅつりょく) する場合(ばあい)(から) 文字列(もじれつ)表示(ひょうじ)

EL 11 implicit object

VariableType用途(ようと)
pageContextPageContextImplJSPの9つのimplicit Objectを取得(しゅとく)
pageScopeMap<String, Object>pageContext範囲(はんい) のデータを取得(しゅとく)
requestScopeMap<String, Object>Request範囲(はんい) のデータを取得(しゅとく)
sessionScopeMap<String, Object>Session範囲(はんい) のデータを取得(しゅとく)
applicationScopeMap<String, Object>ServletContext範囲(はんい) のデータを取得(しゅとく)
paramMap<String, String>Requestパラメータを取得(しゅとく)
paramValuesMap<String, String[]>複数(ふくすう) () のRequestパラメータを取得(しゅとく)
headerMap<String, String>Request Header情報(じょうほう)取得(しゅとく)
headerValuesMap<String, String[]>複数(ふくすう) () のRequest Header情報(じょうほう)取得(しゅとく)
cookieMap<String, Cookie>現在(げんざい) のrequestのCookie情報(じょうほう)取得(しゅとく)
initParamMap<String, String>web.xmlの<context-param>取得(しゅとく)

JSTLタグLib

機能(きのう) 範囲(はんい)Prefix
コアタグLibc
フォーマットfmt
関数(かんすう)fn

Servlet

階層図

  graph BT
    O{Object}
    SVL((Servlet))
    HS[/HttpServlet/]
    GS[/GenericsServlet/]
    Custom[カスタムServletプログラム]
    GS -.-> SVL
    HS --> GS --> O
    Custom --> HS
  1. Interface Servlet:Servletプログラムのアクセス規範(きはん)定義(ていぎ)
  2. abstract class GenericServlet:ServletConfigの使用(しよう) 方法(ほうほう)提供(ていきょう)
  3. abstract class HttpServlet:service()メソッドを実装(じっそう) し、リクエストの()()処理(しょり)実装(じっそう)
  4. カスタムServletプログラム:doGet()、doPost()をオーバーライドするだけ

Lifecycle

  1. Servletコンストラクタメソッドを実行(じっこう)
  2. init初期化(しょきか)実行(じっこう)
Step 1、2は初回(しょかい) アクセス() にServlet作成(さくせい) ()()()
  1. serviceメソッドを実行(じっこう)毎回(まいかい) ()() し)
  2. destroyメソッドを実行(じっこう) (プログラム停止(ていし) ()()() し)

Interface ServletConfig

Servletプログラムの設定(せってい) 情報(じょうほう)使用(しよう)

3つの役割(やくわり)

  • Servletプログラムの別名(べつめい) servlet-nameの(あたい)取得(しゅとく)
  • 初期化(しょきか) パラメータinit-paramを取得(しゅとく)
  • ServletContextオブジェクトを取得(しゅとく)

Interface ServletContext

  1. Servlet(じょう) () (ぶん) オブジェクト
  2. 1つのProjectに1つのServletContextオブジェクトインスタンスのみ
  3. ServletContextオブジェクトはDomain Object

4つの役割(やくわり)

  1. web.xmlの(じょう) () (ぶん) パラメータcontext-paramを取得(しゅとく)
  2. 現在(げんざい) のプロジェクトパスを取得(しゅとく)
  3. プロジェクトデプロイ() のServer(じょう)絶対(ぜったい) パスを取得(しゅとく)
  4. Mapのようにデータを保存(ほぞん)取得(しゅとく)

GET & POST リクエスト

GET

  1. <form> tag - method=get
  2. <a href=""> tag : ハイパーリンク
  3. <link> tag でcssを()()
  4. <script> tag でjsファイルを()()
  5. <img> tag で画像(がぞう)()()
  6. iframeでhtmlページを()()
  7. ブラウザのアドレスバーにアドレスを入力(にゅうりょく) してEnter

POST

  1. <form> tag - method=post

常用のResponse Status Code

  1. 200 - Request成功(せいこう)

  2. 302 - Requestリダイレクト

  3. 304 - ()()() みの画像(がぞう) やページ、ブラウザキャッシュから()()

  4. 404 - Requestアドレスエラー

  5. 500 - Server内部(ないぶ) エラー

Interface HttpServletRequest

RequestがTomcat Serverに(はい) ると、Tomcat ServerはHTTPプロトコル情報(じょうほう)解析(かいせき) してRequestオブジェクトにカプセル() し、service()メソッドに(わた) す。

常用(じょうよう) メソッド:

メソッド説明(せつめい)
getRequestURI()Requestのパスを取得(しゅとく)
getRequestURL()絶対(ぜったい) パスを取得(しゅとく)
getRemoteHost()Client(がわ) のIPアドレスを取得(しゅとく)
getHeader()Request Headerを取得(しゅとく)
getParameter()Requestパラメータを取得(しゅとく)
getMethod()Requestメソッド(GET/POST)を取得(しゅとく)

リクエストの転送

  sequenceDiagram
    Client(Browser)->>+Tomcat(Servlet_1): http://ip:port/プロジェクト名/servlet_1
    Tomcat(Servlet_1)->>Tomcat(Servlet_2): Servlet_1からServlet_2への操作をリクエスト転送と呼ぶ
    Tomcat(Servlet_2)->>+Client(Browser):Servlet_1 & Servlet_2で完全なビジネス機能を完成

リクエスト転送(てんそう)特徴(とくちょう)

  1. ブラウザのアドレスバーは変化(へんか) しない
  2. 1(かい) のリクエスト
  3. Request(ない) のDataを共有(きょうゆう)
  4. WEB-INFディレクトリ()転送(てんそう) 可能(かのう)
  5. Project(がい) には転送(てんそう) 不可(ふか)

リダイレクト

  sequenceDiagram
    Client->>Server: Request
    Server->>Client: Response 302 + Location: new_url
    Client->>Server: new_urlへのRequest
    Server->>Client: Final Response

リダイレクトの特徴(とくちょう)

  1. ブラウザのアドレスバーが変化(へんか) する
  2. 2(かい) のRequest
  3. Request(ない) のDataを共有(きょうゆう) しない
  4. WEB-INFディレクトリ() のリソースにアクセス不可(ふか)
  5. プロジェクト(がい) のリソースにアクセス可能(かのう)

JavaEE 三層アーキテクチャ

  flowchart LR
    W[Client / Browser]
    V[V / View]
    S[Service サービス]
    M[M / Model / DAO 永続化]
    DB[(MySQL / Oracle / ...etc.)]

    subgraph Database
        DB
    end

    subgraph JaveEE
        V
        S
        M
    end

    subgraph Browser
        W
    end

    W --> V -->|Controller / Servlet| S --> M --> DB
    DB --> M --> S -->|Controller / Servlet| V --> W
  • Browser:HTML、CSS、JS、JQuery
  • View:Servlet、Spring MVC、Struts
  • Service:Spring Framework
  • Model / DAO:JDBC、Hibernate