ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 22-09-08_jsp(1)
    main 2022. 9. 8. 15:57

    지금까지 serverside background 구성 위해 공부해옴. 

     

    50%는 요청 50%는 응답을 구성하는거

     

    요청, 어떤 구조로 전달, 어떤 데이터 가지고있고

    응답은 어떤 방식으로 포장되고 어떤 데이터 가지고 전달되는지

     

     

    빈 종이를 펴시고 두개의 피어가 어떻게 소통하는지 ㄴ[?

    요청이 몇개의 파트로 구성되고 각 파트 안에 들어가는 데이터 구조는 어떤게 있고 어떤 의미가 있는지 정리해보세요

    (맞나?)

     

     

    서로 다른 구조를 가진 두개의 피어가 소통...

    Http라는 프로토콜에따라...

    그리고필기를했는데 뭐지이게

     

     

     

     

     

    .....ex)

    1page는 UI까지 html소스 다 포함해서 가져옴

    그 후에는 resource, 자원만 가져옴. 왜냐면 표현방식이 동일하니까. RESTful....

     

    오늘할것

    어제는 400번대 하나만 봤으니까 다른것도 보자

     

    1) 200이라는 녀석을 만들어내고, 그 과ㅓㅇ에서 Http가 가진 단점을 찾아보자

    2) 300번대 상태코드 보자

    3) 500번대 상태코드보자. 그러면서 Exception에 대한걸... 500번은 서버에 문제가 생겼단 거고 거의 exception 문제니까 이걸 보자

     

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

     

    415...server가 unmarshalling 할 능력이 없음

     

    각 카테고리와 연관있는 헤더들도 같이 보자

     

    ---

     

    200 : 요청에 대한 처리가 성공했다.

    근데 이거 볼 떄 Response Header에 Refresh를 같이 보자

     

    완전한 실시간 데이터가 아님 이걸 보완할 수 있는게 Refresh

     

    HTTP 특성

     1.- ConnectLess : request vs response(1:1) 현재 요청에 대한 응답이 전송된 후 연결 종료

    이런 연결할때 통로가 생긴다고 하면, 서버는 불특정다수의 client와 연결을 계속함 그럼 통로가 계속생기고 부하가 많이 걸릴 것

    그래서 통신끝나면 저거 닫아버림

     

     

     

     2.- StateLess(비상태지향) :연결이 종료되면서 양 피어에 저장된 정보들이 삭제됨. 

    서버에 (1)통신 (2)통신 이렇게 발생한다 할때

    서버는 통신하고 state를 저장을 안함. 

    같은 client에게서 온 통신인지 server는 구분할 수 없음

     -> 이거 단점이라서 이걸 해결하기 위해, session, cookie 사용됨. 

     

    갱신되는 데이터를 클라이언트뭐라고요?ㅠ

     refresh라는 헤더를 사용하는 이유인데..

     

    이릏게 header 설정할때 ...

     

    <%@page import="java.util.Date"%>
    <%@ 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>
    <h4>현재 서버의 시간 : <%=new Date() %></h4>
    <pre>
    	HTTP 특성
    	 - ConnectLess : request vs response(1:1) 현재 요청에 대한 응답이 전송된 후 연결 종료
     	 - StateLess(비상태지향) :연결이 종료되면서 양 피어에 저장된 정보들이 삭제됨.
     	 <%
     	 	response.setIntHeader("Refresh", 1);
     	 %>   
    </pre>
    </body>
    </html>

    이렇게 하면

     

    시간이 1초마다 갱신되서 시간이 자동으로 넘어가지만 페이지를 통째로 갱신시켜버리는거임.

     

    그러면 이렇게 하면

     

    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="Refresh" content="1">
    <title>05/autoRequest.jsp</title>
    </head>
    <body>
    <h4>현재 서버의 시간 : <%=new Date() %></h4>
    <pre>
    	HTTP 특성
    	 - ConnectLess : request vs response(1:1) 현재 요청에 대한 응답이 전송된 후 연결 종료
     	 - StateLess(비상태지향) :연결이 종료되면서 양 피어에 저장된 정보들이 삭제됨.
     	 
     	 주기적인 자동 요청
     	 1. server side : Refresh 헤더
     	 2. client side :
     	 	1) HTML meta
     	 	2) JavaScript
     	 
     	 <%--
     	 	response.setIntHeader("Refresh", 1);
     	 --%>   
    </pre>
    </body>
    </html>

    Refresh header는 안쓰는데 여전히 자동갱신이 잘됨.

    이게 HTML meta 방식임

     

    javascript 방식은 두가지인데...

     

    일단 이렇게 하고 있음

    <script type="text/javascript">
    	setInterval(function(){
    		
    		
    	}, milliseconds);
    </script>

    아래 쟤는 람다방식이라 이렇게도 적을 수 있음

     

    그래서

    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="Refresh" content="1">
    <title>05/autoRequest.jsp</title>
    </head>
    <body>
    <h4>현재 서버의 시간 : <%=new Date() %></h4>
    <pre>
    	HTTP 특성
    	 - ConnectLess : request vs response(1:1) 현재 요청에 대한 응답이 전송된 후 연결 종료
     	 - StateLess(비상태지향) :연결이 종료되면서 양 피어에 저장된 정보들이 삭제됨.
     	 
     	 주기적인 자동 요청
     	 1. server side : Refresh 헤더
     	 2. client side :
     	 	1) HTML meta : http-equiv(Refresh)
     	 	2) JavaScript : Scheduling함수
     	 					timeout : 지연시간 설정하는 방식
     	 					interval(*) : 주기적 갱신 설정하는 방식
     	 
     	 <%--
     	 	response.setIntHeader("Refresh", 1);
     	 --%>   
    </pre>
    <script type="text/javascript">
    	setInterval(function(){
    		location.reload();
    	}, 1000);
    </script>
    </body>
    </html>

    요렇게도 쓸 수 있음. 

     

    그런데 이렇게 하면 전체가 계속 갱신이라 그 페이지에서 동시에 다른 작업을 못함. 

    ->비동기로 처리할 필요가 있음.

     

    Lock...동기처리...

     

    비동기....로..하려면...data오ㅓㅏ....ui가..분리가 되어야...

     

    파란건 계속 변하는 동적 데이터고 빨간건 정적 데이터,. 그럼 일단 파란거 지우고

    package kr.or.ddit.servlet05;
    
    import java.io.IOException;
    import java.util.Date;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class ServerTimeServlet
     */
    @WebServlet("/getServerTimeServlet.html")
    public class ServerTimeServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
       
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.setContentType("text/html;charset=UTF-8");
    		response.getWriter().append(new Date().toString()).close();
    	}	
    
    }

    이런걸 만들어줌

    이렇게 동작함

     

     

    --

    어어ㅏㄱㅇㅁㄴㄹ...

    --

    <%@page import="java.util.Date"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <!-- <meta http-equiv="Refresh" content="1" > -->
    <title>Insert title here</title>
    <script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/jquery-3.6.1.min.js"></script>
    </head>
    <body>
    <h4>현재 서버의 시간 : <span id="timeArea"></span></h4>
    <pre>
    	HTTP 특성
    	 - ConnectLess : request vs response(1:1) 현재 요청에 대한 응답이 전송된 후 연결 종료
     	 - StateLess(비상태지향) :연결이 종료되면서 양 피어에 저장된 정보들이 삭제됨.
     	 
     	 주기적인 자동 요청
     	 1. server side : Refresh 헤더
     	 2. client side :
     	 	1) HTML meta : http-equiv(Refresh)
     	 	2) JavaScript : Scheduling함수
     	 					timeout : 지연시간 설정하는 방식
     	 					interval(*) : 주기적 갱신 설정하는 방식
    	 
    	 <%--
    	 	response.setIntHeader("Refresh", 1);
    	 --%>
    </pre>
    <script type="text/javascript">
    	let timeArea = $("#timeArea");
     	setInterval(function(){
    // 		location.reload();
    		$.ajax({
    			url : "<%=request.getContextPath()%>/getServerTime.html",
    			method : "get",
    			dataType : "html",
    			success : function(resp) {
    				timeArea.html(resp);
    
    			},
    			error : function(errorResp) {
    				console.log(errorResp.status);
    			}
    		});
     	}, 1000);
    </script>
    </body>
    </html>

    autoRequest.jsp

     

    package kr.or.ddit.servlet05;
    
    import java.io.IOException;
    import java.util.Date;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class ServerTimeServlet
     */
    @WebServlet("/getServerTime.html")
    public class ServerTimeServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    //		response.setIntHeader("Refresh", 1);
    		response.setContentType("text/html;charset=UTF-8");
    		response.setHeader("Cache-Control", "no-store");
    		response.getWriter()
    				.append(new Date().toString())
    				.close();
    	}
    
    }

    ServerTimeServlet.java

     

     

    no-store는 cache data 저장 안하겠다는것

     

    C:\Users\PC-29\AppData\Local\Google\Chrome\User Data\Default\Cache\Cache_Data

    여기에 캐시가 저장이안될것

     

    cache 문제

     1) ?

     2) 보안

     

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

     

     

    ???? 이젠 나도 모르겠다 후 이게 계속 캐시를 날리니까 글도 ㄴ날아가네 몇번을 날아가는거야 

     

    그러해ㅔㅆ다
    뭔가 어디에 차이가있었다

    그리고 또 글이 날아가서 못들었다

     

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

     

    캐시제어

     

     

    proxy???

    프록시 서버라는 개념은 이렇게 가운데에 대리 서버가 있는거임 얘를 거쳐서 가야 함

    이렇게 하면 진짜 서버가 프록시 서버라고 생각하고 이쪽에서 client가 request보냄

    마찬가지로 server도 프록시가 client라고 생각함.

     

    이녀석은 이 장점을 이용해서 넘어가는 데이터들을 다 까볼수도있고 위변조도 기록도 가능함

    이게 프록시 서버라는개념

     

     -우리 수없이 많은 프록시 서버 사용함 예를들면 통신사..거쳐갈텐데 ....나한테는 기록 없어도 통신사한테는 다 남음...

     

    ---여러 지시자 등을 이용해서 캐시 정책 설정 가능

     

    Cache-Control : HTTP 1.1, 캐시 정책 설정(캐시 데이터를 아주 디테일하진 않아도 어느정도 설정 가능...)
    ex) max-age : 초단위 캐시 생존시간
    public/private 
    no-store(아예저장X)/no-cache(일단저장,이후 서버에 물어봄. 이거 써도돼 안돼? 서버가 304넘기면 씀, 근데 200오면 캐시 가지고있어도 안씀)
    Pragma : HTTP 1.0
    Expires : HTTP 1.* ,캐시 데이터 만료 시간 설정.

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>05/cahceControl.jsp</title>
    </head>
    <body>
    <h4>캐시 제어</h4>
    <pre>
    	Cache-Control : HTTP 1.1, 캐시 정책 설정(캐시 데이터를 아주 디테일하진 않아도 어느정도 설정 가능...)
    		ex) max-age : 초단위 캐시 생존시간
    			public/private ==>304 상태코드로(response Body X) 서버의 데이터가 갱신되지 않았음을 알림
    			no-store(아예저장X)/no-cache(저장O)
    	Pragma : HTTP 1.0
    	Expires : HTTP 1.* ,캐시 데이터 만료 시간 설정.
    	<%
    		response.setHeader("Cache-Control", "no-store");
    		response.setHeader("Pragma", "no-store");
    		response.setDateHeader("Expires", 0);
    			// 0 -> 저장하지 마세요
    	%>
    </pre>
    </body>
    </html>

    몰라 이런식으로

    몰라 살려줘

    'main' 카테고리의 다른 글

    22-09-08_jsp(3)  (0) 2022.09.08
    22-09-08_jsp(2)  (0) 2022.09.08
    22-09-07_jsp(4)  (0) 2022.09.07
    22-09-07_jsp(3)_과제있음  (0) 2022.09.07
    22-09-07_jsp(2)  (0) 2022.09.07
Designed by Tistory.