! 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기 바랍니다 !
○ 폼(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>
! 배워가고 있는 주인장이 쓴 글이니 정보의 정확성에 유의하시기 바랍니다 !
'JAVA개념&실습' 카테고리의 다른 글
WEB : [0608~0612] 방명록 페이지 구성 팀 과제02 (0) | 2023.08.22 |
---|---|
WEB : [0608~0612] 방명록 페이지 구성 팀 과제01 (0) | 2023.08.22 |
WEB : [0608] MVC패턴 실습02 (0) | 2023.06.15 |
WEB : [0607] DBCPConn & MVC 패턴 실습01 (0) | 2023.06.15 |
WEB : [0607] DBCPConn (0) | 2023.06.15 |