Web Dev/JSP

JSP 5강 :: JSP 요청과 응답, 내장객체

HJPlumtree 2022. 10. 10. 13:58

JSP에서 기억하고 싶은 내용

 

 

JSP의 요청과 응답이란

요청: 클라이언트가 웹 서버에게 특정 페이지 전송 요구

응답: 웹 서버가 클라이언트에게 결과 전송

 

 

request 내장 객체

클라이언트의 요청 표현하는 JSP 내장 객체

HttpServletRequest 유형

 

내장 객체 기능

  • 클라이언트가 서버 관련 정보 읽기
  • 클라이언트가 전송한 파라미터 읽기
  • 클라이언트가 전송한 헤더, 쿠키 정보 읽기
  • 데이터 공유

 

내장 객체 사용 예시

<li>클라이언트 주소: <%=request.getRemoteAddr() %></li>
<li>요청 정보 길이: <%=request.getContentLength() %></li>
<li>인코딩: <%=request.getCharacterEncoding() %></li>
<li>문서 타입: <%=request.getContentType() %></li>
<li>프로토콜: <%=request.getProtocol() %></li>
<li>전송방식: <%=request.getMethod() %></li>
<li>요청 URI: <%=request.getRequestURI() %></li>

 

 

HTML Form

  • 유저가 데이터를 입력하기 위한 틀
  • 요청과 함께 서버로 데이터 전송 가능
  • 입력된 정보는 파라미터로 전송된다
  • request 객체를 이용해서 파라미터 읽고 처리 가능

 

 

요청 파라미터 읽기

- 인코딩 해주고

<% request.setCharacterEncoding("UTF-8") %>

 

1. 값 읽기 첫 번째 방법(파라미터 이름 알고 있을 때)

<%=request.getParameter("name") %>

 

2. 값 읽기 두 번째 방법(파라미터 이름 몰라도 됨)

Enumeration<String> p = request.getParameterNames()
while(p.hasMoreElements){

}

 

3. 값 읽기 세 번째 방법(파라미터 이름 몰라도 됨)

Map<String, String[]> m = request.getParameterMap()
for(String name: m.keySet()) {
  String[] values = m.get(name)
  
  ...
}

 

 

Get과 조금 다른 Post 방식

  • body에 데이터 전달
  • 길이 제한 없고 보안이 Get 보다 유리
  • 게시글 포스팅, 암호, 신용카드 정보 보낼 때
  • 히스토리가 안남아서 북마크 불가

 

 

response 내장 객체

  • 응답 헤더 정보 설정: setHeader()
  • 쿠키 추가: addCookie()
  • 상태코드 설정: setStatus()
  • 응답 body 만들기 위해 출력 스트림 객체 제공
    : getWriter(), getOutputStream()
  • 다른페이지 강제 이동: sendRedirect()
      웹 서버가 웹 브라우저한테 다른 페이지로 이동하라고 지시
      상태 코드 302면, 응답 헤더에 있는 Location에 있는 URL로 이동
      <jsp:forward>와 비슷하지만 조금 다르다
      이동 URL에 특수 문자나 한글 인코딩 필요
      URLEncoder.encode(String s, "UTF-8") 사용

 

 

응답시 캐시 사용

서버에 요청하지 않고 캐시에 있는 데이터를 사용해서 응답

 

장점

  • 빠른 응답 가능
  • 서버 로드와 네트워크 사용 감소

주의점

  • 변경이 빈번하면 잘못된 결과 응답 가능