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
관리 메뉴

parisangsoo

Ajax,EL,Json 03/20 본문

JSP

Ajax,EL,Json 03/20

SangssI 2023. 3. 21. 22:25

1. Ajax(비동기 통신) : 자바스크립트를 이용한 백그라운드 통신기술 (하나의 웹페이지 안  에서 변경이 발생한 특정 영역에  대해서만 갱신이 가능

Ex) 1. ex01_gugudan.jsp

<!-- Ajax( Asynchronus Javascript & xml ) : 비동기통신 
     자바스크립트를 이용한 백그라운드 통신기술( 하나의 웹페이지 안에서 변경이 발생한 특정 영역에 대해서만 갱신이 가능하다 )-->    
    
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	
		<!-- Ajax사용을 위해 미리 준비해둔 httpRequest.js를 참조 -->
		<script src="js/httpRequest.js"></script>
		
		<script>
			function send(){
				let dan = document.getElementById("dan").value;
				
				//유효성 체크
				
				//Ajax를 통해 dan을 파라미터로 전달
				let url = "ex01_gugudan_ajax.jsp";
				let param = "dan="+dan;
				
				//                      콜백메서드
				sendRequest(url, param, resultFn, "GET");
			}	
			
			//콜백 메서드( Ajax로 요청된 결과를 처리하기위한 메서드 )
			function resultFn(){
				//console.log( xhr.readyState + "/" + xhr.status );
				//xhr.readyState
				//-0 : 초기화 오류
				//-1,2,3 : 현재 페이지 로드 중
				//4 : 로드완료
				
				//xhr.status
				//200 : 이상없음
				//404 : 경로없음, 500 : 서버에러
				
				if( xhr.readyState == 4 && xhr.status == 200 ){
					//결과를 가지고 돌아온 데이터를 읽어온다
					let data = xhr.responseText;
					//alert(data);
					
					document.getElementById("disp").innerHTML = data;
				}
			}
			
		</script>
	</head>
	
	<body>
		단 : <input id="dan">
		<input type="button" value="결과보기" onclick="send();">
		<br>
		<div id="disp"></div>
	</body>
</html>

2. ex01_gugudan.ajax.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	//ex01_gugudan_ajax.jsp?dan=5
	int dan = Integer.parseInt( request.getParameter("dan") );

	String str = "";

	for( int i = 1; i <= 9; i++ ){
		str += String.format("%d x %d = %d<br>", dan, i, dan*i );
	}
%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%= str %>
</body>
</html>

1. Json : 서로 다른 플랫폼에서 데이터를 교환하기위해 정의되어 있는 공통적(약속된)  표기법

1. ex02_json.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- JSON(Javascript Object Notation)표기법 : 
     서로 다른 플랫폼에서 데이터를 교환하기위해 정의되어 있는 공통적(약속된)인 표기법 -->    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

	<script>
		//기본형태의 json구조
		let p = { 'name':'홍길동', 'age':30, 'tel':'010-123-1234' };
		document.write(p.name + " / " + p['age'] + " / " + p.tel);
		
		document.write("<hr>");
		
		//배열형태의 json구조
		let p_arr = [ {'name':'hong', 'age':20 }, 
			          {'name':'kim', 'age':30 }, 
			          {'name':'park', 'age':40 } ];
		
		document.write( p_arr[0].name + " / " + p_arr[0].age + "<br>");
		document.write( p_arr[1].name + " / " + p_arr[1].age + "<br>");
		
		document.write("<hr>");
		
		let course = { 'name':'임베디드웹개발', 
				       'start':'2023-01-01', 
				       'end':'2023-06-01',
				       'sub':['java', 'web', 'jsp'], 
				       'student':[ {'name':'hong', 'age':'20'},
				    	   		   {'name':'kim', 'age':24},
				    	   		   {'name':'park', 'age':30}]};
		
		document.write( "과목명 : " + course.name + "<br>" );
		document.write( "시작일 : " + course.start + "<br>" );
		document.write( "종료일 : " + course.end + "<br>" );
		
		document.write( "<hr>" );
		
		for( let i = 0; i < course.sub.length; i++ ){
			
			document.write( course.sub[i] + " / " );
			
		}
		
		document.write("<hr>");
		
		for( let i = 0; i < course.student.length; i++ ){
			document.write( course.student[i].name + " / " + course.student[i].age + "<br>" );
		}
		
	</script>

</head>
<body>

</body>
</html>

1. EL : jsp에서 사용되는 표현식을 더 간결하게 사용할 수 있도록 해주는 표현형태

1.ex03_EL.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- EL표기법 : jsp에서 사용되는 표현식을 더 간결하게 사용할 수 있도록 해 주는 표현형태
     EL(Expression Language) - EL로 값을 표현하려면 jsp의 관리하에 있는 4개의 영역에서만 사용을 할 수 있다 
     1) page영역 : 단 하나의 페이지(현재페이지)에서만 값을 저장하고 공유할 수 있다 
     2) request영역(가장 많이 쓰임) : 지역개념으로 페이지가 닫히면 영역도 종료가 된다.
                                                                  최대 두 개의 페이지에서 값을 저장하거나 공유할 수 있다.
     3) session영역 : 전역 개념으로 브라우저가 완전히 종료되기 전까지는 영역이 살아있다.
                                         같은 웹 브라우저 내에서 요청되는 페이지들에게 값을 공유
     4) application영역 : 한 프로젝트에서 요청되는 페이지들간 값의 공유
     
     EL의 접근형식 : 달러표시{ 영역.변수 } -->    
    
     <%
     	String msg = "안녕"; 
     	
     	//pageScope에 값을 저장
     	pageContext.setAttribute("msg", "page영역입니다");
     
     	//requestScope에 값을 저장
     	request.setAttribute("msg", "request영역입니다");
     	request.setAttribute("hi", "안녕하세요");
     	
     	//sessionScope에 값을 저장
     	session.setAttribute("msg", "session 영역입니다");
     %>
    
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	
	<body>
		일반jsp 표현식 : <%= msg %> <br>
		EL표현식(생략) : ${ msg }<br>
		EL표현식(생략) : ${ hi }<br>
		EL표현식(생략x) : ${ requestScope.msg }<br>
		EL표현식(생략x) : ${ sessionScope.msg }<br>
		EL표현식(파라미터) : ${ param.age }
		<!-- 생략식을 사용했을 때 영역의 참조 순서
		1.pageScope
		2.requestScope
		3.sessionScope
		4.applicationScope -->
		
		<hr>
		EL표기법의 연산자<br>
		\${ 1 + 1 }<br>
		\${ 2 + 2 } = ${ 2 + 2 }<br>
		${ 10 / 3 }<br>
		${ 10 % 3 }
		
		<hr>
		
		비교연산자<br>
		\${ 3 > 2 } = ${ 3 > 2 } or ${ 3 gt 2 }<br>
		${ 3 < 2 } or ${ 3 lt 2 }<br>
		${ 3 ge 2 } or ${ 3 >= 2 }<br>
		${ 3 == 2 } or ${ 3 eq 2 }<br>
		${ 3 != 2 } or ${ 3 ne 2 }<br>
		
		<hr>
		
		삼항연산자<br>
		파라미터 값 : ${ param.msg == null ? '값 없음' : param.msg }<br>
		파라미터 값 : ${ empty param.msg ? '값 없음' : param.msg }<br>
		
		<hr>
		
		논리연산자<br>
		${ 10 gt 3 && 5 eq 5 }<br>
		${ 10 gt 3 and 5 eq 5 }
		
	</body>
</html>

2.ex04_EL.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="vo.TestVO"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	Map<String, Object> map = new HashMap<>();
	map.put("name", "홍길동");
	map.put("age", 20);
	map.put("tall", 167.2 );
	
	request.setAttribute("myMap", map);
	
	//request영역에 VO를 저장하고 출력해보자
	TestVO vo1 = new TestVO();
	vo1.setName("홍길동");
	vo1.setAge(22);
	
	TestVO vo2 = new TestVO();
	vo2.setName("김길동");
	vo2.setAge(26);
	
	request.setAttribute("vo", vo1);
	
	//ArryList에 담긴 vo들의 정보를 출력
	List<TestVO> list = new ArrayList<>();
	list.add(vo1);
	list.add(vo2);
	request.setAttribute("arr", list);
%>    
    
<!DOCTYPE html>
<html>
	<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	</head>
	
	<body>
		이름 : ${ myMap.get("name") }<br>
		나이 : ${ myMap['age'] }<br>
		키 : ${ myMap.tall } -> 가장 많이 사용하는 방법 
		
		<hr>
		
		이름 : ${ vo.name }<br> 
		나이 : ${ vo.age }  
		
		<hr>
		
		${ arr[0].name } / ${ arr[0].age }<br>
		${ arr[1].name } / ${ arr[1].age }
	</body>
</html>

'JSP' 카테고리의 다른 글

모델 2 회원정보 프로그램(JSP 03/21)  (0) 2023.03.21
JSTL 03/21  (0) 2023.03.21
03/17 JSP (베이커리 홈페이지)  (0) 2023.03.19
03/16 (친구관리 홈페이지)  (0) 2023.03.19
JSP 03/16 (성적관리 홈페이지)  (0) 2023.03.19
Comments