【初心者向け/ITスクール37日】Servletの基礎について
はじめに
今日は、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メッソドが実行されます。
@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>");
}
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実習
<!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>
//Servlet doGet
int x = Integer.parseInt(request.getParameter("x"));
int y = Integer.parseInt(request.getParameter("y"));
int result = x + y;
Post実習
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);
}
}
<!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