ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 22-09-13_jsp(2)
    main 2022. 9. 13. 18:32

    -====

    의사코드 작성..

    1. request 전송(front-end)
    1) 버튿(generate 버튼 제외, 동적 버튼 포함 ) click 이벤트 처리
    2) 비동기 요청 발생
    - 조건1)클릭이 발생한 버튼으로부터 data(dataType) 속성 확보 dataType
    - 조건2)laguage 라디오 버튼의 값으로 파라미터 형성

    2. response 생성( back-end)
    1) 메세지 번들 로딩(ResourceBundle api)
    2) "hello"코드 메세지 확보
    3) 확보한 메세지를 컨텐츠화(Accept 헤더에 따라 Content-Type 결정)

    3. response 수신 후 처리 (front-end) : success function

     

    -----------------

    이벤트는 발생했는데 handler는 동작하지 않는...

     

    	$(document).on("click","button:not(.generator)" ,function(){
    		console.log(this);
    	});

    이릏게 동적.. document에다가 걸어서 해줘여ㅑ...

     

    문자로뜸...

     

    $("[]")  ==>  attribute selector

     

    language : $("[name='language']:checked").val()

     ==> language라는 property를 가진 객체로 만들었다...

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>06/messageBundle.jsp</title>
    <jsp:include page="/includee/preScript.jsp" />
    
    	<!-- 미션이 아마, xml, json, html? 방식으로 message의 hello를 span[id=resultArea]에 출력하기?임 -->
    
    </head>
    <body>
    	<input type="radio" name="language" value="ko" checked/>한글
    	<input type="radio" name="language" value="en" />영문
    	
    	<button class="generate">버튼 생성</button>
    	
    		<!-- (1)이것들을 불러오려면...id를줘야할거같고요 -->
    	<button type="button" data-data-type="json" id="json">JSON</button>
    	<button type="button" data-data-type="xml" id="xml">XML</button>
    	
    	<span id="resultArea"></span>
    	
    	<script type="text/javascript">
    	$(".generate").on("click",function(){
    		let newBtn = $("<button>").text("HTML")
    								 .data("dataType","html");
    		//마지막 버튼을 선택해라	, after 그 다음에 추가할거다 newBtn을	 
    		$("button:last").after(newBtn);
    	});
    	
    	
    //	1. request 전송(front-end)
    //		1) 버튿(generate 버튼 제외, 동적 버튼 포함 ) click 이벤트 처리
    //		2) 비동기 요청 발생
    //			- 조건1)클릭이 발생한 버튼으로부터 data(dataType) 속성 확보 dataType
    //			- 조건2)laguage 라디오 버튼의 값으로 파라미터 형성
    	$(document).on("click","button:not(.generator)" ,function(){
    		let dataType = $(this).data('dataType');
    		let settings = {
    				url : "<%=request.getContextPath()%>/getMessage",
    				success : function(resp) {
    
    				},
    				error : function(errorResp) {
    					console.log(errorResp.status);
    				}
    			};
    								//3항연산자 dataType을 기본으로 쓰되 없으면 json써라
    		settings['dataType'] = dataType ? dataType : "json";
    						//check가 된 radio버튼만 가져오기..
    		settings.data = {language : $("[name='language']:checked").val()
    								
    						};
    		$.ajax(settings);
    	});
    //	2. response 생성( back-end)
    //		1) 메세지 번들 로딩(ResourceBundle api)
    //		2) "hello"코드 메세지 확보
    //		3) 확보한 메세지를 컨텐츠화(Accept 헤더에 따라 Content-Type 결정)
    		
    //	3. response 수신 후 처리 (front-end) : success function
    	
    	
    	
    	</script>
    </body>
    </html>

    1단계완료

    ---

    servlet

    ----

     

     

    필드에 가면 vo아예 없는데도 있는데, map이 그 역할 다 하고 있음. 

    -> 장점 : 굉장히 유연함

     

    저런거쓸거임..

     

    //json으로 만들건지, xml로 만들건지...

    이거는 

    이거 가지고 할건데 header가 웅앵..

    dataType는 Accept라는 header와 Content-Type을 결정함

     

    package kr.or.ddit.servlet06;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Collections;
    import java.util.Map;
    import java.util.ResourceBundle;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
    /**
     * Servlet implementation class MessageBundleResadServlet
     */
    @WebServlet(name = "MessageBundleReadServlet", urlPatterns = { "/getMessage" })
    public class MessageBundleResadServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //		1) 메세지 번들 로딩(ResourceBundle api)
    //		2) "hello"코드 메세지 확보
    //		3) 확보한 메세지를 컨텐츠화(Accept 헤더에 따라 Content-Type 결정)
    		
    		//번들 로딩
    		String baseName ="egovframework/message/com/message-common";
    		ResourceBundle bundle = ResourceBundle.getBundle(baseName);
    
    		//hello꺼내기
    		String value = bundle.getString("hello");
    		
    		//이걸... json데이터로 만들려면 객체화 해야 하는데 우리는 '안녕하세요'라는 값만 가짐..
    		//이걸 먼저 객체화 시켜야 함
    		//map이라는 collection이 필요하다고...
    		Map<String, Object> model = Collections.singletonMap("hello", value);
    		//이게 가공된 information, 이게 xml이나 json이되면 그게 content
    		
    		//json으로 만들건지, xml로 만들건지...
    		String accept = request.getHeader("Accept");
    		String contentType = null;
    		
    		if(accept.contains("json")) {
    			contentType = "application/json;charset=UTF-8";
    			//받을 content가 있으면 header에 이게 필요하죠
    			response.setContentType(contentType);
    			
    			try (
    					PrintWriter out = response.getWriter();
    				){
    					//marshalling 하려면 write해야..
    					//model이 information이니까 이걸 넘겨야지
    					new ObjectMapper().writeValue(out, model);
    				} 
    			
    		}else if(accept.contains("xml")) {
    			contentType = "application/xml;charset=UTF-8";
    			try (
    					PrintWriter out = response.getWriter();
    				){
    					//여기는 xml mapper로 바뀌겠죠. 같은 내용인데
    					new XmlMapper().writeValue(out, model);
    				} 
    		}else {
    			contentType = "text/html;charset=UTF-8";
    			//일단 여기는 비워놓을 거예요. html은 아직은 처리가 안 되는 거지
    		}
    		
    		
    	}
    
    
    
    }

    2단계 완료

     

    ---

     

     

     

    $(resp).find("hello");

    이거랑

    resultArea.html(resp.hello);

    이거는 같은건데... content의 종류에 따라서 다르게 적은 거지

     

    --

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>06/messageBundle.jsp</title>
    <jsp:include page="/includee/preScript.jsp" />
    
    	<!-- 미션이 아마, xml, json, html? 방식으로 message의 hello를 span[id=resultArea]에 출력하기?임 -->
    
    </head>
    <body>
    	<input type="radio" name="language" value="ko" checked/>한글
    	<input type="radio" name="language" value="en" />영문
    	
    	<button class="generate">버튼 생성</button>
    	
    		<!-- (1)이것들을 불러오려면...id를줘야할거같고요 -->
    	<button type="button" data-data-type="json" id="json">JSON</button>
    	<button type="button" data-data-type="xml" id="xml">XML</button>
    	
    	<span id="resultArea"></span>
    	
    	<script type="text/javascript">
    	$(".generate").on("click",function(){
    		let newBtn = $("<button>").text("HTML")
    								 .data("dataType","html");
    		//마지막 버튼을 선택해라	, after 그 다음에 추가할거다 newBtn을	 
    		$("button:last").after(newBtn);
    	});
    	
    	
    //	1. request 전송(front-end)
    //		1) 버튿(generate 버튼 제외, 동적 버튼 포함 ) click 이벤트 처리
    //		2) 비동기 요청 발생
    //			- 조건1)클릭이 발생한 버튼으로부터 data(dataType) 속성 확보 dataType
    //			- 조건2)laguage 라디오 버튼의 값으로 파라미터 형성
    
    
    	let resultArea = $("#resultArea");
    	//function이 하나가 아니라 세개니까 그거를 묶으려면 필요한게? 
    	//	- 배열은 index가 숫자뿐임 식별성이 없음. 아래와 같이 적어보자	
    	let successFunctions = {
    		//함수가 되고, json이라는 이름이 생김
    		//함수 안에서 각 content에 맞게 가지고 놀면 됨
    		json : function(resp){
    			//resultArea에 resp안에있는 hello라는 property를 넣어 주어야 함
    			resultArea.html(resp.hello);
    		},
    		xml : function(resp){
    			//어떻게 돌아오는지 알아야 하니까 일단 출력해보자
    			//console.log(resp);
    			let text = $(resp).find("hello").text();
    			resultArea.html(text);
    		},
    		html : function(resp){
    			resultArea.html(resp);
    		}
    } 
    	$(document).on("click","button:not(.generator)" ,function(){
    		//clear시켜줄거임 두가지 방법이 있음. 
    //		resultArea.html("");
    		resultArea.empty();
    		let dataType = $(this).data('dataType');
    		let settings = {
    				url : "<%=request.getContextPath()%>/getMessage",
    				success : function(resp) {
    					resp.hello
    				},	
    				error : function(errorResp) {
    					console.log(errorResp.status);
    				}
    			};
    								//3항연산자 dataType을 기본으로 쓰되 없으면 json써라
    		settings['dataType'] = dataType ? dataType : "json";
    						//check가 된 radio버튼만 가져오기..
    		//dataType에 따라 successFunctions에서 원하는 함수를 가져올 수 있다,..
    //		successFunctions['json']
    //		settings.success = successFunctions[settings['dataType']]
    		settings.success = successFunctions[settings.dataType]
    		
    		settings.data = {language : $("[name='language']:checked").val()
    								
    						};
    		$.ajax(settings);
    	});
    //	2. response 생성( back-end)
    //		1) 메세지 번들 로딩(ResourceBundle api)
    //		2) "hello"코드 메세지 확보
    //		3) 확보한 메세지를 컨텐츠화(Accept 헤더에 따라 Content-Type 결정)
    		
    //	3. response 수신 후 처리 (front-end) : success function
    	
    	
    	
    	</script>
    </body>
    </html>
    package kr.or.ddit.servlet06;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Collections;
    import java.util.Locale;
    import java.util.Map;
    import java.util.ResourceBundle;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
    /**
     * Servlet implementation class MessageBundleResadServlet
     */
    @WebServlet(name = "MessageBundleReadServlet", urlPatterns = { "/getMessage" })
    public class MessageBundleResadServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //		1) 메세지 번들 로딩(ResourceBundle api)
    //		2) "hello"코드 메세지 확보
    //		3) 확보한 메세지를 컨텐츠화(Accept 헤더에 따라 Content-Type 결정)
    		
    		//Locale 통해서 한/영 선택했을떄 다르게 나오게 설정하는거임
    		Locale locale = request.getLocale();
    		//뭘 꺼내올거면 encording 해줘야 함.
    		//Overrides the name of the character encoding used in the body of thisrequest.
    		//body있을때만이라서 body없는 get에서는 안됨
    		
    	
    		request.setCharacterEncoding("UTF-8");
    		String languageTag = request.getParameter("language");
    		if(languageTag!=null && !languageTag.isEmpty()) {
    			locale = Locale.forLanguageTag(languageTag);
    		}
    		
    		
    		//번들 로딩
    		String baseName ="egovframework/message/com/message-common";
    		ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale);
    
    		//hello꺼내기
    		String value = bundle.getString("hello");
    		
    		//이걸... json데이터로 만들려면 객체화 해야 하는데 우리는 '안녕하세요'라는 값만 가짐..
    		//이걸 먼저 객체화 시켜야 함
    		//map이라는 collection이 필요하다고...
    		Map<String, Object> model = Collections.singletonMap("hello", value);
    		//이게 가공된 information, 이게 xml이나 json이되면 그게 content
    		
    		//json으로 만들건지, xml로 만들건지...
    		String accept = request.getHeader("Accept");
    		String contentType = null;
    		
    		if(accept.contains("json")) {
    			contentType = "application/json;charset=UTF-8";
    			//받을 content가 있으면 header에 이게 필요하죠
    			response.setContentType(contentType);
    			
    			try (
    					PrintWriter out = response.getWriter();
    				){
    					//marshalling 하려면 write해야..
    					//model이 information이니까 이걸 넘겨야지
    					new ObjectMapper().writeValue(out, model);
    				} 
    			
    		}else if(accept.contains("xml")) {
    			contentType = "application/xml;charset=UTF-8";
    			response.setContentType(contentType);
    			try (
    					PrintWriter out = response.getWriter();
    				){
    					//여기는 xml mapper로 바뀌겠죠. 같은 내용인데
    					new XmlMapper().writeValue(out, model);
    				} 
    		}else {
    			contentType = "text/html;charset=UTF-8";
    			//일단 여기는 비워놓을 거예요. html은 아직은 처리가 안 되는 거지
    		}
    		
    		
    	}
    
    
    
    }

     

    이렇게 하면 실행이

     

     

    한영/xml/json 잘처리됩니다.

    --

    3단계가 되었고요

    이제 html을 할거예요....

    --

     

    view를 만들건데요,,,,.

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<!-- 이거는 model1으로는 운용을 못하는상태죠.. -->
    	<div>hello : <%=request.getAttribute("hello") %></div>
    
    </body>
    </html>

     -> 왜 운용안되는지 까먹음

     

     

     

    ===

    servlet 아래에서

    if(accept.contains("json")) {
    			contentType = "application/json;charset=UTF-8";
    			//받을 content가 있으면 header에 이게 필요하죠
    			response.setContentType(contentType);
    			
    			try (
    					PrintWriter out = response.getWriter();
    				){
    					//marshalling 하려면 write해야..
    					//model이 information이니까 이걸 넘겨야지
    					new ObjectMapper().writeValue(out, model);
    				} 
    			
    		}else if(accept.contains("xml")) {
    			contentType = "application/xml;charset=UTF-8";
    			response.setContentType(contentType);
    			try (
    					PrintWriter out = response.getWriter();
    				){
    					//여기는 xml mapper로 바뀌겠죠. 같은 내용인데
    					new XmlMapper().writeValue(out, model);
    				} 
    		}else {
    			contentType = "text/html;charset=UTF-8";
    			//일단 여기는 비워놓을 거예요. html은 아직은 처리가 안 되는 거지
    			
    			//여기서 redirect 방식으로는 못하고요 forward냐 include냐인데요
    			//forward를 쓸거예요.  
    			//여기서 만들어지는 응답이 없으니까 include 할 필요가 없으니까요
    			String viewName	="/WEB-INF/views/messageView.jsp";
    			
    			//dispatcher로 ...forward방식으로 request와 response를 넘겨요
    			request.getRequestDispatcher(viewName).forward(request, response);
    		}

    이렇게 하면

     

    잘 나오지만 근데 보면 span tag 안에 title tag 등이 들어있쬬

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <div>hello : <%=request.getAttribute("hello") %></div>
    <script type="text/javascript">
    
    </script>

    이 코드를 이렇게 간결하게 적어주고요

     

    else {
    			
    			request.setAttribute("hello", value);
    			
    			//여기서 redirect 방식으로는 못하고요 forward냐 include냐인데요
    			//forward를 쓸거예요.  
    			//여기서 만들어지는 응답이 없으니까 include 할 필요가 없으니까요
    			String viewName	="/WEB-INF/views/messageView.jsp";
    			
    			//dispatcher로 ...forward방식으로 request와 response를 넘겨요
    			request.getRequestDispatcher(viewName).forward(request, response);
    		}

    else 아래를 이렇게 적어줘요

     

    짠...

    근데 지금까지 우리가 한게 model2...?....

     

     

    	if(accept.contains("json")) {
    //			contentType = "application/json;charset=UTF-8";
    //			//받을 content가 있으면 header에 이게 필요하죠
    //			response.setContentType(contentType);
    //			
    //			try (
    //					PrintWriter out = response.getWriter();
    //				){
    //					//marshalling 하려면 write해야..
    //					//model이 information이니까 이걸 넘겨야지
    //					new ObjectMapper().writeValue(out, model);
    //				} 
    			
    		}else if(accept.contains("xml")) {
    //			contentType = "application/xml;charset=UTF-8";
    //			response.setContentType(contentType);
    //			try (
    //					PrintWriter out = response.getWriter();
    //				){
    //					//여기는 xml mapper로 바뀌겠죠. 같은 내용인데
    //					new XmlMapper().writeValue(out, model);
    //				} 
    		}else {
    			
    			request.setAttribute("hello", value);
    			
    			//여기서 redirect 방식으로는 못하고요 forward냐 include냐인데요
    			//forward를 쓸거예요.  
    			//여기서 만들어지는 응답이 없으니까 include 할 필요가 없으니까요
    			String viewName	="/WEB-INF/views/messageView.jsp";
    			
    			//dispatcher로 ...forward방식으로 request와 response를 넘겨요
    			request.getRequestDispatcher(viewName).forward(request, response);
    		}

    if, elseif문의 내용을 날린다면..?..... 순수하게 controller의 역할만 남는거죠...?

     

    저기 else에도 content 타입은 view에 넘어가서 거기서 처리해주죠...

     

    똑같이 

     

    controller의 역할은... ???가 끝이예요 못들음

     - data 만들고

     - information만들고

     - view로 보내주고

     

    이런게 일반적인 controller의 역할이예요

     

    ---

     

    이걸 만든건 객체가 없어서예요

    이거저거 다 날려~`~~~~~~~~ㅎ..ㅎ...

     

    view를 일반적으로 jsp로 만드는데요..

     

    지금은 왜때문인지 꼭 그럴 필요는 없대요

    view를 servlet으로 만들겠다는거죠

     

     

    -------

    request에 따라서 response..서버에서 작동하는 method가 결정됨..(post, get)

     

    ----

     

    content에 대한 책임은 view,..servlet쪽으로 넘어가는 거예요 이제 그러면 model2 아키텍쳐가 되는거죠...

     

    아악

     

    [JsonViewServlet.java]

    package kr.or.ddit.commons;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    @WebServlet("/jsonView.do")
    public class JsonViewServlet extends HttpServlet{
    	
    	@Override
    	protected void service(HttpServletRequest requeset, HttpServletResponse response) throws ServletException, IOException {
    		Map<String, Object> model = new HashMap<>();
    		Enumeration<String> attributeNames = requeset.getAttributeNames();
    		while (attributeNames.hasMoreElements()) {
    			String name = (String) attributeNames.nextElement();
    			Object value = requeset.getAttribute(name);
    			model.put(name, value);
    		}
    		
    		String contentType = "application/json;charset=UTF-8";
    		response.setContentType(contentType);
    		
    		try (
    				PrintWriter out = response.getWriter();
    			){
    				new ObjectMapper().writeValue(out, model);
    			} 
    	}
    }

     

    [XmlViewServlet.java]

    package kr.or.ddit.commons;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
    @WebServlet("/xmlView.do")
    public class XmlViewServlet extends HttpServlet{
    	
    	@Override
    	protected void service(HttpServletRequest requeset, HttpServletResponse response) throws ServletException, IOException {
    		Map<String, Object> model = new HashMap<>();
    		Enumeration<String> attributeNames = requeset.getAttributeNames();
    		while (attributeNames.hasMoreElements()) {
    			String name = (String) attributeNames.nextElement();
    			Object value = requeset.getAttribute(name);
    			model.put(name, value);
    		}
    		
    		String contentType = "application/xml;charset=UTF-8";
    		response.setContentType(contentType);
    		
    		try (
    				PrintWriter out = response.getWriter();
    			){
    				new XmlMapper().writeValue(out, model);
    			} 
    	}
    }

     

     

    [messageBundleReadServlet] 최종..

    package kr.or.ddit.servlet06;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Collections;
    import java.util.Locale;
    import java.util.Map;
    import java.util.ResourceBundle;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
    /**
     * Servlet implementation class MessageBundleResadServlet
     */
    @WebServlet(name = "MessageBundleReadServlet", urlPatterns = { "/getMessage" })
    public class MessageBundleResadServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //		1) 메세지 번들 로딩(ResourceBundle api)
    //		2) "hello"코드 메세지 확보
    //		3) 확보한 메세지를 컨텐츠화(Accept 헤더에 따라 Content-Type 결정)
    		
    		//Locale 통해서 한/영 선택했을떄 다르게 나오게 설정하는거임
    		Locale locale = request.getLocale();
    		//뭘 꺼내올거면 encording 해줘야 함.
    		//Overrides the name of the character encoding used in the body of thisrequest.
    		//body있을때만이라서 body없는 get에서는 안됨
    		
    	
    		request.setCharacterEncoding("UTF-8");
    		String languageTag = request.getParameter("language");
    		if(languageTag!=null && !languageTag.isEmpty()) {
    			locale = Locale.forLanguageTag(languageTag);
    		}
    		
    		
    		//번들 로딩
    		String baseName ="egovframework/message/com/message-common";
    		ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale);
    
    		//hello꺼내기
    		String value = bundle.getString("hello");
    		
    		//이걸... json데이터로 만들려면 객체화 해야 하는데 우리는 '안녕하세요'라는 값만 가짐..
    		//이걸 먼저 객체화 시켜야 함
    		//map이라는 collection이 필요하다고...
    //		Map<String, Object> model = Collections.singletonMap("hello", value);
    		//이게 가공된 information, 이게 xml이나 json이되면 그게 content
    		
    		//json으로 만들건지, xml로 만들건지...
    		String accept = request.getHeader("Accept");
    //		String contentType = null;
    		
    		request.setAttribute("hello", value);
    		String viewName = null;
    		
    		if(accept.contains("json")) {
    			viewName = "/jsonView.do";
    			
    		}else if(accept.contains("xml")) {
    			viewName = "/xmlView.do";
    		}else {
    			
    			
    			
    			//여기서 redirect 방식으로는 못하고요 forward냐 include냐인데요
    			//forward를 쓸거예요.  
    			//여기서 만들어지는 응답이 없으니까 include 할 필요가 없으니까요
    			viewName	="/WEB-INF/views/messageView.jsp";
    			
    			//dispatcher로 ...forward방식으로 request와 response를 넘겨요
    			
    		}
    		//view로 이동하는 코드
    		request.getRequestDispatcher(viewName).forward(request, response);
    		
    	}
    
    
    
    }

     

    [messageBundle.jsp 최종..]

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>06/messageBundle.jsp</title>
    <jsp:include page="/includee/preScript.jsp" />
    
    	<!-- 미션이 아마, xml, json, html? 방식으로 message의 hello를 span[id=resultArea]에 출력하기?임 -->
    
    </head>
    <body>
    	<input type="radio" name="language" value="ko" checked/>한글
    	<input type="radio" name="language" value="en" />영문
    	
    	<button class="generate">버튼 생성</button>
    	
    		<!-- (1)이것들을 불러오려면...id를줘야할거같고요 -->
    	<button type="button" data-data-type="json" id="json">JSON</button>
    	<button type="button" data-data-type="xml" id="xml">XML</button>
    	
    	<span id="resultArea"></span>
    	
    	<script type="text/javascript">
    	$(".generate").on("click",function(){
    		let newBtn = $("<button>").text("HTML")
    								 .data("dataType","html");
    		//마지막 버튼을 선택해라	, after 그 다음에 추가할거다 newBtn을	 
    		$("button:last").after(newBtn);
    	});
    	
    	
    //	1. request 전송(front-end)
    //		1) 버튿(generate 버튼 제외, 동적 버튼 포함 ) click 이벤트 처리
    //		2) 비동기 요청 발생
    //			- 조건1)클릭이 발생한 버튼으로부터 data(dataType) 속성 확보 dataType
    //			- 조건2)laguage 라디오 버튼의 값으로 파라미터 형성
    
    
    	let resultArea = $("#resultArea");
    	//function이 하나가 아니라 세개니까 그거를 묶으려면 필요한게? 
    	//	- 배열은 index가 숫자뿐임 식별성이 없음. 아래와 같이 적어보자	
    	let successFunctions = {
    		//함수가 되고, json이라는 이름이 생김
    		//함수 안에서 각 content에 맞게 가지고 놀면 됨
    		json : function(resp){
    			//resultArea에 resp안에있는 hello라는 property를 넣어 주어야 함
    			resultArea.html(resp.hello);
    		},
    		xml : function(resp){
    			//어떻게 돌아오는지 알아야 하니까 일단 출력해보자
    			//console.log(resp);
    			let text = $(resp).find("hello").text();
    			resultArea.html(text);
    		},
    		html : function(resp){
    			resultArea.html(resp);
    		}
    } 
    	$(document).on("click","button:not(.generator)" ,function(){
    		//clear시켜줄거임 두가지 방법이 있음. 
    //		resultArea.html("");
    		resultArea.empty();
    		let dataType = $(this).data('dataType');
    		let settings = {
    				url : "<%=request.getContextPath()%>/getMessage",
    				success : function(resp) {
    					resp.hello
    				},	
    				error : function(errorResp) {
    					console.log(errorResp.status);
    				}
    			};
    								//3항연산자 dataType을 기본으로 쓰되 없으면 json써라
    		settings['dataType'] = dataType ? dataType : "json";
    						//check가 된 radio버튼만 가져오기..
    		//dataType에 따라 successFunctions에서 원하는 함수를 가져올 수 있다,..
    //		successFunctions['json']
    //		settings.success = successFunctions[settings['dataType']]
    		settings.success = successFunctions[settings.dataType]
    		
    		settings.data = {language : $("[name='language']:checked").val()
    								
    						};
    		$.ajax(settings);
    	});
    //	2. response 생성( back-end)
    //		1) 메세지 번들 로딩(ResourceBundle api)
    //		2) "hello"코드 메세지 확보
    //		3) 확보한 메세지를 컨텐츠화(Accept 헤더에 따라 Content-Type 결정)
    		
    //	3. response 수신 후 처리 (front-end) : success function
    	
    	
    	
    	</script>
    </body>
    </html>

     

    [messageView.jsp]최종...

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <div>hello : <%=request.getAttribute("hello") %></div>
    <script type="text/javascript">
    
    </script>

     

     

    jsp....얘네는 뭔지 모르지만 tomcat이 넣어주는 property에요 우리는 신경쓸 필요가 없어요
    xml.. 그래여 잘나오면 됐져...

     

     

     

    ===

    내일 수업에서 핵심...??

    Attribute를 넣을 수 있는 게 4가지 객체???가 있는데... 그거를...

     

    내일의 핵심 키워드 

     1) 기본객체

     2) 스코프...?????

     

     

    내일은 여유가 되면 여기서 한번 더 바꿔볼거ㄹ애요...

     

    DAO나 SERVICE구조..

    layered화 시키는 구조...중프 구조와 비슷해지게 되 ㄹ거라고..

     

     

    오늘의 수업... 지난시간의 리뷰였어요... 안해도 되는 수업이었어요..

    1)??

    2) request, reponse가 어떻게 포장이 되는지..

    3) Accept와 Conent의 중요성....

     

     

     

    -- 의사코드 작성이 제일 중요해요.. 문제 해결의 핵심은 이거고요... 이거를 안써봐버릇하니까 해결이 어려운거예요

    습관을 들여봅시다.../

     

    'main' 카테고리의 다른 글

    22-09-14_jsp  (1) 2022.09.14
    22-09-14_python  (1) 2022.09.14
    22-09-13_python  (0) 2022.09.13
    22-09-08_jsp(4)  (0) 2022.09.08
    22-09-08_jsp(3)  (0) 2022.09.08
Designed by Tistory.