Notice
Recent Posts
Recent Comments
Link
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`
【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`
【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);
}
}