Development/JSP
[GET/POST Service Function] 웹 서버 구축하기 (12)
Go0G
2021. 12. 3. 17:13
개요
요청 Method에 따른 특화된 Method 이용하기
- service 객체 세분화: doGet(), doPost()
환경
- WAS Server: CentOS Linux release 7.9 - Tomcat 7.0 - JDK 1.8.0_312
관련 경로
servlet-api 라이브러리 | /[Tomcat Directory]/java/tomcat-servlet-api.jar |
ROOT Directory | /[Tomcat Directory]/tomcat/webapps/ROOT/ |
실습
컴파일
#javac -classpath /[Tomcat Directory]/java/tomcat-servlet-api.jar [Java File Name].java
#mv ./[Java File Name].class ../WEB-INF/classes/
#systemctl restart tomcat
샘플 페이지
GET_POST_TEST.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>POST_TEST PAGE</title>
</head>
<body>
<form action="GET_POST_TEST" method="GET">
<input type="submit", value="GET 요청">
</form>
<form action="GET_POST_TEST" method="POST">
<input type="submit", value="POST 요청">
</form>
</body>
</html>
doGet, doPost 메소드가 정의되어 있지 않기 때문에 super.service() 호출시 에러 발생
GET_POST_TEST.java
import javax.servlet.annotation.WebServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.lang.*;
@WebServlet("/GET_POST_TEST")
public class GET_POST_TEST extends HttpServlet{
@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
{
PrintWriter out = resp.getWriter();
if(req.getMethod().equals("GET")){
out.write("GET METHOD");
}
else if(req.getMethod().equals("POST")){
out.write("POST METHOD");
}
//super.service(req,resp); //주석 삭제 시 혀옹되지 않는 메소드(405) 에러 발생
}
}
doGet()와 doPost를 사용한 예제
GET_POST_TEST.java
import javax.servlet.annotation.WebServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.lang.*;
@WebServlet("/GET_POST_TEST")
public class GET_POST_TEST extends HttpServlet{
@Override
public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
{
PrintWriter out = resp.getWriter();
super.service(req,resp);
if(req.getMethod().equals("GET")){
out.write("GET METHOD\n");
}
else if(req.getMethod().equals("POST")){
out.write("POST METHOD\n");
}
super.service(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{
PrintWriter out = resp.getWriter();
out.write("do POST METHOD\n");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{
PrintWriter out = resp.getWriter();
out.write("do POST METHOD\n");
}
}
doGet()과 doPOST()를 이용하여 기존 페이지를 하나의 페이지로 병합
doGET_doPOST_calc.java
import javax.servlet.annotation.WebServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.lang.*;
import javax.servlet.http.Cookie;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
@WebServlet("/doGET_doPOST_calc")
public class doGET_doPOST_calc extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
Cookie[] cookies = request.getCookies();
String exp = "0";
if(cookies!=null){
for(Cookie c : cookies){
if(c.getName().equals("exp")){
exp = c.getValue();
break;
}
}
}
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.write("<!DOCTYPE html>");
out.write("<html>");
out.write("<head>");
out.write(" <meta charset=\"UTF-8\">");
out.write("<title>CALC TEST PAGE</title>");
out.write("<style>");
out.write("input{");
out.write("width: 50px;");
out.write(" height: 50px;");
out.write(" }");
out.write(".output{");
out.write(" height: 50px;");
out.write("background: #e9e9e9;");
out.write("font-size: 24px;");
out.write("font-weight: bold;");
out.write("text-align: right;");
out.write("padding: 0px 5px;");
out.write("}");
out.write("</style>");
out.write("</head>");
out.write("<body>");
out.write("<form method=\"post\">"); //자신의 페이지로 요청하기 때문에 action 불필요
out.write("<div>");
out.write("<label>계산기</label><br> ");
out.write("</div>");
out.write("<table>");
out.write("<tr>");
out.printf("<td class=\"output\" colspan=\"4\">%s</td>",exp);
out.write("</tr>");
out.write("<tr>");
out.write("<td> <input type=\"submit\" name=\"operator\" value=\"CE\"/></td>");
out.write("<td> <input type=\"submit\" name=\"operator\" value=\"C\"/></td>");
out.write("<td> <input type=\"submit\" name=\"operator\" value=\"BS\"/></td>");
out.write("<td> <input type=\"submit\" name=\"operator\" value=\"/\"/></td>");
out.write("</tr>");
out.write("<tr>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"7\"/></td>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"8\"/></td>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"9\"/></td>");
out.write("<td> <input type=\"submit\" name=\"operator\" value=\"*\"/></td>");
out.write("</tr>");
out.write("<tr>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"4\"/></td>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"5\"/></td>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"6\"/></td>");
out.write("<td> <input type=\"submit\" name=\"operator\" value=\"-\"/></td>");
out.write("</tr>");
out.write("<tr>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"1\"/></td>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"2\"/></td>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"3\"/></td>");
out.write("<td> <input type=\"submit\" name=\"operator\" value=\"+\"/></td>");
out.write("</tr>");
out.write("<tr>");
out.write("<td></td>");
out.write("<td> <input type=\"submit\" name=\"value\" value=\"0\"/></td>");
out.write("<td> <input type=\"submit\" name=\"dot\" value=\".\"/></td>");
out.write("<td> <input type=\"submit\" name=\"operator\" value=\"=\"/></td>");
out.write("</tr>");
out.write("</table>");
out.write("</form>");
out.write("</body>");
out.write("</html>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
Cookie[] cookies = request.getCookies();
String value = request.getParameter("value");
String operator = request.getParameter("operator");
String dot = request.getParameter("dot");
String exp = "";
if(cookies!=null){
for(Cookie c : cookies){
if(c.getName().equals("exp")){
exp = c.getValue();
break;
}
}
}
if(operator != null && operator.equals("=")){
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
try{
exp = String.valueOf(engine.eval(exp));
}
catch(ScriptException e){
e.printStackTrace();
}
}
else{
exp += (value == null)?"":value;
exp += (operator == null)?"":operator;
exp += (dot == null)?"":dot;
}
Cookie expCookie = new Cookie("exp",exp);
if(operator != null && operator.equals("C")){ //쿠기 삭제 분기
expCookie.setMaxAge(0);
}
expCookie.setPath("/doGET_doPOST_calc"); //Path 한정
response.addCookie(expCookie);
response.sendRedirect("doGET_doPOST_calc"); //자기 자신으로 리다이렉트
}
}
Reference
더보기
[1] https://www.youtube.com/watch?v=arB7sQ9S7h0&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=39
[2] https://www.youtube.com/watch?v=TSSKJ90t_T0&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=40