📚

【初心者向け/ITスクール37日】Servletの基礎について

2023/08/31に公開

はじめに

今日は、ITスクールに通った36日目の日で、今日学んだ知識を記事にシェアしたいと思います。本記事が、ITを勉強を始めた方々にもロードマップになればいいと思います。

Servlet

36日目は、Servletについて勉強しました。

ServletとはWEBプログラミングにおいて、クライアントのRequestを処理し、その結果を処理するCGI(Common Gateway interface)です。

GCIとは、WEBサーバーとプログラム間の交換方式で、どんなプログラム言語でも具象ができ、
GET,POSTの方法でクライアントのデーターを伝達し、そのデーターによった結果をクライアントに転送することです。

Servletの構造

前述したどおり、Servlet自体はテンプレートのようにインタフェースの役割を行います。
我々が作成するServletは全部Servlet(HttpServlet)を継承し、我々がオーバーライドしたサブクラスのServletです。

例えば、HyonServletというServletがあると仮定します。
クライアントからrequestに合わせ、TomcatがHyonServletを得たいrequestがある場合、
TomcatがHyonServletをクリアントに送ります。

HyonServletを生成し、無限ループを回しているため、クリアントのrequestがあったとたんTomcatがHyonServletの内容をクライアントに転送します。
そして、browserがその文字列を解析し、レンダリングします。
このようなプログラミングをevent-driven-programmingといいます。

javaを活用できますので、ただのWEBページを送るのだけでなく、演算、条件文などの結果をリアルタイムで演算し、その結果を文字列かされたhtml,cssタグで送りますとtomcatはクライアントに結果を送る仕組みです。


import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// @XXX: Annotation
@WebServlet("/LearnServlet") // 
public class LearnServlet extends HttpServlet {
    // 作業バージョンの表記(固有のシリアルナンバー)
    private static final long serialVersionUID = 1L;
       
    // このLearnServletオブジェクトを生成するのがTomcatです。
    public LearnServlet() {
        super();
    }

  
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}


こちらのように基本、コードを設定することができます。
getのrequestになった場合は、doGetのメソッドが、doPostのrequestになった場合はdoPostメッソドが実行されます。

HyonServlet
@WebServlet("/HyonServlet")
public class HyonServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	PrintWriter out = response.getWriter();
	out.print("<html>");
	out.print("<head><title>Hello!</title><meta charset='UTF-8'></head>'");
	out.print("<body>");
	for(int i=0; i<5; i++) {
	out.print("<marquee>Hello !</marquee>");
	}
    	out.print("</body>");
	out.print("</html>");
}

HyonServlet
response.setCharacterEncoding("UTF-8");
		
//?name=value&name=value&....
String language = request.getParameter("lang");
		
PrintWriter out = response.getWriter();
   out.print("<html>");
   out.print("<head><title>Hello!</title><meta charset='UTF-8'></head>");
   out.print("<body>");
   out.print("<h1>");
   if(language.equals("korean")){
	out.print("네");
   }
   else if(language.equals("english")){
	out.print("yes");
   }
   else {
	out.print("??");
   }
   out.print("</h1>");
   out.print("</body>");
   out.print("</html>");
}

Get実習

index
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <a href="Calculator?x=10&y=5">10,5 계산하기</a>
   <hr>
    <form action="Calculator">
        x : <input name="x"> <br>
        y : <input name="y"> <p>
        <button> 계산 </button>
    </form>
</body>
</html>
Calculator

//Servlet doGet
int x = Integer.parseInt(request.getParameter("x"));
int y = Integer.parseInt(request.getParameter("y"));
int result = x + y;


Post実習

Output
package com.hyon.aug312.main;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Output")
public class Output extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");

	PrintWriter out = response.getWriter();
	String input = request.getParameter("input");
		
	out.print("<html>");
	out.print("<head><title>Hello!</title><meta charset='UTF-8'>");
	out.print("</head>");
	out.print("<body>");
	out.print(input);
	out.print("</body>");
	out.print("</html>");

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		doGet(request, response);
	}

}
index
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Insert title here</title>
  </head>
  <body>
    <a href="Output">문자 출력하기</a>
    <hr />
    <form action="Output" method="post">
      <input type="text" name="input" placeholder="문자를 입력하세요"/> <br />
      <input type="submit" value="문자열을 제출해주세요"  />
    </form>
  </body>
</html>

課題

週末、静的ページを作成し、入力されたデーターをServletを使ってリターンすることがありました。こちらが一人で勉強したflex boxを活用したレイアウトです。
掲示板より良い練習になると思ったので、これを練習したいと思います。

Discussion