[Servlet]Echo機能の実装(リクエストパラメータ非表示ver.)

2022/06/08に公開


◆前回

https://zenn.dev/nakohama/articles/6ae505aaf8c6d2

こちらの続きです


◆はじめに

今回も、Echo機能の実装です。
本記事で紹介するプログラムを作成した後に、
以下のURLへアクセスします。

http://localhost:8080/InputFunction/echo.jsp

テキストボックスに文字列を入力し、
「送信」ボタンを押します。
すると、送信した文字列が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から、アクセスします。

http://localhost:8080/InputFunction/echo.jsp

以下のような画面が出たら、
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」

というのが、昔は、いや、今も、あります。


少し触れてみた記事を参考までに
貼っておくので興味があればどうぞ。

https://zenn.dev/nakohama/articles/a4f05ef6f26dbe

それでは!


◆参考

本記事は、以下の書籍を大いに参考にしています。
より詳しく知りたい方は、どうぞ。

https://www.amazon.co.jp/dp/4797362596

Discussion