일반적으로 JSP로 코드를 짜면 아래와 같다.
특히나 짝수와 홀수를 출력하는 부분은 코드를 알아보기도 힘들뿐만 아니라 코드가 흩어져있어 불편하다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int num=0;
String num_=request.getParameter("num");
if(num_ != null && !num_.equals("")){
num=Integer.parseInt(num_);
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% if(num%2 != 0){ %>
홀수
<% }else{ %>
짝수
<% } %>
</body>
</html>
MVC Model1
이를 간편하게 해줄 수 있는 것이 MVC model1이다.
코드를 만들 때 블럭을 최소화시키는 것으로 위쪽에 코드를 몰아넣고 아래에는 출력하는 부분만 남겨둬서
아래의 코드처럼 좀 더 알아보기 쉽게하는 것을 말한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int num=0;
String num_=request.getParameter("num");
if(num_ != null && !num_.equals("")){
num=Integer.parseInt(num_);
}
String result="";
if(num%2!=0){
result = "홀수";
}else{
result = "짝수";
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=result %>
</body>
</html>
MVC를 설명하면 아래와 같다.
Model은 출력 데이터를 말하고 View는 출력을 담당하는 HTML 코드를 말한다.
그리고 Controller는 입력과 제어를 담당하는 자바 코드를 말한다.
Model1은 컨트롤러와 뷰가 물리적으로 분리되지 않은 방식이라고 할 수 있다.
MVC Model2
Model1과 다르게 컨트롤러와 뷰가 물리적으로 분리된 방식을 Model2라고 한다.
Model2를 사용함으로써 컨트롤러와 뷰를 나눠 유지보수가 더 편리할 뿐만 아니라 실행 속도가 더 향상된다.
Model2를 사용한 예제를 확인해보도록 하자.
spagController.java
import java.io.IOException;
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;
// 컨트롤러
@WebServlet("/spag")
public class spagController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int num=0;
String num_=req.getParameter("num");
if(num_ != null && !num_.equals("")){
num=Integer.parseInt(num_);
}
String result="";
if(num%2!=0){
result = "홀수";
}else{
result = "짝수";
}
// result 값 저장
req.setAttribute("result", result);
RequestDispatcher rd = req.getRequestDispatcher("spag.jsp");
rd.forward(req, resp);
}
}
spag.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 저장된 값 꺼내기 --%>
<%= request.getAttribute("result") %>
</body>
</html>
이 두 파일 사이를 연결해주는 것이 포워딩이라는 것인데 포워딩하는 방법으로는 redirect와 forward가 있다.
먼저 redirect는 현재 작업 중인 내용과 상관없이 새로운 요청을 하는 것을 말한다.
forward는 현재 작업하는 내용을 이어갈 수 있도록 공유하는게 있는 것을 말한다.
여기서는 forward를 사용해서 연결하므로 서블릿 사이의 값을 공유할 때
사용하는 저장소인 request를 사용했다.
spagController.java에서는 setAttribute()을 사용하여 result를 저장하고
spag.jsp에서 request에서 그 result 값을 꺼내기 위해 getAttribute()를 사용한 것이다.
'강의 정리하기 > JSP와 Servlet' 카테고리의 다른 글
JSP의 페이지 지시자를 이용한 인코딩 (0) | 2023.07.15 |
---|---|
EL 연산자와 EL의 데이터 저장소 (0) | 2023.07.11 |
내장 객체 메소드 (0) | 2023.07.08 |
Jasper와 다양한 JSP 태그들 (0) | 2023.07.06 |
Service 함수의 GET 메소드와 POST 메소드 (0) | 2023.07.03 |