본문 바로가기
웹 프로그래밍(풀스택-->java)/웹프로그래밍(백엔드-->java)

39. Jsp 중고급 - 1. 모델 2 이해

by 백엔드개발자0107 2021. 12. 8.

jsp에서 모델 1방식으로 데이터 처리를 하였다.

 

그런데 이제, 오늘은 모델 2처리 방식이 필요하다.

 

예전에 jsp웹 프로그래밍을 할떄 간단하게 모델1과 모델 2를 이해시켰는데, 

 

이번에는 모델 1과 모델 2의 패턴방식을 이해해보자..!

 

https://hsp1116.tistory.com/9

 

JSP 모델1과 모델2, 그리고 MVC 패턴

웹개발을 시작하기 전부터 질리도록 들었던 단어가 있다. 바로 MVC 패턴으로, 이는 웹개발 관련 블로그나 커뮤니티에서 하루도 빠짐없이 언급 될 정도로 웹 개발 하면 필수적으로 알아야 할 디

hsp1116.tistory.com

모델 1과 모델 2에 대한 내용이 자세히 나와있는 부분을 링크처리해놓았다. 잘 보자..!

 

일단 jsp는 모델1방식이나 모델 2방식이나 브라우저에서 접근하는 개념은 같다.

 


 

모델1:

 

웹서버로 접근을 하면, 이거를 jsp가 받아줬다. 예를 들어 request.getParameter()같이 말이다.

 

그리고 이 jsp가 데이터베이스에 연결해서 이 jsp가 결과까지 보여주는 모든 동작이 하나의 jsp 에서 일어났다.

 

이런 경우를 모델 1 이라고 한다. jsp 모델 1같은 경우는 간단한 웹페이지를 표현할때 이용한다.

 


모델2:

 

jsp페이지가 servlet이 처음부터 브라우저에서 들어오는 요청을 받아서 처리하는것, 그 servlet에서 데이터를 처리하고

 

그 결과 데이터를 jsp쪽으로 넘겨주면, jsp는 request객체를 안쓰고 결과만 보여주는 경우를 보여주기 떄문에 자바코드는 처음부터 

 

servlet에서 만들기 때문에 결과적으로 두개다 만들어야하기때문에 더 복잡해질수가 있고 처음 jsp입문자에게는 더 어려울 수가 있다.

 

하지만 jsp코드가 훨씬 단순명료해지기 떄문에 jsp에서 자바코드를 가능하면 뺄수있을만큼 빼는것 이렇게 분리시키는 개념을 mvc 라고 한

 

다.  

 


자 그럼, 오늘은 모델2 를 프로그래밍적으로 한번 만들어 볼것이다. 

즉, 아이디 패스워드를 입력하면 그 입력된 내용을 servlet에서 하고 그 처리를 view에서 하는 그런 과정을 해볼것이다.

 

모델 2 만들어보자>>!

 


LoginForm.jsp ->LoginProc.java->LoginProc.jsp

 

이런식으로 데이터가 넘어가는 것은 mvc2방식이라 한다.

 


LoginForm.jsp

 

<%--
  Created by IntelliJ IDEA.
  User: jeongdahyeon
  Date: 2021/12/08
  Time: 7:11 PM
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<center>
    <h2>로그인</h2>
    <form action="LoginProc.do" method="post">
        <table width="300" border="1">
            <tr height="40">
                <td width="120">아이디</td>
                <td width="180"><input type="text" name="id"></td>
            </tr>
            <tr height="40">
                <td width="120">패스워드</td>
                <td width="180"><input type="password" name="password"></td>
            </tr>
            <tr height="40">
                <td align="center" colspan="2"><input type="submit" value="로그인"></td>
            </tr>
        </table>
    </form>




</body>
</html>

 

 

LoginProc.java

package control;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "LoginProc", value = "/LoginProc.do")
public class LoginProc extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    reqPro(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    reqPro(request,response);
    }

    private void reqPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //이것의 의미는 위에 있는 똑같은 reqPro()메소드를 만들어서 이 함수가 doGet이 들어오든 doPost가 들어오든
        //상관이 없게끔 만든다.
        //이렇게 쓴 이유는 어떤 값이 들어오든 get으로 들어온건지 아니면 post로 들어온 건지 알기 어럅기 때문이다.
        String id =  request.getParameter("id");
        String password =  request.getParameter("password");
        System.out.println(id);

        request.setAttribute("id", id);//request객체에 데이터를 저장한다.
        request.setAttribute("password", password);//request객체에 데이터를 저장한다.

        RequestDispatcher dis = request.getRequestDispatcher("LoginProc.jsp");
    //RequestDispatcher클래스를 이용하여  LoginProc객체 즉 jsp 객체를 하나 만들고
        //이 dis객체에다가 forward함수를 이요하여 기존에 넣었던 request객체 값들과 response값들을 넣어준다.
        dis.forward(request, response);

    }

}

 

LoginProc.jsp

 

<%--
  Created by IntelliJ IDEA.
  User: jeongdahyeon
  Date: 2021/12/08
  Time: 7:44 PM
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

넘어온 데이터는 ${id}와 ${pass}입니다.

</body>
</html>

-> 위 코드와 주석을 잘 보도록 하자