GET 방식
package org.zerock.w1.calc;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "inputController", urlPatterns = "/calc/input")
public class InputController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("InputController...doGet...");
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/calc/input.jsp");
dispatcher.forward(req,resp);
}
}
POST 방식
package org.zerock.w1.calc;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "calcController", urlPatterns = "/calc/makeResult")
public class CalcController extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String num1 = req.getParameter("num1");
String num2 = req.getParameter("num2");
System.out.printf("num1: %s",num1);
System.out.printf("num1: %s",num2);
}
}
반복되어 결과를 보여줄수 있기 때문에 HttpServletResponse 의 sendRedirect() 메소드를 이용한다.

POST방식의 처리 후에 바로 다른 주소로 브라우저가 이동하기 때문에 반복적으로 POST 호출이 되는 상황을 막을 수 있고, 사용자의 입장에서도 처리가 끝나고 다시 처음단계로 돌아간다는 느낌을 주게 된다.
: 컨트롤러에 필요한 기능이나 데이터를 처리해주는 존재, 시스템 전체 구조로 보면 컨트롤러와 뷰를 제외한 남은 부분
: 여러개의 데이터를 묶어서 하나의 객체로 전달하는 것
대부분 Java Beans 형태로 구성하는 경우가 많다.
- 생성자가 없거나 반드시 파라미터가 없는 생성자 함수를 가지는 형태
- 속성(멤버변수)는 private로 요청
- getter/setter를 제공할 것
EL (Expression Language)
: JSP 에서 간단한 표현식을 이용해서 데이터를 출력하는 용도
제어문이나, 반목문 같이 식이 아닌 문을 처리하기 위해서는 JSTL 라이브러리 필요
JSTL(JavaServer Pages Standard Tag Library)
:
1. 반복문 <c:forEach>
var : EL에서 사용할 변수이름
items : List, Set, Map, Enumeration, lterator 등의 컬렉션
begin/end : 반복의 시작/끝 값
2. 제어문 <c:if>, <c:choose>
3. 변수생성 : <c:set>
var : 변수명지정
value : 값 지정