장점 | 단점 |
---|---|
구조가 단순하며 직관적이기 때문에 배우기 쉬움. | 출력을 위한 view html 코드와 로직 처리를 위한 java 코드가 섞여 있기 때문에 JSP 코드 자체가 복잡 |
개발 시간이 비교적 짧기 때문에 개발 비용이 감소. | JSP 코드에 Back-End와 Front-End가 혼재되기 때문에 분업이 힘듬. |
project의 규모가 커지게 되면 코드가 복잡해지므로 유지보수하기 어려워짐. | |
확장성(신기술 도입, framework 등의 적용)이 나쁨. |
Model2 | MVC Pattern | 설명 |
---|---|---|
Service, Dao or Java Beans | Model(data 관리) | Logic(Business & DB Logic)을 처리하는 모든 것. controller로부터 넘어온 data를 이용하여 이를 수행하고 그에 대한 결과를 다시 controller에 return. |
JSP | View | 모든 화면 처리를 담당. Client의 요청에 대한 결과 뿐 아니라 controller에 요청을 보내는 화면단도 jsp에서 처리. Logic 처리를 위한 java code는 사라지고 결과 출력을 하는 code만 존재. |
Servlet | Controller | Client의 요청을 분석하여 Logic 처리를 위한 Model단을 호출. return 받은 결과 data를 필요에 따라 request, session 등에 저장하고 redirect 또는 forward 방식으로 jsp page로 이동하여 출력. |
장점 | 단점 |
---|---|
출력을 위한 view(html) 코드와 로직 처리를 위한 java 코드가 분리 되었기 때문에 JSP는 Model1에 비해 코드가 복잡하지 않음. | 구조가 복잡하여 초기 진입이 어려움. |
화면단과 Logic단이 분리 되었기에 분업이 용이. | 개발 시간의 증가로 개발 비용 증가. |
기능에 따라 code가 분리 되었기 때문에 유지 보수가 쉬워짐. | |
확장성이 뛰어남.(servlet 대신 spring을 쓴다는 등 다른 framework나 신기술 도입이 잘 됨.) |
<input type="hidden" name="action" value="값">
: 하나의 controller를 사용할 때, 들어온 요청이 어떤 요청인지 구분하고 각각 처리해주기 위해서 추가해놓은 값.
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
String path = "";
if ("list".equals(action)) {
path = list(request, response);
forward(request, response, path);
} else if ("view".equals(action)) {
path = view(request, response);
forward(request, response, path);
} else if ("mvwrite".equals(action)) {
path = "/board/write.jsp";
redirect(request, response, path);
} else if ("write".equals(action)) {
path = write(request, response);
redirect(request, response, path);
} else if ("mvmodify".equals(action)) {
path = mvModify(request, response);
forward(request, response, path);
} else if ("modify".equals(action)) {
path = modify(request, response);
forward(request, response, path);
} else if ("delete".equals(action)) {
path = delete(request, response);
redirect(request, response, path);
} else {
redirect(request, response, path);
}
}
기능 | method |
---|---|
생성 | Cookie cookie = new Cookie(String name, String value); |
값 변경 / 얻기 | cookie.setValue(String value); / String value = cookie.getValue(); |
사용 도메인 지정 / 얻기 | cookie.setDomain(String domain); / String domain = cookie.getDomain(); |
값 범위 지정 / 얻기 | cookie.setPath(String path); / String path = cookie.getPath(); |
cookie의 유효기간 지정 / 얻기 | cookie.setMaxAge(int expiry); / int expiry = cookie.getMaxAge(); cookie 삭제 : cookie.setMaxAge(0); |
생성된 cookie를 client에 전송 | response.addCookie(cookie); |
client에 저장된 cookie 얻기 | Cookie cookies[ ] = request.getCookies(); |
기능 | method |
---|---|
생성 | HttpSession session = request.getSession(); HttpSession session = request.getSession(false); |
값 저장 | session.setAttribute(String name, Object value); |
값 얻기 | Object obj = session.getAttribute(String name); |
특정 이름의 속성 값 제거 | session.removeAttribute(String name); |
binding되어 있는 모든 속성 제거 | session.invalidate(); |
생성 시간 | long ct = session.getCreationTime(); |
마지막 접근 시간 | long lat = session.getLastAccessedTime(); |
Session | Cookie | |
---|---|---|
Type | javax.servlet.http.HttpSession (interface) | javax.servlet.http.Cookie (Class) |
저장 위치 | Server의 memory에 Object로 저장. | Client 컴퓨터에 file로 저장. |
저장 형식 | Object는 모두 가능. (일반적으로 Dto, List 등 저장.) | file에 저장되기 때문에 String 형태. |
사용 예 | 로그인 시 사용자 정보, 장바구니 등 | 최근 본 상품 목록, 아이디 저장(자동 로그인), 팝업 메뉴에서 ‘오늘은 그만 열기’ 등 |
용량 제한 | 제한 없음. | 도메인 당 20개. 1 쿠키 당 4KB. |
만료 시점 | 알 수 없음 (Client가 로그아웃하거나, 일정 시간동안 session에 접근하지 않는 경우 [만료 시간은 web.xml에 설정.]) | 쿠키 저장 시 설정 (설정이 없을 경우 Browser 종료 시 만료) |