☕
[Servlet]Echo機能の実装(リクエストパラメータ非表示ver.)
◆前回
こちらの続きです
◆はじめに
今回も、Echo機能の実装です。
本記事で紹介するプログラムを作成した後に、
以下のURLへアクセスします。
テキストボックスに文字列を入力し、
「送信」ボタンを押します。
すると、送信した文字列がServletで画面上に返却されます。
前回との違いですが、
リクエストパラメータがURLに表示されなくなりました。
前回のソースコードに幾つか変更を加えたので、確認していきます。
それでは、どうぞ。
◆実行環境について
※本記事では、eclipseは以下のバージョンを使用しています。日本語化はしていません。
◆事前準備
省略します。
前回と同じです。
そちらを参考にしてください。
◆手順
①「echo.jsp」に記述するコード
「echo.jsp」に
ブラウザに表示される入力ボックスと送信ボタンなど記述します。
JSTLを使用しています。@taglibの箇所などです。
echo.jsp
<%@page language="java" contentType = "text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page isELIgnored= "false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- ここ (こちらの方がしっくり来たので。ただの名称変更。) -->
<title>Echo機能</title>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<!-- ここ (こちらの方がしっくり来たので。ただの名称変更。) -->
<h3>Echo機能</h3>
<!-- ここ methodで、「post」を記述) -->
<form action="echo" method="post">
<br />入力してください : <input type="text" name="m" /><br />
<input type="submit" /> <br />
</form>
<br />
<!-- ここ (messageの前にrequestScopeを追加) -->
<c:if test="${ not empty requestScope.message }">
入力された文字は、「${ requestScope.message }」です。
</c:if>
</body>
②「EchoServlet.java」に記述するコード
「EchoServlet.java」に、
EchoServletの内容を記述します。
@WebServlet("/echo")は、アクセスする際のURIです。
EchoServlet.java
package input;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(urlPatterns = {"/echo"}) //ここ urlPatternsを追加
public class EchoServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request , HttpServletResponse response)throws ServletException,
IOException {//ここ doGet→doPost
equest.setCharacterEncoding("UTF-8");//ここ追加。文字化け防止のエンコード。
String message = request.getParameter("m");
System.out.println(message);
request.setAttribute("message",message);
RequestDispatcher dispatcher = request.getRequestDispatcher("echo.jsp");
dispatcher.forward(request, response);
}
}
③Webブラウザからアクセスし、Echo
以下のURLから、アクセスします。
以下のような画面が出たら、
Echoさせる文字を入力します。
そして、「送信」ボタンを押しましょう。
送信した文字列が表示されたら成功です。
また、Eclipseのコンソールにも、
以下のように、出力されているでしょう。
今回は、URLの「/echo」の後に、
「?m="入力文字列"」のリクエストパラメータが表示されません。
変更点で重要だったものは、以下の二点です。
echo.jspでは、
formにmethod属性の"post"を追加しました。
何も記述してない場合は、自動的にmethod属性は"get"になります。
echo.jsp
<form action="echo" method="post">
EchoServlet.javaでは、
doGetをdoPostに変更し,doPostメソッドをオーバーライドしています。
postで投げられたデータをdoPostで受け取ることができます。
EchoServlet.java
@Override
protected void doPost(HttpServletRequest request , HttpServletResponse response)throws ServletException,
IOException {
"Get"と"Post"の違いですが、表面的には同じですが、渡す仕組みが全く異なります。
"Get"の場合は、formで取得した情報を、URLに付与し、doGetで取得しています。
"Post"の場合は、formで取得した情報は、HTTPプロトコルで送信し、doPostで取得します。
なので、セキュリティ的にPOSTの方が安心そうです。
ただHTTP通信では、BODY部に平文で入っているので簡単に見られてしまいます。
なので、通信プロトコルにはHTTPSを使い暗号化するようにします。
◆さいごに
いかがだったでしょうか?
ServletでEcho機能の実装についてでした。
doPostの方が今後、使いそうですね。
話は変わりますが、
「Applet」
というのが、昔は、いや、今も、あります。
少し触れてみた記事を参考までに
貼っておくので興味があればどうぞ。
それでは!
◆参考
本記事は、以下の書籍を大いに参考にしています。
より詳しく知りたい方は、どうぞ。
Discussion