マッタク ベンキョウ シテ イナカッタ ワケジャ ナイデスヨ、ブログ カク ジカンガ ナカッタ ダケ ナンダカラネ。
ってことで、今日から会社でJSP/Servletを使ったWebアプリのお勉強を始めたので、そのことをメモ程度にまとめてみる。
【やること】
Eclipseでプロジェクトを立ち上げて、JSP/ServletのWEBアプリを作る。
WEBアプリは、「input.jsp」で文字を入力し送信ボタンを押すと、「input.java(サーブレット)」で受けて、それを「InputView.jsp」で表示させる。
入力する文字に日本語があっても、文字化けをしないように注意すること。
【プロジェクトの立ち上げ】
・「ファイル」→「新規作成」
・「新規プロジェクト」が出てくるので、「動的Webプロジェクト」を選択し「次へ」をクリック
・プロジェクト名には「ServletTest」、ターゲットランタイムは「Apache Tomcat5.5」、動的Webモジュールバージョンは「2.4」を選択し「次へ」をクリック。※この辺は会社でやったときと違うかも。。。
・「デフォルト出力フォルダ」を「WebContent\WEB-INF\classes」にし「次へ」をクリック
・次の画面はデフォルトのまま「完了」をクリック
【パッケージの作成】
・「Java Resouces」の下の「src」を右クリックし「新規」→「パッケージ」
・パッケージ名はとりあえず「jp.co.shamei_hoge.servlettest」とでもしとく(PKG名にはハイフンは使えないらしい。アンダーバーで代用)
【Servletを作ってみる】
・「jp.co.shamei_hoge.servlettest」を右クリックし「新規」→「サーブレット」を選択。クラス名は「input」とでもして「次へ」
・次の画面はデフォルトのまま「次へ」
・次の画面は「スーパークラスからの~」「継承された~」「doPost」を選択し「完了」を選択。※他のオプションは後述予定(予定、予定、予定・・)
・この時点でweb.xmlを開くと、「input」に関する記載があるはず。確認。(web.xmlも少し勉強した方がよさそうだね)
で、ここまでできたら、ソースを書いていきましょうと。
【まずは入力フォーム「input.jsp」】
<%@ page language="java" contentType="text/html; charset=windows-31j"
pageEncoding="windows-31j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="input">
<input type="text" name="input"><br><br>
<button type="submit">送信</button><br><br>
</form>
</body>
</html>
念のため書いておくと、「action="input"」の部分は飛ばし先のServlet名。
【サーブレット「input.java」】
package jp.co.shamei_hoge.servlettest;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class input
*/
public class input extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public input() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//エンコーディング(パラメータをもらう前に行うこと!)
request.setCharacterEncoding("Shift_JIS");
String param = request.getParameter("input");
request.setAttribute("msg", param);
request.getRequestDispatcher("/InputView.jsp").forward(request, response);
}
}
自動生成された物に追加していったと。
ソース中のコメントにも書いたけど「request.setCharacterEncoding("Shift_JIS")」は、パラメータをもらってくる前に書くこと。
「request.getParameter("input")」で、input.jspから送られてきたinputパラメータの内容を取得(&String param変数に代入)。
「request.setAttribute("msg",param)」で、第一引数にデータ名、第二引数にデータ値を指定し、スコープにデータを登録します。すでにデータ名が存在する場合は、新しく指定されたデータ値が上書きされます。(Javaの道より引用)
最後の行で、forwardメソッドを使用し、InputView.jspへフォワードします。引数に指定されたrequestオブジェクトを通し、フォワード先のプログラムでrequestスコープのデータを取得できます。(またもやJavaの道より引用)
【サーブレット「InputView.jsp」】
<%@ page language="java" contentType="text/html; charset=windows-31j"
pageEncoding="windows-31j"%>
<%
String msg = (String)request.getAttribute("msg");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
これはJSPです。<br>
input.jspで入力された文字⇒<b><%=msg %></b>
</body>
</html>
String msgのところでパラメータを取得するときにStringにキャストしてあげなきゃ行けないところに注意(なんでだっけ?説明してもらったけど忘れた・・)。
こんな感じ。
疲れたから今日はこのくらいにしておこうかな。
あとはdoPost、doGet、Serviceの説明とか教わったからその辺も近々纏めなくちゃか。
あと自分はエンコーディングをバイト列に戻してそれを再度Shift-JISに直すという非効率な事をやっていたことの説明とかもかな。
でもねますノシ
〔2011/10/12追記〕
doGet、doPostの説明は以下のページがいい感じかも。
http://itpro.nikkeibp.co.jp/article/COLUMN/20050901/220438/
http://www.atmarkit.co.jp/fjava/rensai2/jspservlet11/jspsevlet11_1.html
0 件のコメント:
コメントを投稿