Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

Everything has an expiration date

[AjaxJquery] 20231228, 20230102 [프로그램 소스] - PostTest01, PostTest01_ok, web.xml, PostTest02Controller, PostTest02, PostTest02OkController, PostTest02_ok 본문

[Ajax & Jquery]/Program source (Ajax & Jquery)

[AjaxJquery] 20231228, 20230102 [프로그램 소스] - PostTest01, PostTest01_ok, web.xml, PostTest02Controller, PostTest02, PostTest02OkController, PostTest02_ok

Jelly-fish 2024. 1. 2. 13:46

 

 

AjaxJquery03


`PostTest01.jsp` 에서 클라이언트가 제목(`#title`)과, 내용(`#content`)을 입력한 후
보내기 버튼(`#sendBtn`)을 클릭했을 때
Post 방식으로 `PostTest01_ok.jsp` 페이지로 데이터를 전송한 후,
다시 `PostTest01.jsp`에서 데이터를 받아와서 입력 값을 보이게 하는 실습
(간단히 확인하기 위해 MVC 모델 적용하지 않은 실습)

 


01
PostTest01.jsp


 

PostTest01.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>PostTest01.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<style type="text/css">
	#resultDiv
	{
		width: 240px;
		height: 180px;
		border: 2px solid #499bd7; 
		padding: 4px;
		
	}





</style>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
	
	$(function()
	{
		$("#sendBtn").click(function()
		{
			// 테스트
			//alert("확인~!!!");
			
			// ※ 『post()』
			//    『$.post(url, data, callBack);』
			//    - 매개변수로 전달받은 URL 을 사용하여
			//      서버에 대한 POST 요청을 전송한다.
			//    - 매개변수
			//      ·url      : (String) POST 함수로 연결하는 서버 측 URL
			//      ·data     : (Object) 이름과 값의 쌍으로 프로퍼티를 가진 객체.
			//                   미리 구성 및 인코딩 된 쿼리 스트링.
			//
			//      ·callBack : (Function) 요청이 완료되면 호출되는 함수.
			
			$.post("PostTest01_ok.jsp"
			, {title:$("#title").val(), content:$("#content").val()}
			, function(data)
			{
				$("#resultDiv").html(data);
			});
			
			
			
				
		});
		
		
	});

</script>
</head>
<body>

<div>
	<h1>jQuery 의 post() 활용 실습</h1>
	<hr>
</div>

<div> 
	제목 <input type="text" id="title" class="txt">
	<br>
	내용 <input type="text" id="content" class="txt">
	<br>
	
	
	<input type="button" id="sendBtn" value="보내기" class="btn">
</div>
<br><br>

<div id="resultDiv">
test
</div>



</body>
</html>

 


 

PostTest01_ok.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();
%>
제목 : <b>${param.title }</b>
<br>
내용 : <b>${param.content }</b>

 

 


 

`$("선택자").post(url, data, callBack 함수);` 를 사용하여
클라이언트가 입력한 두 개의 수 `#su1` 과 `#su2` 의 `#oper` 연산자에 대한 연산 결과(`#result`)를
Post 비동기 방식으로 데이터 송수신을 처리하는 실습.

 

 

web.xml
ⓐ 클라이언트가 `http://localhost:3306/AjaxJquery03/posttest02.do` 페이지를 요청했을 때
Controller : PostTest02Controller.java 가 동작하여
View : PostTest02.jsp 로 클라이언트를 접근할 수 있도록 해 준다.

 

  <!-- ⓐ -->
  <servlet>
  	<servlet-name>post02send</servlet-name>
  	<servlet-class>com.test.ajax.PostTest02Controller</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>post02send</servlet-name>
  	<url-pattern>/posttest02.do</url-pattern>
  </servlet-mapping>
  <!-- ⓐ -->

 

 

ⓑ 클라이언트가 입력한 `#su1`, `#su2`에 대한 `#oper` 연산자의 연산 결과에 대한 업무 처리를
Controller : PostTest02OkController.java 에서 수행한 후
View : PostTest02_ok.jsp 페이지로 결과를 전송한다.
이후, 최종 결과값 `${result}` 을 PostTest02.jsp 에서 읽어들여서
`<div id="result"></div>` 객체 내부의 텍스트로 삽입한다.

 

   <!-- ⓑ -->
   <servlet>
  	<servlet-name>post02ok</servlet-name>
  	<servlet-class>com.test.ajax.PostTest02OkController</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>post02ok</servlet-name>
  	<url-pattern>/posttest02ok.do</url-pattern>
  </servlet-mapping>
  <!-- ⓑ -->

 

 

전체 소스 (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>post02send</servlet-name>
  	<servlet-class>com.test.ajax.PostTest02Controller</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>post02send</servlet-name>
  	<url-pattern>/posttest02.do</url-pattern>
  </servlet-mapping>
  
   <servlet>
  	<servlet-name>post02ok</servlet-name>
  	<servlet-class>com.test.ajax.PostTest02OkController</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>post02ok</servlet-name>
  	<url-pattern>/posttest02ok.do</url-pattern>
  </servlet-mapping>
 
 
</web-app>

 


 

PostTest02Controller.java (클라이언트를 최초 요청 페이지 PostTest02.jsp 로 접근할 수 있도록 연결.)

 

/*=================================
 	PostTest02Controller.java
===================================*/

package com.test.ajax;

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;

// Test004.java (Servlet) 에서는
// GenericServlet 을 extends 를 상속하자마자 에러가 났었지만,
// HttpServlet 을 extends 하겠다고 했을 땐, 에러가 나지 않았다.
// ★ 추상 클래스이지만 추상 메소드를 갖고 있지 않은 것이다!!


// [GenericServlet] → service() Overriding
// [HttpServlet] → doGet(), doPost() Overriding



public class PostTest02Controller 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 방식이든
		// 어떤 방식의 요청에도 모두 처리할 수 있는 사용자 정의 메소드
		
		String view = "WEB-INF/view/PostTest02.jsp";
		RequestDispatcher dispatcher = request.getRequestDispatcher(view);
		dispatcher.forward(request, response);
		
	}
	
}

 


 

PostTest02.jsp (View 페이지)

 

<%@ 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>PostTest02.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<style type="text/css">
	
	.txtNum
	{
		width: 100px;
		text-align: right;
	}
	
</style>

<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript">
	
	$(function()
	{
		// 버튼 클릭 이벤트
		$("#sendButton").click(function()
		{
			//alert("버튼 클릭 확인");
			
			// post 실행.
			
			$.post("posttest02ok.do"
				, {su1:$("#su1").val(), su2:$("#su2").val(), oper:$("#oper").val()}
				, function(data)
			{
				$("#result").html(data);
				
			});
			
			// 『$.post("데이터 전송할 페이지명"), {전송할 속성명:속성값, 전송할 속성명:속성값}, function(data) { } 콜백함수);』
			
			
		});
		
	});
	
</script>
</head>
<body>

<div>
	<h1>jQuery 의 post() 활용 실습</h1>
	<hr>
</div>

<!-- 
posttest02.do
PostTest02Controller.java
PostTest02.jsp
posttest02ok.do
PostTest02OkController.java
PostTest02_ok.jsp
web.xml
 -->

<div>
	<input type="text" id="su1" class="txt txtNum">
	
	<select id="oper">
		<option value="add">덧셈</option>
		<option value="sub">뺄셈</option>
		<option value="mul">곱셈</option>
		<option value="div">나눗셈</option>
	</select>
	
	<input type="text" id="su2" class="txt txtNum">
	
	<input type="button" value=" = " id="sendButton" class="btn">
</div>
<br>

<div id="result">
</div>
<br>
<br>

<div>
	<input type="radio" name="rdo">rdo1
	<input type="radio" name="rdo">rdo2
</div>

<div>
	<input type="checkbox" name="chk">chk1
	<input type="checkbox" name="chk">chk2
</div>

<div>
	<input type="text">
</div>

</body>
</html>

 

PostTest02OkController.java (업무 처리 및 최종 연산 결과 전송)

 

/*======================================
 	PostTest02OkController.java
========================================*/

package com.test.ajax;

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;

// Test004.java (Servlet) 에서는
// GenericServlet 을 extends 를 상속하자마자 에러가 났었지만,
// HttpServlet 을 extends 하겠다고 했을 땐, 에러가 나지 않았다.
// ★ 추상 클래스이지만 추상 메소드를 갖고 있지 않은 것이다!!


// [GenericServlet] → service() Overriding
// [HttpServlet] → doGet(), doPost() Overriding



public class PostTest02OkController 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 방식이든
		// 어떤 방식의 요청에도 모두 처리할 수 있는 사용자 정의 메소드
		
		// 이전 페이지(PostTest02.jsp)로부터 넘어온 데이터 수신
		// → su1, su2, oper
		
		int su1 = Integer.parseInt(request.getParameter("su1"));
		int su2 = Integer.parseInt(request.getParameter("su2"));
		String oper = request.getParameter("oper");
		
		String result = "";
		
		if (oper.equals("add"))
		{
			result = String.format("%d + %d = %d", su1, su2, (su1+su1));
		}
		if (oper.equals("sub"))
		{
			result = String.format("%d - %d = %d", su1, su2, (su1-su1));
		}
		if (oper.equals("mul"))
		{
			result = String.format("%d * %d = %d", su1, su2, (su1*su1));
		}
		if (oper.equals("div"))
		{
			result = String.format("%d / %d = %.2f", su1, su2, ((double)su1/su1));
		}
		
		request.setAttribute("result", result);
		
		String view = "WEB-INF/view/PostTest02_ok.jsp";
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(view);
		dispatcher.forward(request, response);
		
		
	}
	
}

 


 

PostTest02_ok.jsp (최종 연산 결과 수신 및, PostTest02.jsp에서 요청한 데이터 조각을 이 페이지에서 가져감.)

 

<%@ page contentType="text/html; charset=UTF-8"%>
${result}