ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Servlet] 005. MVC 관련 실습(2)
    SsY/Class 2023. 6. 8. 14:00
    728x90
    WebApp25
    ===================================================================================================
    
    ○ MVC 관련 실습 2
    
      - prj : WebApp25
    
      - 물리적 파일 구성 
       ·MVCTest01.jsp     → View 역할 (JSP 페이지)
       ·MVCTest01.java    → Controller 역할 (서블릿 클래스)
       ·web.xml          → URL 매핑
    
      - 사용자 최초 요청 주소
        http://localhost:8090/WebApp25/mvctest01
    
    ===================================================================================================

    WebApp24 와 WebApp25 는 같은 프로젝트 내에 만들어도 상관없으나, 헷갈릴 수 있기 때문에 별도로 구성해 둠
    ※ 구성하는 순서를 잘 생각해 둘 것
    1. jsp 를 먼저 WebContent 에서 뷰페이지를 가시적으로 만들고
    2. java 파일에서 해당 뷰를 컨트롤할 서블릿 관련 코드를 작성한다
    3. web.xml 을 통해서 서블릿이 해당 페이지를 찾아갈 수 있도록 한다
    4. jsp 파일을 WEB-INF 에 두고 서블릿이 찾아갈 수 있도록 주소를 재입력 한다
      + 이 과정에서 파일을 안에 넣은 순간 부터 주소 창에 일일이 입력해서 테스트 해야하기 때문에
         번거로움을 피하고자 WebContent 에 마지막 주소와 동일한 이름으로 확장자 없이 빈 파일을 하나 생성해서
         Control + F11 을 통해서 서버를 구동해볼 수 있도록 한다
    5. jsp 의 뷰 페이지를 정적인 형태에서 동적인 형태로 구성한다.

    더보기

    프로젝트 시,,,
    MVC 패턴으로 작업을 하면 백그라운드에서 작업을 하기 위한 뷰를 미리 구성할 수 있기 때문에 
    연쇄적으로 앞 사람이 일을 끝날 때 까지 기다렸다가 작업을 하는 것이 아닌 미리 작업이 가능하다!


    • 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>MVCTest01.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>MVC 관련 실습 2</h1>
    	<hr>
    </div>
    
    <div>
    	<h2>1 부터 100 까지의 결과물을 가지고 클라이언트 만나기</h2>
    	<h3>(컨트롤러로부터 수신한 결과)</h3>
    	<!-- 
    	<ul>
    		<li>1</li>
    		<li>...</li>
    		<li>100</li>
    	</ul>
    	-->
    	<ul>
    		<c:forEach var="i" items="${lists }">
    			<li>${i }</li>
    		</c:forEach>
    	</ul>
    </div>
    
    
    </body>
    </html>

    • MVCTest01.java
    /* =======================
     	MVCTest01.java
    ======================== */
    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;
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		doGetPost(request, response);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		doGetPost(request, response);
    	}
    	
    	protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		// 서블릿 관련 코딩
    		
    		// 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);
    	}
    	
    }

    ※ 이 경우에 모델이 수행하는 역할을 Servlet 에서 전부 하고 있는 구조가 된다


    • 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>
    
    	<!-- 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>

    ===================================================================================================
    
    ○ MVC 관련 실습 3
    
      - prj : WebApp25
    
      - 물리적 파일 구성 
       ·MVCTest02.jsp          → View 역할 (JSP 페이지)
       ·MVCTest02.java         → Controller 역할 (서블릿 클래스)
       ·MVCTest02Model.java    → Model역할 (일반 자바 클래스)
       ·web.xml                → URL 매핑
    
      - 사용자 최초 요청 주소
        http://localhost:8090/WebApp25/mvctest02
    
    ===================================================================================================

    ※ 구성하는 순서를 잘 생각해 둘 것
    1. jsp 를 먼저 WebContent 에서 뷰페이지를 가시적으로 만들고
    2. java 파일에서 해당 뷰를 컨트롤할 서블릿 관련 코드를 작성한다
    3. Model 역할을 하는 java 파일 구성  
    4. web.xml 을 통해서 서블릿이 해당 페이지를 찾아갈 수 있도록 한다
    5. jsp 파일을 WEB-INF 에 두고 서블릿이 찾아갈 수 있도록 주소를 재입력 한다
      + 이 과정에서 파일을 안에 넣은 순간 부터 주소 창에 일일이 입력해서 테스트 해야하기 때문에
         번거로움을 피하고자 WebContent 에 마지막 주소와 동일한 이름으로 확장자 없이 빈 파일을 하나 생성해서
         Control + F11 을 통해서 서버를 구동해볼 수 있도록 한다
    6. jsp 의 뷰 페이지를 정적인 형태에서 동적인 형태로 구성한다.

    ※ request 의 경로를 잘 파악할 것

    더보기

    스프링 프레임워크에서 뷰 리저버 등장!
    -> 서블릿의 비서같은 역할,,
    -> 왜? 서블릿이 모든 뷰들의 특성을 다 기억하기가 힘들어서
    -> 서블릿은 뷰 리저버만 기억하고 뷰리저버가 뷰의 특성을 기억하는 형태(Model -> 반환 자료형을 알려주는 느낌?)(제안을 하는 것)(서블릿 거부 가능)
    ==> 컨트롤러의 결합력은 약간 강해지게 되긴 함...
           (이러면 모델하고 뷰하고의 결합력이 강해지는 것이기 때문에)

    일반적으로는 모델과 뷰의 결합력이 낮은게 바람직함
    즉, 모든 부품들을 분해해서 -> 모두 결합할 수 있게 하는 것이 바람직하나 -> 너무 부품이 많음 
    ex) 문도 다 분해해서 문 손잡이 경첩 문짝 분해해두고 사물함도 분해해서 사물함 경첩 사물함 손잡이 사물함 문짝
          다 분해해 두면 ...? 상태됨 -> 즉, 사물함부품들을 결합해두고 문손잡이모듈 등으로 결합해두고 사용하는게 편함

    MVCTest02Model.java 파일 참조


    • 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="<%=cp %>css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>MVC 관련 실습 3</h1>
    	<hr>
    </div>
    
    <div>
    	<h2>1 부터 100 까지의 결과물을 가지고 클라이언트 만나기</h2>
    	<h3>(컨트롤러로부터 수신한 결과)</h3>
    	<!-- 
    	<ul>
    		<li>1</li>
    		<li>...</li>
    		<li>100</li>
    	</ul>
    	-->
    	
    	<ul>
    		<c:forEach var="i" items="${lists }">
    			<li>${i }</li>
    		</c:forEach>
    	</ul>
    	
    </div>
    
    
    </body>
    </html>

    • MVCTest02.java
    /* =======================
     	MVCTest02.java
    ======================== */
    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;
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		doGetPost(request, response);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		doGetPost(request, response);
    	}
    	
    	protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		// 서블릿 관련 코딩
    		
    		//-- MVCTest01 : 서블릿이 내용을 만들어서 전달하라고 하는 것
    		// 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);
    		*/
    		
    		// 모델 객체 생성 및 모델이 처리한 결과 수신 (+ View 정보 획득 )-> 서블릿은 전달만할 수 있게 구성 
    		MVCTest02Model model = new MVCTest02Model();
    		String view = model.actionCount(request, response);	//-- 최초에 받은 request 를 제공
    		
    		//-- 마지막 경로를 서블릿이 결정할 때
    		
    		// view += "추가경로"; //-- 방법1
    		
    		// 추가적인 상황파악(추가 로직 수행)
    		
    		// view += "추가경로"; //-- 방법1(추가)
    		
    		//RequestDispatcher rd = request.getRequestDispatcher(view + "문자열 추가 가능"); //-- 방법2
    		RequestDispatcher rd = request.getRequestDispatcher(view);
    		rd.forward(request, response);
    	}
    	
    	
    }

    • 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
    {
    	public String actionCount(HttpServletRequest request, HttpServletResponse response)
    	{
    		String result = "";
    		
    		// 1부터 100 까지의 수를 객체 (컬렉션)에 저장하는 업무처리
    		List<String> lists = new ArrayList<String>();
    		
    		for (int i=0; i<=100; i++)
    		{
    			lists.add(String.valueOf(i));
    		}
    		
    		request.setAttribute("lists", lists); //-- 해당 request 는 처음에 받은 request
    		
    		result = "WEB-INF/view/MVCTest02.jsp";
    		//-- 현재는 정적으로 하나만 구성했지만 
    		//-- 추후 폴더 경로까지만 알려주고 뒤의 파일은 servlet 에서 처리할 수 있도록 하는 방법도 가능하다는 것! 
    		
    		//-- 컨트롤러에 반환한 문자열
    		return result;
    	}
    }

    • 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>
    -->
    	<!-- 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>
    	
    	<!-- 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>

    ===================================================================================================
    
    ○ 폼(form)데이터 전송 및 수신 과정 비교
    
      [A]
      - prj : WebApp26
    
      - 물리적 파일 구성 
       ·HelloSend01.html
       ·HelloReceive01.jsp
    
      - 사용자 최초 요청 주소
        http://localhost:8090/WebApp25/HelloSend01.html
    
      [B]
      - prj : WebApp27
    
      - 물리적 파일 구성 
       ·HelloSend02.html
       ·HelloReceive02.java
       ·web.xml
    
      - 사용자 최초 요청 주소
        http://localhost:8090/WebApp25/HelloSend02.html
    
      [C]
      - prj : WebApp28
    
      - 물리적 파일 구성 
       ·HelloSend03.html
       ·HelloSend03Controller.java
       ·HelloReceive03Controller.java
       ·HelloReceive03Model.java
       ·HelloReceive03.jsp
       ·web.xml
    
      - 사용자 최초 요청 주소
        http://localhost:8090/WebApp25/hello
    ===================================================================================================
    [A]
    WebApp26
    • HelloSend01.html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>HelloSend01.html</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>최초 요청 페이지</h1>
    	<h2>HelloSend01.html</h2>
    	<hr />
    </div>
    
    <div>
    	<form action="HelloReceive01.jsp" method="post">
    		first Name <input type="text" name="firstName" /><br>
    		Last Name <input type="text" name="lastName" /><br><br>
    		
    		<button type="submit">submit</button>
    	</form>
    </div>
    
    </body>
    </html>

    • HelloReceive01.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();
    %>
    <%
    	String firstName = request.getParameter("firstName");
    	String lastName = request.getParameter("lastName");
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>HelloReceive01.jsp</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>결과 수신 페이지</h1>
    	<h2>(HelloReceive01.jsp)</h2>
    	<hr />
    </div>
    
    <div>
    	<ul>
    		<li><b>First Name : </b><%=firstName %></li>
    		<li><b>Last Name : </b><%=lastName %></li>
    	</ul>
    </div>
    
    </body>
    </html>

    [B]
    WebApp27
    • HelloSend02.html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>HelloSend02.html</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>최초 요청 페이지</h1>
    	<h2>HelloSend02.html</h2>
    	<hr />
    </div>
    
    <div>
    	<!-- 서블릿 주소 요청 -->
    	<form action="helloreceive02" method="post">
    		first Name <input type="text" name="firstName" /><br>
    		Last Name <input type="text" name="lastName" /><br><br>
    		
    		<button type="submit">submit</button>
    	</form>
    </div>
    
    </body>
    </html>

    • 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>
    -->
    	<servlet>
    		<servlet-name>HelloReceive02</servlet-name>
    		<servlet-class>com.svt.HelloReceive02</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>HelloReceive02</servlet-name>
    		<url-pattern>/helloreceive02</url-pattern>	
    	</servlet-mapping>
    </web-app>

    • HelloReceive02.java
    /* =======================
     	helloreceive02.java
    ======================== */
    package com.svt;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloReceive02 extends HttpServlet
    {
    	private static final long serialVersionUID = 1L;
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		doGetPost(request, response);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		doGetPost(request, response);
    	}
    	
    	protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		// 서블릿 관련 코딩
    		
    		request.setCharacterEncoding("UTF-8");
    		
    		response.setContentType("text/html; charset=UTF-8");
    		
    		PrintWriter out = response.getWriter();
    		String title ="결과 수신 페이지";
    		String subTitle = "(HelloReceive02.java)";
    		String docType = "<!DOCTYPE html>";
    		
    		out.print(docType+"\n"
    				+ "<html>\n"
    				+ "<head><title>"+ title +"</title></head>\n"
    				+ "<body>\n"
    				+ "<div><h1>" + title + "</h1>\n"
    				+ "<h2>" + subTitle + "</h2>\n"
    				+ "<hr></div>\n"
    				+ "<div>\n"
    				+ "<ul>\n"
    				+ "<li><b>First Name : </b>" + request.getParameter("firstName") + "</li>\n"
    				+ "<li><b>Last Name : </b>" + request.getParameter("lastName") + "</li>\n"
    				+ "</ul>\n"
    				+ "</div>\n"
    				+ "</body>\n"
    				+ "</html>");
    
    		
    	}
    	
    }

    [C]
    WebApp28
    (스프링 프레임 워크의 경우 패키지 경로는 기본 3 Level 이 권장사항)

    com.test.~ (패키지 생성) - 논리적인 경로

    • HelloSend03.html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>HelloSend03.html</title>
    <link rel="stylesheet" type="text/css" href="css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>최초 요청 페이지</h1>
    	<h2>(HelloSend03.html)</h2>
    	<hr />
    </div>
    
    <div>
    	<!-- 서블릿 주소 요청 -->
    	<form action="helloreceive03">
    		First Name <input type="text" name="firstName" /><br>
    		Last Name <input type="text" name="lastName" /><br><br>
    		
    		<button type="submit">submit</button>
    	</form>
    </div>
    
    </body>
    </html>

    • HelloSend03Controller.java
      - 처음의 HelloSend03.html 페이지를 WEB-INF 에 두고 외부에서 연결할 수 있도록 하는 작업을 수행하는 컨트롤러
    /*==============================
       HelloSend03Controller.java
    ============================== */
    
    package com.test.ctrl;
    
    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 HelloSend03Controller extends HttpServlet
    {
    
    	private static final long serialVersionUID = 1L;
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		process(request, response);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		process(request, response);
    	}
    
    	protected void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		// 서블릿 관련 코딩 
    		//-- View 를 만날 수 있게만 해주면 됨
    		
    		// View 객체에 대한 연결
    		RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/view/HelloSend03.html");
    		dispatcher.forward(request, response);
    
    	}
    
    }

    • HelloReceive03Controller.java
      - 폼에서 일어난 submit 액션을 모델을 활용해 얻어낸 정보를 최종 결과 페이지로 이어지게 전달하는 컨트롤러
    /*=========================================================
       HelloReceive03Controller.java
       - 폼에서 submit 액션이 일어났을 때 만나게 되는 컨트롤러
    ========================================================== */
    
    package com.test.ctrl;
    
    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.logic.HelloReceive03Model;
    
    public class HelloReceive03Controller extends HttpServlet
    {
    
    	private static final long serialVersionUID = 1L;
    
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		process(request, response);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		process(request, response);
    	}
    	
    	protected void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    	{
    		// 서블릿 관련 코딩
    		request.setCharacterEncoding("UTF-8");
    		
    		// Model 객체 연결 → 업무로직 수행, view 정보 얻어내기
    		HelloReceive03Model model = new HelloReceive03Model();
    		String view = model.actionLogic(request, response);
    		
    		// View 객체 연결
    		RequestDispatcher dispatcher = request.getRequestDispatcher(view);
    		dispatcher.forward(request, response);
    		
    	}
    	
    }

    • HelloReceive03Model.java
      - 업무의 로직을 수행하는 모델
      - 다만, 여기서 반환하는 String 을 컨트롤러(서블릿)에서는 참고할 뿐 꼭 똑같이 진행되어야 할 필요는 없음
    /*============================
       HelloReceive03Model.java
     ============================*/
    
    package com.test.logic;
    
    import java.io.UnsupportedEncodingException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloReceive03Model
    {
    	public String actionLogic(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException
    	{
    		String result = "";
    		
    		request.setCharacterEncoding("UTF-8");
    		//-- 일반클래스에서는 실제 인코딩 방식을 지정하는 것은,
    		//-- 해당 방식을 지원하지 않는 상태일 수 있기 때문에
    		//-- UnsupportedEncodingException 예외가 발생한다.
    
    		// 데이터 수신
    		String firstName = request.getParameter("firstName");
    		String lastName = request.getParameter("lastName");
    		
    		// 필요한, 추가적인 업무처리 가능
    		firstName = "☆ " + firstName + " ☆";
    		lastName = "★ " + lastName + " ★";
    		
    		// 데이터 전달
    		request.setAttribute("firstName", firstName);
    		request.setAttribute("lastName", lastName);
    		
    		// 상황에 따른 뷰 선택(지정) 가능
    		result = "WEB-INF/view/HelloReceive03.jsp";
    				
    		return result;
    	}
    }

    • HelloReceive03.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>HelloReceive03.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>결과 수신 페이지</h1>
    	<h2>(HelloReceive03.jsp)</h2>
    	<hr />
    </div>
    
    <div>
    	<ul>
    		<li><b>First Name : </b>${firstName }</li>
    		<li><b>Last Name : </b>${lastName }</li>
    	</ul>
    </div>
    
    </body>
    </html>

    • 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>
    
    	<!-- SendController -->
    	<servlet>
    		<servlet-name>SendController</servlet-name>
    		<servlet-class>com.test.ctrl.HelloSend03Controller</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>SendController</servlet-name>
    		<url-pattern>/hello</url-pattern>	
    	</servlet-mapping>
    
    	<!-- ReceiveController -->
    	<servlet>
    		<servlet-name>ReceiveController</servlet-name>
    		<servlet-class>com.test.ctrl.HelloReceive03Controller</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>ReceiveController</servlet-name>
    		<url-pattern>/helloreceive03</url-pattern>	
    	</servlet-mapping>
    
    </web-app>
    728x90
Designed by planet-si