#jspファイル作りましょう
まずはひな形から
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ログイン画面</title>
</head>
<body>
</body>
</html>
1行目の<%@ ~ %>はjspファイルを記述するときのお約束で、それ以外は基本的にHTMLのように扱える
ではbody内を実装していくよ
<form action="/ServletApp/mypage" method="post">
name:<input type="text" name="name"><br>
password:<input type="text" name="password"><br>
<input type="submit" value="login">
</form>
以下は起動時の画面※現時点では起動しても何も表示されないよ
それでは順に解説
タグ名 | 要素名 | 説明 |
---|---|---|
form | action | submit要素をクリックしたときの遷移先 フォルダ構造にもよるが、基本的には http://localhost:8080/プロジェクト名/action名 |
method | getとpostの2種類から指定 get・・・遷移先のURLの最後に入力したパラメータがくっつく( /action名?name=hoge&password=foo といった感じ) post・・・くっつかない(今回使用する方) 使い分ける要点は後日記事にする |
|
input | type="text" | テキストフィールド |
name | サーバー側で入力データを取得するときのキー | |
input | type="submit" | formタグ内のデータをサーバーへ送信するボタン |
formのactionに指定するパスですが、 | ||
プロジェクト名=ServletApp
|
||
遷移させたいjsp=mypage.jsp
|
||
の時は/ServletApp/mypage と指定します |
||
#サーブレット作りましょう | ||
適当にパッケージを作成したらjavaファイルを新規作成 | ||
[スーパークラス]にHttpServletと入力して[参照]をクリック |
メソッド | 説明 | 用途 |
---|---|---|
doGet | jspのformタグのmethodにgetを指定するとこのメソッドが呼びだされる | 画面遷移時に実行したい主な処理 |
doPost | 〃にpostを指定すると呼び出されるとこのメソッドが呼び出される | 〃 |
destroy | サーブレット破棄時に動く処理 | ログ出力処理など |
init | 最初に動く処理 | 変数の初期化処理など |
doGetとdoPostは利用する方だけを実装しても動くが、method="post"を指定したのにdoGetしか実装してなかった・・・といった事を防ぐため、基本的には両方宣言する | ||
このとき、利用しない方のメソッド内にはdoXXX(req,res) を記述する |
||
そうすると下のような感じになる |
変数 | メソッド | 説明 |
---|---|---|
res | setCharacterEncoding(String charset) | jspから受け取ったパラメータを指定した文字コードに変換 |
〃 | addCookie(Cookie cookie) | クッキーを設定※後日解説 |
〃 | sendRedirect(String URL) | 指定したURLにリダイレクト(遷移) |
req | getParameter(String key) | jspのnameで指定した要素名の値を取得 |
〃 | getSession | セッションを取得(後日解説) |
〃 | setAttribute(String key,Object value) | jspに送る要素名と値を設定 |
〃 | getRequestDispacher(String jsppath) | 送りたいjspへのファイルパスを設定 |
具体的な実装内容がこちら |
・18行目 文字コードをUTF-8に設定する
・19、20行目 それぞれ引数にname、passwordを指定することで
name:<input type="text" name="name"><br>
password:<input type="text" name="password"><br>
↑の2つのテキストフィールドから入力値を取得できる
・22行目 パスワードにgoogleを入力していたらグーグルのページへ遷移させる
・24、25行目 次のjspに渡す要素の名前と値を設定する
(25行目のように、もとのjspには無い要素でも関係なく設定できる)
・26行目 次のjspの格納パスを拡張子付きで指定する
最後にforward(req,res)を忘れずにつなげること
#遷移先のjsp書きましょう
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>マイページ</title>
</head>
<body>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%
String name=request.getParameter("name");
List<String> list=new ArrayList<>();
list.add("Hello!");
%>
<%=name%>さん、<%=list.get(0)%>
</body>
</html>
説明のため、する必要性皆無なコードになっていますが許して
・javaのコードを書きたい ⇒ <% ~ %>で囲う
・変数の値を出力したい ⇒ <%= ~ %>で囲う
・javaのライブラリを使用したい ⇒ <%@ ~ %>で囲う
ちなみに、requestとresponseはライブラリの宣言をしなくても使えます