0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JSP Servlet

Posted at

自分の為のまとめ:writing_hand:
Eclipseを使用しています

JSPとServlet

JSPとServletはどちらもJavaを使ってWebアプリケーションを開発するため技術。どちらも密接に連携して動作する。

JSPとServletの違い

特徴    JSP サーブレット
役割 プレゼンテーション層(ビュー)を担当 ビジネスロジック層(コントローラー)を担当
記述 HTMLにJavaコードを埋め込む 純粋なJavaコードで記述
適用場面 HTMLの見た目やデザインを動的に生成 リクエスト処理やビジネスロックを実装
実装方法 JSPファイルとして記述 Javaクラスとして記述
変換 サーブレットに変換されて実行 そのままSサーブレットとして実行

JSPとサーブレットを連携

連携させるには、サーブレットからJSPにリクエストをフォワードする方法をしよう。サーブレットで処理した結果をJSPに渡し、JSPがそれをビューとしてユーザに提供する。

①サーブレットでリクエスト処理をする
サーブレットはHTTリクエストを受け取り、ビジネスロックやデータ処理を行う
②リクエスト属性にデータを設定する
サーブレットで処理したデータをreauestオブジェクトの属性として保存する。
③JSPにリクエストをフォワードする
サーブレットはRequestDispatcherを使って、処理結果をJSPにフォワードする。JSPがそのリクエストを受け取り、保存されたデータを使ってHTMLに生成する。

値の受け渡し

JSPとサーブレットの間で値を受け渡すには、スコープによって値の共有を行う

リクエストスコープ(Request Scope)

・対象
単一のHTTPリクエスト
・説明
設定されたデータは、そのリクエスト内でのみ有効。サーブレットからJSPにデータを渡す場合などに使われる。次のリクエストには引き継がれない
・例
ユーザーがフォームに入力したデータを、サーブレットで処理してJSPで表示する場合

// 値を設定(セッター)
request.setAttribute("スコープ名",);
()
request.setAttribute("name", "山田太郎");


// 値を受け取る(ゲッター)
データ型 変数名 = (データ型)request.getAttribute("スコープ名")
()
String name = (Stirng)request.getAttribute("name")

セッションスコープ(Session Scope)

・対象
単一のユーザセッション
・説明
設定されたデータは、特定のユーザーがブラウザを閉じるまで、またはセッションがタイムアウトするまで保持される。ログイン情報やユーザーの状態管理に使われる
・例
ユーザーのログイン状態を保持し、異なるページ間でその状態を利用する場合

// 値を設定(セッター)
HttpSession session = request.getSession();
session.setAttribute("スコープ名", );
()
HttpSession session = request.getSession();
session.setAttribute("name", "山田太郎");


//値を受け取る(ゲッター)
データ型 変数 = (データ型)session.getAttribute("スコープ名", );
()
String name = (String)session.getAttribute("name",山田太郎)

アプリケーションスコープ(Application Scope)

・対象
Webアプリケーション全体
・説明
設定されたデータは、アプリケーション全体で共有される。サーバーが停止するか、アプリケーションが再展開されるまでデータが保持される。
・例
全ユーザーで共有するデータやアプリケーション全体の設定情報

//値を設定する(ゲッター)
getServletContext().setAttribute("スコープ名", );
()
getServletContext().setAttribute("appName", "MyWebApp");


//値を受け取る(セッター)
データ型 変数名 = (データ型)getServletContext().getAttribute("スコープ名");
()
String appName = (String)getServletContext().getAttribute("appName");

ページスコープ(Page Scope)

・対象
単一のJSPページ
・説明
設定されたデータは、現在のJSPページ内でのみ有効。別のサーブレットやJSPには影響されない 
・例
JSPページ内で一時的に使用するデータ

// 値を設定(セッター)
pageContext.setAttribute("greeting", "こんにちは!");
()
pageContext.setAttribute("pageTitle", "ホームページ");


// 値を受け取る(ゲッター)
String greeting = (String)pageContext.getAttribute("greeting");
()
String pageTitle = (String)pageContext.getAttribute("pageTitle");

コードを記述してみる

サーブレットからJSPを呼び出す。

//サーブレットファイル(TestServlet.java) 
import java.io.IOException;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	 //RequestDispatcherオブジェクトを取得
	 RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/test.jsp");
	 
	 // jspファイルにリクエストをフォワードする。
	 dispatcher.forward(request,response);
	}
}
// jspファイル(test.jsp)
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>表示</title>
</head>
<body>
 <p>JSPとサーブレットの連携<p>
</body>
</html>

値の受け渡し

//サーブレットファイル(TestServlet.java) 
import java.io.IOException;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	 //	nameというスコープ名に "山田太郎" という値を設定
     request.setAttribute("name", "山田太郎");
     
	 //RequestDispatcherオブジェクトを取得
	 RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/test.jsp");
	 
	 // jspファイルにリクエストをフォワードする。
	 dispatcher.forward(request,response);
	}
}
// jspファイル(test.jsp)
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>名前表示</title>
</head>
<body>
 <p>値の受け渡し<p>
 こんにちは<%= (String)request.getAttribute("name") %>さん
</body>
</html>

ログイン画面

LoginServlet.java
import java.io.IOException;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	request.setCharacterEncoding("UTF-8");
	response.setContentType("text/html; charset=UTF-8");
	
	String message = null;
	String id = request.getParameter("id");
	String pass = request.getParameter("pass");
	
	if(id.equals("test") && pass.equals("1234")) {
		message = "ようこそ" + id + "さん";
	} else {
		message = "IDまたはパスワードが違います";
	}
	
	request.setAttribute("message", message);
	
	RequestDispatcher dispatch = request.getRequestDispatcher("/jsp/message.jsp");
	dispatch.forward(request, response);
	}
}
// login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>ログイン表示画面</title>
</head>
<body>
 <h2>ログイン画面</h2>
 <form method="post" action="/Sample/LoginServlet">
   I D :<input type="text" name="id"><br><br>
  パスワード:<input type=text name="pass"><br><br>
  <input type="submit" value="送信"> 
 </form>
</body>
</html>
// message.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>ログイン結果</title>
</head>
<body>
 <h2>ログイン結果</h2>
 <%= (String)request.getAttribute("message") %>
</body>
</html>
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?