LoginSignup
0
0

More than 3 years have passed since last update.

【JavaServlet】千里の道も一歩から 二歩目

Last updated at Posted at 2020-05-27

jspファイル作りましょう

まずはひな形から

login.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内を実装していくよ

login.jsp
<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>

以下は起動時の画面※現時点では起動しても何も表示されないよ
servlet5.png
それでは順に解説

タグ名 要素名 説明
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と入力して[参照]をクリック
2020-05-25.png
[一致する項目]からHttpServletを選択して[OK]をクリック
2020-05-25 (2).png
クラスを作成したら、[ソース]-[メソッドのオーバーライド]の順にクリック
servlet6.png
[オーバーライドまたは実装するメソッドを選択]から、
「doGet」、「doPost」、「destroy」、「init(引数なし)」の4つを選択して[OK]をクリック
2020-05-25 (4).png
これでサーブレットで使うメソッドが追加される
メソッドの中身は消してOK
※レスポンス用の引数の命名は基本的に「res」なので、下の画像ように「resp」となっていたら「res」に直した方がいいかも
servlet7.png
まずメソッドから解説

メソッド 説明 用途
doGet jspのformタグのmethodにgetを指定するとこのメソッドが呼びだされる 画面遷移時に実行したい主な処理
doPost 〃にpostを指定すると呼び出されるとこのメソッドが呼び出される
destroy サーブレット破棄時に動く処理 ログ出力処理など
init 最初に動く処理 変数の初期化処理など

doGetとdoPostは利用する方だけを実装しても動くが、method="post"を指定したのにdoGetしか実装してなかった・・・といった事を防ぐため、基本的には両方宣言する
このとき、利用しない方のメソッド内にはdoXXX(req,res)を記述する
そうすると下のような感じになる
servlet8.png
では中身を書いていきましょう
主に使うのは下のやつ

変数 メソッド 説明
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へのファイルパスを設定

具体的な実装内容がこちら
servlet10.png

・18行目 文字コードをUTF-8に設定する
・19、20行目 それぞれ引数にname、passwordを指定することで

login.jsp
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書きましょう

mypage.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はライブラリの宣言をしなくても使えます

三歩目に続く

0
0
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
0