1. JSP
HTML에 Java 코드를 삽입하여 동적인 웹 페이지를 만들 수 있도록 지원하는 서버 측 스크립트 언어
2. JSP 사용 전 (필요성)
// Servlet 클래스 내 doGet() 메서드 예시
@Override
protected void doGet(ServletRequest req, ServletResponse res) throws ServletException, IOException {
PrintWriter out = response.getWriter(); // 반환되는 파일에 출력될 데이터 구현
res.setContentType("text/html");
res.setCharacterEncoding("utf-8");
out.write("<html>");
out.write(" <head></head>");
out.write(" <body>");
out.write(" <h1> JSP 사용전 HTML 문서 반환 </h1>");
...
...
...
out.write(" <body>");
out.write("</html>");
}
3. JSP 생성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1> .jsp 파일로 생성된 HTML 코드</h1>
...
...
...
</body>
</html>
4. JSP 동작 원리
① 클라이언트가 .jsp 파일을 요청함
② 서블릿 컨테이너가 요청에 맞는 .jsp 파일을 .java 서블릿 파일로 변환함
③ .java 서블릿 파일을 class 파일로 컴파일한 뒤에 지정된 작업 수행
④ 처리된 결과를 HTML 형태로 응답 (.jsp 파일의 한줄 한줄을 모두 out.print("..."); 로 변환)
5. JSP Java 코드
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<% int a = 10; %> // 자바 코드
<!DOCTYPE html>
<html>
<head></head>
<body>
<% out.print(a) %>
<p> a : <%=a%></p>
...
...
...
</body>
</html>
1. Model 1
2. Model 2
1. Dispatcher
2. Dispatcher 구현
// Servlet 클래스 내 doGet() 메서드 예시
@Override
protected void doGet(ServletRequest req, ServletResponse res) throws ServletException, IOException {
RequestDispatcher dispatcher = res.getRequestDispatcher(".jsp 명");
dispathcer.forward(req, res);
}
3. setAttribute / getAttribute 메서드
Requset / Reponse 객체를 보낼 때 데이터도 함께 보내고 받는 메서드
Servelt 부분 (Controller)
@Override
protected void doGet(ServletRequest req, ServletResponse res) throws ServletException, IOException {
int result = 5;
res.setAttribute("result", result); // 데이터 담음
RequestDispatcher dispatcher = res.getRequestDispatcher(".jsp 명");
dispathcer.forward(req, res); // 데이터 보냄
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head></head>
<body>
<%=req.getAttribute("result")%>입니다. // 데이터 받아서 사용
${result} // Expression Language 이용
...
...
...
</body>
</html>
4. redirect vs dispatcher
redirect
- 새로운 페이지로 완전히 이동해서 기존 데이터를 사용하기 힘듬 (쿠키를 이용해서 사용가능)
- 리다이렉트될 때 브라우저 주소 표시줄의 URL이 변경됨
dispatcher
- forward 는 클라이언트가 요청하면서 전송한 데이터를 그대로 유지
- 포워딩이 되더라도 주소가 변경되지 않음
5. Dispatcher Servlet