Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Everything has an expiration date

[JSP - (MVC)] 20231222 [프로그램 소스] - MVCTest01(java), MVCTest01(jsp), web.xml, MVCTest02(java), MVCTest02(jsp), MVCTest02Model 본문

[JSP (MVC)]/Program source (JSP (MVC))

[JSP - (MVC)] 20231222 [프로그램 소스] - MVCTest01(java), MVCTest01(jsp), web.xml, MVCTest02(java), MVCTest02(jsp), MVCTest02Model

Jelly-fish 2023. 12. 26. 08:57

 

WebApp25


 

【모델2 방식으로 1부터 ~ 100까지의 수를 출력하기】 - MVCTest01.java, MVCTest01.jsp, web.xml
▷ View : `MVCTest01.jsp`
▷ Controller : `MVCTest01.java`

 

MVCTest01.jsp


【View】  - MVCTest01.jsp  (WebContent > WEB-INF > view 폴더 내부에 숨겨진 상태)

 

MVCTest01.jsp

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<% 
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>

<div>
	<h1>MVC 관련 실습2</h1>
	<hr />
</div>

<div>
	<!-- 1부터 100까지의 결과물을 가지고 클라이언트 만나기 -->
	
	<!-- 컨트롤러로 수신한 결과 -->
	
	<ul>
		<c:forEach var="i" items="${lists }">
			<li>${i }</li>
		</c:forEach>
	</ul>
</div>


</body>
</html>

 

 


 

 

web.xml (클라이언트가 `/mvctest01` url을 요청했을 때, MVCTest01.jsp에 접근할 수 있도록 연결)

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>WebApp00</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

<!--  
  <servlet>
  	<servlet-name></servlet-name>
  	<servlet-class></servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name></servlet-name>
  	<url-pattern></url-pattern>
  </servlet-mapping>
 --> 
 
 <!-- MVCTest01 -->
 <servlet>
  	<servlet-name>MVCTest01</servlet-name>
  	<servlet-class>com.svt.MVCTest01</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>MVCTest01</servlet-name>
  	<url-pattern>/mvctest01</url-pattern>
  </servlet-mapping>
  
  
 
</web-app>

 


 

【Controller】 - MVCTest01.java (`RequestDispatcher`를 통해 jsp 파일로 forwarding 처리)

 

MVCTest01.java

 

/*============================================
 	MVCTest01.java
	- Controller 역할을 수행할 서블릿 클래스
==============================================*/

package com.svt;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class MVCTest01 extends HttpServlet
{
	private static final long serialVersionUID = 1L;
	
	// 사용자의 http 프로토콜 요청이 GET 방식일 경우 호출되는 메소드
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGetPost(request, response);
		
	}

	// 사용자의 http 프로토콜 요청이 POST 방식일 경우 호출되는 메소드
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGetPost(request, response);
		
	}
	
	// 사용자 정의 메소드
	protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// GET 방식이든 POST 방식이든
		// 어떤 방식의 요청에도 모두 처리할 수 있는 사용자 정의 메소드
		
		// 서블릿 관련 코딩
		// 1 부터 100 까지의 수를 객체(컬렉션)에 저장하는 과정
		
		List<String> lists = new ArrayList<String>();
		
		for (int i = 1; i <= 100; i++)
		{
			lists.add(String.valueOf(i));
		}
		
		request.setAttribute("lists", lists);
		
		RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/view/MVCTest01.jsp");
		dispatcher.forward(request, response);
		
		
	}
	
}

 

 

web.xml을 통해, MVCBegin.java 클래스가 동작하도록 하기.

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>WebApp00</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  
  <!--  
  <servlet>
  	<servlet-name></servlet-name>
  	<servlet-class></servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name></servlet-name>
  	<url-pattern></url-pattern>
  </servlet-mapping>
 -->  
 
 <!-- MVCBegin -->
  <servlet>
  	<servlet-name>MVCBegin</servlet-name>
  	<servlet-class>com.test.MVCBegin</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>MVCBegin</servlet-name>
  	<url-pattern>/mvcbegin</url-pattern>
  </servlet-mapping>
  
 
  
</web-app>

 


 

출력할 내용인 message에 "안녕하세요, MVC 패턴입니다~!!!" 를 세션에 저장한 후
클라이언트가 `MVCBegin.jsp` 파일로 접근하도록 forwarding

 

MVCBegin.java

 

/*========================
 	MVCBegin.java
=========================*/

package com.test;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class MVCBegin extends HttpServlet
{
	private static final long serialVersionUID = 1L;
	
	// 사용자의 http 프로토콜 요청이 GET 방식일 경우 호출되는 메소드
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGetPost(request, response);
		
	}

	// 사용자의 http 프로토콜 요청이 POST 방식일 경우 호출되는 메소드
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doGetPost(request, response);
		
	}
	
	//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
	// 이것이 바로 컨트롤러.
	
	// 클라이언트는 web.xml의 주소
	// http://localhost:3306/WebApp24/mvcbegin 으로 접근하면
	// 여기 사이에 컨트롤러가 껴서
	// WEB-INF/view/MVCBegin.jsp로 보내주는 것이다.
	// 실제로 하는 일은 없지만, 중개자 역할을 해 준다.
	// 컨트롤러는 서버의 자원이기에 서버쪽의 WEB-INF로 접근이 가능하다.
	// 멱살잡고 끌려나가지 않게끔...
	//★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
	
	// 사용자 정의 메소드
	protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// GET 방식이든 POST 방식이든
		// 어떤 방식의 요청에도 모두 처리할 수 있는 사용자 정의 메소드
	
		// 서블릿 관련 코딩
		
		// 데이터 구성(→ 업무 처리)
		String message = "안녕하세요, MVC 패턴입니다~!!!";
		
		// View 역할을 수행하는 JSP 페이지에 데이터를 전달해야 한다.
		request.setAttribute("message", message);
		
		// check~!!!
		// 제어권(제어 흐름)도 JSP 페이지(View)에 전달해야 한다.
//		RequestDispatcher dispatcher = request.getRequestDispatcher("MVCBegin.jsp");
		// * 위 처럼 작성하면, 바로 jsp 잡고가는 것.
		
		RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/view/MVCBegin.jsp");
		dispatcher.forward(request, response);
		//-- 『javax.servlet.RequestDispatcher』 클래스는
		//    현재 클라이언트의 요청을 다른 서블릿/JSP 페이지로 전달하거나
		//    다른 서블릿/JSP 페이지의 결과를 현재 위치에 포함시키고자 할 때 사용된다.
		
		// ※ RequestDispatcher 객체는
		//    이러한 기능을 제공하기 위해
		//    forward() 메소드와 include() 메소드를 제공하고 있으며
		//    이 두 메소드는 JSP 의 <jsp:forward> 액션 태그,
		//    <jsp:include> 액션 태그와 동일한 기능을 제공한다.
		//    위의 경우는 현재 요청을 MVCBegin.jsp 페이지로
		//    보내고자 하는 경우이다.
		
		
		// ==> 웹 기반 모델2(MVC) 구조는
		//     바로 이 『RequestDispatcher』 의 『forward()』
		//     메소드를 통해 구현된다.
		
		
		
		
	}
	
}

 

 


 

 

【모델2 방식으로 1부터 ~ 100까지의 수를 출력하기 (Model 추가)】
▷ Model : `MVCTest02Model.java`
▷ View : `MVCTest02.jsp`
▷ Controller : `MVCTest02.java`

 

 

MVCTest02.jsp


【View】  - MVCTest02.jsp  (WebContent > WEB-INF > view 폴더 내부에 숨겨진 상태)

 

MVCTest02.jsp

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<% 
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVCTest02.jsp</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
</head>
<body>

<div>
	<h1>MVC 관련 실습 3</h1>
	<hr />
</div>

<div>
	
	<!-- 1 부터 100 까지의 결과물을 가지고 클라이언트 만나기 -->
	
	<!-- Model 이 처리한 내용을 -->
	<!-- Controller 로 부터 수신한 결과 -->
	
	<ul>
		<c:forEach var="i" items="${lists }">
			<li>${i }</li>
		</c:forEach>
	</ul>
	
</div>

</body>
</html>

 

 


web.xml (클라이언트가 `/mvctest02` url을 요청했을 때, MVCTest02.jsp에 접근할 수 있도록 연결)

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>WebApp00</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

<!--  
  <servlet>
  	<servlet-name></servlet-name>
  	<servlet-class></servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name></servlet-name>
  	<url-pattern></url-pattern>
  </servlet-mapping>
 --> 
  
   <!-- MVCTest02 -->
 <servlet>
  	<servlet-name>MVCTest02</servlet-name>
  	<servlet-class>com.svt.MVCTest02</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>MVCTest02</servlet-name>
  	<url-pattern>/mvctest02</url-pattern>
  </servlet-mapping>
  
  
 
</web-app>

 


 

【Model】 - MVCTest02Model.java (1~100까지 HTML에 표시하는 로직을 처리)

 

MVCTest02Model.java

 

/*==================================
	MVCTest02Model.java
	- Model 역할을 수행할 클래스
	- 비즈니스 로직 처리
===================================*/

package com.test;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MVCTest02Model
{
	// 1부터 100까지의 수를 출력하게끔 만드는 처리를
	// Model에서 처리하도록 구성.
	// Controll에서 업무를 위임받아 처리하는 역할
	public String actionCount(HttpServletRequest request, HttpServletResponse response)
	{
		String result = "";
		
		// 1 부터 100 까지의 수를 객체(컬렉션)에 저장하는 업무 처리
		List<String> lists = new ArrayList<String>();
		for (int i=1; i<=100; i++)
		{
			lists.add(String.valueOf(i));
		}
		
		// 결과는 setAttribute로 담아두기만 하고
		// 전송할 경로만 문자열 result에 담아 반환했다.
		request.setAttribute("lists", lists);
		
		result = "WEB-INF/view/MVCTest02.jsp";
		
		return result;
	}


}

 


 

【Controller】 - MVCTest02.java (`RequestDispatcher`를 통해 jsp 파일로 forwarding 처리)

 

MVCTest02.java

 

/*============================================
 	MVCTest02.java
	- Controller 역할을 수행할 서블릿 클래스
==============================================*/

package com.svt;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.test.MVCTest02Model;

public class MVCTest02 extends HttpServlet
{


		private static final long serialVersionUID = 1L;
		
		// 사용자의 http 프로토콜 요청이 GET 방식일 경우 호출되는 메소드
		@Override
		protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
		{
			doGetPost(request, response);
			
		}
	
		// 사용자의 http 프로토콜 요청이 POST 방식일 경우 호출되는 메소드
		@Override
		protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
		{
			doGetPost(request, response);
			
		}
		
		// 사용자 정의 메소드
		protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
		{
			// GET 방식이든 POST 방식이든
			// 어떤 방식의 요청에도 모두 처리할 수 있는 사용자 정의 메소드
			
			// 서블릿 관련 코딩
			
			// 모델 객체 생성 및 액션 처리 → 모델이 처리한 결과 수신(View 정보 획득)
			MVCTest02Model model = new MVCTest02Model();
			String view = model.actionCount(request, response);
			
			RequestDispatcher dispatcher = request.getRequestDispatcher(view);
			dispatcher.forward(request, response);
			
			
		}
	
	}