【Servlet & JSP 】リクエストパラメーターを取得する
目次
ブラウザ(ユーザー)から送信されるリクエストパラメータの値を
サーブレットクラスとJSPファイルそれぞれで受け取る方法を解説します。
サーブレットクラスでリクエストを受け付ける
送信先のサーブレットクラスのメソッド内で、
HttpServletRequestクラスのrequestインスタンスのメソッドを呼び出す。
リクエストパラメータの文字コードを指定する。
request.setCharacterEncoding(送信元HTMLの文字コード);
request.setCharacterEncoding(送信元HTMLの文字コード);
名前を指定してリクエストパラメータの値を取り出す。
String name = request.getParameter(パラメータ名);
※文字コードを指定しないと表示先で文字化けの原因となります。
post送信したユーザ名とパスワードを受け取る例
【ログイン情報を送信する jspファイルのフォーム 】
1 2 3 4 5 |
<form action="/example/Login" method="post"> ユーザー名<input type="text" name="name"></label> パスワード<input type="password" name="password"></label> <button type="submit">ログイン</button> </form> |
【 リクエストを受け付けるサーブレットクラス 】
postリクエストはdoPostメソッドで処理を受け付ける。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@WebServlet("/Login") public class Login extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String password = request.getParameter("password"); User user = new User(name, password); LoginLogic loginLogic = new LoginLogic(); boolean isLogin = loginLogic.execute(user); if(isLogin) { HttpSession session = request.getSession(); session.setAttribute("loginUser", user); } RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/loginResult.jsp"); dispatcher.forward(request, response); } } |
JSPファイルでリクエストを受け付ける
※リクエスト先がjspファイル
requestオブジェクトが
あらかじめJSPファイルのスクリプト式、スクリプトレットに定義されている。
1 2 3 4 5 6 |
<% request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); %> <!DOCTYPE html> <html>~ |
(補足)GETリクエストでリクエストパラメータを送信する場合
補足としリンクURLにリクエストパラメータを渡す方法をメモします。
<a href=“/example/(送信先パス)?action=done“>登録する</a>
?(クエスチョンマーク)パラメータ名=値として送信先のパスの直後に付ける。
こちらを利用すれば、フォーム送信以外でリクエストパラメータを送信することができます。
(同じ仕組みを利用してformのaction属性でもパラメータを付与する事も出来ます)
URLに付与したパラメータの有無によって処理を切り分ける例
【 JSPファイル 】
aタグにリクエスト先のURLとリクエストパラメータ、actionを指定。
1 2 |
<a href="/example/RegisterUser">戻る</a> <a href="/example/RegisterUser?action=done">登録する</a> |
【 送信先のサーブレットクラス 】
(doGetメソッドでリクエストを受け付ける)
リクエストパラメータ actionの有無で処理を分けている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@WebServlet("/RegisterUser") public class RegisterUser extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String forwardPath = null; String action = request.getParameter("action"); if(action == null) { forwardPath = "/WEB-INF/jsp/registerForm.jsp"; } if(action != null && action.equals("done")) { HttpSession session = request.getSession(); User registerUser = (User)session.getAttribute("registerUser"); new RegisterUserLogic().execute(registerUser); session.removeAttribute("registerUser"); forwardPath = "/WEB-INF/jsp/registerDone.jsp"; } RequestDispatcher dispatcher = request.getRequestDispatcher(forwardPath); dispatcher.forward(request, response); } |