□技術メモ - POSTは何を送信しているか
※管理人の個人的な技術メモです。このページの内容を実行した結果について
管理人はいかなる責任も負いかねますのでご自身の責任でお試しください。
-----------------------------------------------------------
〇Tomcatの起動方法 3種類
・Eclipseによる環境構築について考える前に、事前知識として、
Tomcatを起動する方法として以下があることを確認します。
(1) Windowsのサービス、もしくはタスクバーのアイコンから起動する場合
(2) Eclipseのサーバーペインにて、ローカルホストのTomcatを右クリック→開始を選択する場合
(3) Eclipse上のTomcatネコのアイコンをクリックする場合
・(1)と(2)の起動はどちらかしかできないので注意すること。
・(3)のTomcatネコのアイコンはプロジェクトエクスプローラで選択可能なプロジェクトの内の1つを起動する。
ブレイクポイントを張ってデバッグ実行することも可能。
(※詳細は要確認)
○環境設定
・EclipseでTomcatのPluginを使用しない場合について考えます。(このページ298行目から)
・まずは、Java と Tomcat の環境設定について簡単に確認。
(詳細は 3rd.geocities.jp/tnoguchislg/java-env.txt を参照)
・JDKをインストールする。
・以下の環境変数を設定する。
JAVA_HOME : C:/Program Files/Java/jdk1.8.0_111(JDKのインストール先を設定)
Pathに追加 : %JAVA_HOME%\bin
・Javaの動作確認
以下のソースを同じ場所から以下のコマンドでコンパイルできれば問題ない。
javac HelloWorld.java
--------
HelloWorld.java
public class HelloWorld {
public static void main (String[] args) {
System.out.println("Hello,World!");
}
}
--------
・Tomcat7をインストールする
インストール先は C:/Tomcat7 とする。
・以下の環境変数を設定する
CATALINA_HOME : C:/Tomcat7(インストールしたフォルダを指定)
・サービスの開始と終了は、タスクバー → Tomcatのアイコンを右クリック → Start service / Stop service にて行う。
もしくは、サービス一覧から Apache Tomcat を選択して、開始/停止を選択する。
・動作確認
localhost:8080 → ロゴのある画面が表示されること。
localhost:8080/manager/html → Tomcat Webアプリケーションマネージャ に遷移すること。
-----------------------------------------------------------
まずはEclipseを使わず、コマンドラインを使う場合の
環境構築手順を確認します。
-----------------------------------------------------------
○ルートフォルダの設定
context名 : train
url指定 : /jr/getTrainNames
→
class : pkg1.getTrainNames を呼ぶようにする。
・以下のフォルダ群を作成すること。
--------
・C:/servlet/train を作成
・C:/servlet/train ←index.htmlを配置
・C:/servlet/train/jr ←今回はここに.jspを配置する
・C:/servlet/train/img ←画像等を配置
・C:/servlet/train/WEB-INF ←web.xmlを配置
・C:/servlet/train/WEB-INF/classes ←.classを配置
・C:/servlet/train/WEB-INF/classes/pkg1 ←.classを配置(package指定した場合)
・C:/servlet/train/WEB-INF/src ←.javaを配置
・C:/servlet/train/WEB-INF/src/pkg1 ←.javaを配置(package指定した場合)
・C:/servlet/train/WEB-INF/libs ←.jar等を配置
--------
○Tomcat 7.0 \ conf 内で、context別の設定を行う
・confフォルダ内において、context名.xml の追加、
および web.xml におけるURLパターンの追加が必要になる。
・以下の設定を行う。
--------
context名 train
ルートフォルダ "c:/servlet/train"
--------
・Tomcatのconfフォルダ内において、コンテキストのルートフォルダを設定する。
\Tomcat7\conf\Catalina\localhost ←train.xml を新規作成する。
train.xml
--------
--------
・web.xml を下記の様に設定する。
web.xml
--------
pkg1.getTrainNames
pkg1.getTrainNames
pkg1.getTrainNames
/jr/getTrainNames
--------
○初期画面を作成する
・index.html を作成する。
・getTrainNames.class を作成する。
・コンパイルは C:/servlet/train/WEB-INF/src に入って、下記のコマンドを実行する。
ソースと同じ場所に.classが生成されるので、これを .../classes/pkg1 に移動する。
javac -cp "C:/Tomcat7/lib/servlet-api.jar" pkg1/getTrainNames.java
・ソースの文字コードはデフォルトはSJIS。
もし、UTF-8でソースを記述する場合は、コンパイル時に文字コードの指定が必要になる。
文字コードをUTF-8に指定する場合のコマンドは以下のとおり。
javac -cp "C:/Tomcat7/lib/servlet-api.jar" -encoding UTF-8 pkg1/getTrainNames.java
--------
index.html(文字コードは windows-31j )
--------
getTrainNames.java(文字コードは MS932とする(要は windows-31j の事) )
package pkg1;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class getTrainNames extends HttpServlet {
public void doPost(
HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html; charset=windows-31j"); //レスポンスのエンコード
req.setCharacterEncoding("Windows-31J"); //リクエストのエンコード
PrintWriter out = res.getWriter(); //Writerの取得
HttpSession hs = req.getSession(true); //false:既存のsessionがない場合は新規作成しない
hs.setAttribute("hs1_attr1", "テスト1"); //セッションにAttributeを追加する
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/jr/js1.jsp"); //遷移先を指定する
rd.forward(req,res);
}
}
--------
js1.jsp(Eclipseの場合、文字コードは デフォルトを選択すれば、windows-31j が選択される)
<%@page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%>
<%@ page import="java.util.*" %>
<%--コンテンツをWindows-31Jにエンコードして出力--%>
<%--JSPファイル作成時の文字コード WindowsならWindows-31J--%>
タイトル
<%=(String)request.getParameter("title1")%>
戻る
<% Enumeration enm=request.getParameterNames(); %>
<% while (enm.hasMoreElements()) { %>
|
<% String strPrmName=(String)enm.nextElement(); %>
<% String[] strVals = request.getParameterValues(strPrmName); %>
<%=strPrmName + ":" + Arrays.toString(strVals)%>
|
<% } %>
|
<% String strwk = "hs1_attr1:" + session.getAttribute("hs1_attr1"); %>
<%=strwk %>
|
<%--postメソッドの場合:requestの値は明示的にセットする--%>
<%--actionにforwardを指定するとボタンと関係なく進んでしまうのでこれはムリ--%>
<%--
--%>
--------
js2.jsp(Eclipseの場合、文字コードは デフォルトを選択すれば、windows-31j が選択される)
<%@page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%>
<%@ page import="java.util.*" %>
<%--コンテンツをWindows-31Jにエンコードして出力--%>
<%--JSPファイル作成時の文字コード WindowsならWindows-31J--%>
<%--JSPからJSPに遷移する場合、Tomcat内の文字コードは "8859_1" なので、getParameterで2byte文字を取得する場合は文字コードの変換が必要になる--%>
js2
タイトル:
--------
-----------------------------------------------------------
○実行する
・localhost:8080/ を開く→ Manager App を選択 → アプリケーションにtrainが追加されていることを確認する。
・Tomcatを再起動する。もしくはTomcatのAPP一覧から train を選択して「再ロード」を実行する。
・train をクリック → localhost:8080/train/ に遷移して、初期画面が表示される。
・画面に値を入力して「送信」を押下すると、次の画面に値が渡されていることが分かる。
-----------------------------------------------------------
○ここまででわかること
・postメソッドで次のjspを呼び出すことが可能。
・Linkの場合は次の画面に入力フィールドの値を渡せない
・actionにforwardを指定すると即時実行されてしまう。ボタンを押したときに遷移するようにならない。
・js2.jspからブラウザの「戻る」で戻ってもjs2.jspの値を渡せない。js1.jspの値も画面遷移時の値に戻ってしまう。
(注意)
・JSPからJSPに遷移する場合、Tomcatの内部コードは "8859_1" なので、getParameterで2byte文字を取得する場合は文字コードの変換が必要になる。
以下は変換の例。
value=<%=new String(request.getParameter("name1").getBytes("8859_1"),"SHIFT-JIS")%>
・入力フォームに値をセットする場合、値の途中に半角スペースがあるとそこで入力が終了してしまうことに注意。
値全体をクォートで囲むことで回避すること。
-----------------------------------------------------------
Eclipseを使って環境構築する場合の
手順は以下の通り。
-----------------------------------------------------------
○Eclipseを使用する場合の手順の例
・上記と同じ train を作成する。
・JDK, JRE, Tomcat をインストールする。
・Eclipseを展開、Eclipse内にworkspaceフォルダを作成する。
・Pleadesを解凍して、features, plugins フォルダをEclipseの解凍フォルダに上書きする。
・cleanオプション付きのeclipse起動ショートカットを作成して、デスクトップなどに配置する。
eclipse.exe -clean とする。
・PleadesのreadMeを確認して、eclipse.ini の一番下に次の行を追加する。
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
・ネット接続可能ならヘルプ→新規ソフトウェアのインストールを行う。
・ウィンドウ→設定→Javaコンパイラ等各種設定を行う。
・プロジェクト・エクスプローラまたはパッケージ・エクスプローラで右クリック→「動的Webプロジェクト」を追加
プロジェクト名は「train」とする。
「web.xml デプロイメント記述子の生成」にチェックを入れて「次へ」を選択していくと、web.xmlが生成される。
・画面下側のServerタブを選択して、サーバにTrainを追加する。
Serverタブにおいて、サーバの追加、起動、停止、削除 の操作を何度か行って問題なく操作できるようになっておくこと。
・プロジェクトを右クリック→プロパティ→プロジェクト単位の各種設定を行う。
srcの配置は以下の通り
・srcを右クリックして新規→パッケージ→pkg1を追加
・pkg1に新規クラスを追加→getTrainNames.javaを追加
HttpServletクラスを認識しないエラーが発生している場合は、
クラスパスに以下を追加する。
Tomcat_X.X\lib\servlet_api.jar
・WebContentの下に以下を追加
index.html
jrフォルダを追加
・jrフォルダに以下を追加
js1.jsp
js2.jsp
・WEB-INFの下にweb.xmlがあるので、
, および のマッピングの指定を追加する。
を閉じる直前に以下を追加する。
web.xml に追加
--------
pkg1.getTrainNames
pkg1.getTrainNames
pkg1.getTrainNames
/jr/getTrainNames
--------
・Serverタブに、train を追加して、起動する。
ペイン上で、停止、削除、追加、起動 などの操作ができる。操作してみて思い出すこと。
・起動時にエラーがあればコンソールタブに表示されるので、必ず確認すること。
・localhost:8080/train/ を指定すると、index.html が表示される。
-------->以下保留
○追加予定
・js1.jspに、数値入力フィールドを追加
・JavaScriptで、数値判定関数を追加
○調査予定
・jspで第1画面→第2画面→第1画面と遷移した場合のそれぞれのrequest, sessonの内容
<--------