gwooden_코린이

이클립스 JSP MVC 모델 1, 모델 2 코드 작성해보기 본문

JSP&Servlet

이클립스 JSP MVC 모델 1, 모델 2 코드 작성해보기

gwooden22 2023. 1. 20. 12:30
728x90

스파게티코드 -> MVC1 -> MVC2

 

숫자가 홀수/짝수 출력 페이지

 

<%@ 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>
	<h1>스파게티 코드</h1>
	<form method="get" action="spa.jsp">
		숫자 : <input type="text" name="num">
		<input type="submit" value="전송">
	</form>
	
	<h1>MVC 모델 1</h1>
	<form method="get" action="mvc1.jsp">
		숫자 : <input type="text" name="num">
		<input type="submit" value="전송">
	</form>
</body>
</html>

 

- 기존 스파게티 코드

<%@ 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>
<%
	int num = Integer.parseInt(request.getParameter("num"));
%>
	
<%
	if(num % 2 == 1) {
%>
	<h1>홀</h1>
<% 
	} else {
		
%>
	<h1>짝</h1>
<%
	}
%>
	


</body>
</html>

- MVC 모델 1

MVC1 -> 자바코드랑 HTML  코드를 분리(하나의 JSP파일 안에)

컨트롤러 -> 자바

뷰 -> HTML

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- controller -->
<%
	int num = Integer.parseInt(request.getParameter("num"));
	String number = ""; //model
	
	if(num % 2 == 1) {
		number = "홀";
	} else {
		number = "짝";
	}
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>mvc 1 페이지</title>
</head>
<body>

<!-- view -->
<h1><%=number %></h1>

</body>
</html>

- MVC 모델 2

컨트롤러 -> 자바파일(서블릿)

뷰 -> HTML(JSP)

 

index페이지에서 num을 입력해서 요청 -> Mvc2_Servlet 서블릿

Mvc2_Servlet 서블릿에 num 전달 받음
result는 Mvc2_Servlet 서블릿에서 만들어진 변수

dispathcher 전달 -> mvc2.jsp

mvc2.jsp 최종 결과를 출력해주는 페이지

package test.controller;

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;

/**
 * Servlet implementation class Mvc2_Servlet
 */
@WebServlet("/mvc2")
public class Mvc2_Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Mvc2_Servlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		int num = Integer.parseInt(request.getParameter("num"));
		String result="";
		
		
		
		
		if(num % 2 == 0) {
			result = "짝수";
		} else {
			result = "홀수";
		}
		
		request.setAttribute("result",result);
		
		RequestDispatcher dispatcher = request.getRequestDispatcher("mvc2.jsp");
		dispatcher.forward(request, response);
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
<%@ 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>
	<h1><%=request.getParameter("num") %></h1>
	<h1><%=request.getAttribute("result") %></h1>
</body>
</html>

- 전체적인 흐름 살펴보기

1. index 페이지

  • 값을 입력하고 요청
  • num -> ?

 

2. 요청을 받는 페이지 (서블릿)

  • Mvc2_gwooden.java
  • index 요청한 num 값을 사용할 수 있음
  • num값으로 홀짝 여부를 판별
  • 결과를 출력하는 페이지로 해당 결과값(result)을 보내줘야 함
  •  
  • redirect 방식 => 단순 페이지 이동(값 전달 X)
  • forward  방식 이용 => 값 전달 가능
  • dispatcher.forward(request, respone); -> index에서 요청받은 값만 전달
  • result를 보내주지 않아서 mvc2.jsp페이지에서 사용을 못함
  •  
  • request.setAtrtribute("result", result); -> request에 result값을 추가
  • dispatcher.forward(request, response); -> 전달 (result가 추가된 상태)

 

3. mvc2.jsp 페이지

  • mvc2.jsp가 실제 결과값을 출력 페이지

mvc 1 :

  • 하나의 jsp 안에 자바코드와 html 코드가 모두 존재

 

mvc 2 :

  • 자바코드는 서블릿 = Controller
  • html 코드는 jsp = view
  •  
  • result변수 : model

- 문제

id와 나이를 입력 접속 버튼을 누르면

 

만약 .id가 user면 : 사용자

id가 admin면 : 관리자

둘다 아니면 비회원

 

나이 : 연령대가 나오게

23 -> 20대

22 -> 30대

11 -> 10대

 

접속 페이지에 '20대' '사용자'님 환영합니다.

 

<%@ 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>
	<form method="get" action="login">
		id : <input type="text" name="id"> <br>
		나이 : <input type="text" name="age"> <br>
		<input type="submit" value="접속">
	</form>
</body>
</html>
package loginServlet;

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;

/**
 * Servlet implementation class login
 */
@WebServlet("/login")
public class login extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public login() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String id = request.getParameter("id");
		int age = Integer.parseInt(request.getParameter("age"));
		
		
		
		String member;
		
		if(id.equals("user")) {
			member = "사용자";
		} else if(id.equals("admin")) {
			member = "관리자";
		} else {
			member = "비회원";
		}
		
		//두 번째 방법
		/*
		if(id.equals("user")) {
			request.setAttribute("member", "사용자");
		} else if(id.equals("admin")) {
			request.setAttribute("member", "관리자");
		} else {
			request.setAttribute("member", "비회원");
		}
		*/
		
		request.setAttribute("member", member);
		
		
		
		String ages;
		
		ages = age / 10 + "0대";
		
		request.setAttribute("ages", ages);
		
		
		//두 번쨰 방법
		/*
		if(age < 20) {
			ages = "10";
		} else if(age >= 20 && age < 31) {
			ages = "20";
		} else if(age >= 30 && age < 41) {
			ages = "30";
		} else {
			ages = "40~";
		}
		*/
	
		
		/*
		if(age < 20) {
			request.setAttribute("ages", "10");
		} else if(age >= 20 && age < 31) {
			request.setAttribute("ages", "20");
		} else if(age >= 30 && age < 41) {
			request.setAttribute("ages", "30");
		} else {
			request.setAttribute("ages", "40~");
		}
		*/
		
		
		
		RequestDispatcher dispatcher = request.getRequestDispatcher("loginPage.jsp");
		dispatcher.forward(request, response);
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
<%@ 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>
	<h1>
		<%=request.getParameter("id")%> <br>
		<%=request.getParameter("age")%> <br>
		<%=request.getAttribute("ages") %> <%=request.getAttribute("member") %>님 환영합니다. 
	</h1>
</body>
</html>

 

728x90

'JSP&Servlet' 카테고리의 다른 글

이클립스 JSP 세션(session)  (0) 2023.01.20
이클립스 JSP/서블릿 쿠키(Cookie)  (0) 2023.01.20
이클립스 JSP 내장 객체  (0) 2023.01.19
MVC 모델/패턴 모델 1  (0) 2023.01.19
이클립스 JSP 지시자  (0) 2023.01.19
Comments