パラメータを受け取る/Tomcat/Eclipse (Debian11.4.0)

2022/7/29


Myservletでリクエストパラメータを受け取る

1.index.htmlを修正
つくったばかりのindex.htmlだが、parameter.htmlではなく、Myservletへリクエストパラメータを渡すように修正する。
修正はわずかだ。
myapp

2.サーブレットMyservletを修正
テキストを表示しただけのサーブレットだったので、すこしはサーブレットらしいことをしてもらおう。
Myservlet.javaに加筆する。
・部屋で検索(method="get")でリクエストパラメータを受け取るには最初に作ったdoGetメソッドを修正する。
・電話番号で検索(method="post")でリクエストパラメータを受け取るためにdoPostメソッドを追加する。
myapp
package myapp;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class Myservlet extends HttpServlet {
	String tel="";
	String room="";
	String name="";
	String submit="";
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		tel=req.getParameter("tel");
		name=req.getParameter("name");
		room=req.getParameter("room");
		submit=req.getParameter("submit");

		resp.setContentType("text/html; charset=UTF-8");
		java.io.PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Myservletでリクエストパラメータを表示</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<body>");
		out.println("<h2>parameter:[doGet]</h2>");
		out.println("tel:" + tel + "<br>");
		out.println("name:" + name + "<br>");
		out.println("room:" + room + "<br>");
		out.println("submit" + submit + "<br>");
		out.println("</body>");
		out.println("</html>");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		tel=req.getParameter("tel");
		name=req.getParameter("name");
		room=req.getParameter("room");
		submit=req.getParameter("submit");

		resp.setContentType("text/html; charset=UTF-8");
		java.io.PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Myservletでリクエストパラメータを表示</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<body>");
		out.println("<h2>parameter:[doPost]</h2>");
		out.println("tel:" + tel + "<br>");
		out.println("name:" + name + "<br>");
		out.println("room:" + room + "<br>");
		out.println("submit" + submit + "<br>");
		out.println("</body>");
		out.println("</html>");
	}	
}

動作確認

index.htmlでmethod="post"と記述したフォームform2のリクエストパラメータが表示できた。
index.htmlでmethod="get"と記述したフォームform1のリクエストパラメータも表示できている。
index.html中でリクエストパラメータを設定しなかった部分はnullとなっている。
電話番号で検索(postメソッド)部屋で検索(getメソッド)
myapp myapp
myapp myapp

Myservlet.javaをよく見るとdoPost()メソッドとdoGet()メソッドはとてもよく似ている。 ハッキリ言ってかなり残念なコードだ。
もう少しどうにかしたい。つぎの各項目を解決しよう。
package myapp;

import java.io.IOException;
import java.util.Enumeration;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class Myservlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html; charset=UTF-8");
		java.io.PrintWriter out = resp.getWriter();
		out.println(makeHTML("Myservletでリクエストパラメータを表示","<h2>parameter:[doGet]</h2>" + showMyParameter(req)));
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html; charset=UTF-8");
		java.io.PrintWriter out = resp.getWriter();
		out.println(makeHTML("Myservletでリクエストパラメータを表示","<h2>parameter:[doPost]</h2>" + showMyParameter(req)));
	}
	
	private String makeHTML(String title, String body) {
		return "<html>"
			+"<head><title>" + title + "</title></head>"
			+"<body>" + body + "<body>"
			+"</html>";
	}
	
	private String showMyParameter(HttpServletRequest req) {
		String param;
		String msg="<table border='1'><tr><th>key</th><th>値</th></tr>";
		Enumeration<String> enu = req.getParameterNames();
		while(enu.hasMoreElements()) {
			param = (String)(enu.nextElement());
			msg += "<tr><td>"+param + "</td><td>";
			String values[]=req.getParameterValues(param);
			for(int i=0; i<values.length;i++) 
				msg+= (i==0?values[i]:"."+values[i]);
			msg+="</td></tr>";
		}
		msg+="</table>";
		return msg;
	}
}

リクエストパラメータを扱うために、つぎのような処理をした。
電話番号で検索(postメソッド)部屋で検索(getメソッド)
myapp myapp


method="get",method="post"どちらでもリクエストパラメータを取得できるようになった。
つぎはリクエストパラメータを加工するためにJavaBeansをつくる。