JAVA개념&실습

WEB : [0608] MVC패턴 실습03

u_SZero 2023. 6. 15. 23:51

! 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기 바랍니다 !


○ 폼(form) 데이터 전송 및 수신 과정 비교 (WebApp26 / WebApp27 / WebApp28)

   ※ MVC 패턴 적용 이전 단계와 MVC 패턴 적용 이후 단계를
      반드시 비교하여 이해할 수 있도록 할 것~!!!

 


WebApp26


 

  [A]

   - prj : WebApp26
  
   - 물리적 파일 구성
     ·HelloSend01.html
     ·HelloReceive01.jsp

   - 사용자 최초 요청 주소
     http://localhost:8090/WebApp26/HelloSend01.html

 


 

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>

 

 

 


WebApp27


   [B]

   - prj : WebApp27
  
   - 물리적 파일 구성
     ·HelloSend02.html
     ·HelloReceive02.java
     ·web.xml

   - 사용자 최초 요청 주소
     http://localhost:8090/WebApp27/HelloSend02.html

 


 

HelloSend02.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>(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

: 실행되는 url 패턴이 "helloreceive02"일 때 해당하는 servlet-name의

  servlet-class의 "com.svt.HelloReceive02" 경로의 파일을 실행

<?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>FirstName : </b>" + request.getParameter("firstName") + "</li>\n"
				+ "<li><b>LastName : </b>" + request.getParameter("lastName") + "</li>\n"
				+ "</ul>\n"
				+ "</div>\n"
				+ "</body>\n"
				+ "</html>\n");
		
	}
	
}

 

 

 


WebApp28


   [C]

 

   - prj : WebApp28
 
   - 물리적 파일 구성
     ·HelloSend03.html
     ·HelloSend03Controller.java
     ·HelloReceive03Controller.java
     ·HelloReceive03Model.java
     ·HelloReceive03.jsp
     ·web.xml

   - 사용자 최초 요청 주소
     http://localhost:8090/WebApp28/hello

 

 


1. hello라는 확장자도 없는 파일을 실행시킴

 

web.xml

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

    "/hello"라는 url-pattern을 찾고

    servlet-name인 SendController에 mapping되는 servlet-name을 찾아

 

2. 해당 servlet-class인 com.test.ctrl.HelloSend03Controller 를 실행시킴

 

HellosSend03Controller.java 

/*==============================
   HelloSend02Controller.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
	{
		// 서블릿 관련 코딩
		
		//_HelloReceive03.html (뷰)를 만날 수만 있게 해주면 됨, 넘겨줄 것 없음
		
		// View 객체에 대한 연결
		RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/view/HelloSend03.html");
		dispatcher.forward(request, response);
		
	}
	
}

3. RequestDispatcher로 "WEB-INF/view/HelloSend03.html" view 객체에 대한 연결을 수행

 

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" 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>

form의 action 속성을 "helloreceive03"으로 지정함으로써

 

web.xml

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

url-pattern이 "helloreceive03"인 servlet-name을 찾게 되고 servlet-name이 ReceiveController인 servlet-class

 

4. "com.test.ctrl.HelloReceive03Controller"를 실행시킨다.

 

HelloReceive03Controller.java

/*=============================
   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;
	}
}

request를 통해 전달되어온 데이터를 수신하고 추가적인 업무처리 후 데이터를 다시 뷰에 전달하는 역할을 수행한다.

 

또한, 

HelloReceive03Model.java

5. ReceiveController에서 받아온 request를 이용하여 뷰에 데이터 전달

/*=============================
   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>(HelloReceive.jsp)</h2>
	<hr />
</div>

<div>
	<ul>
		<li><b>First Name : </b>${firstName }</li>
		<li><b>Last Name : </b>${lastName }</li>
	</ul>
</div>

</body>
</html>

 


! 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기 바랍니다 !