Web/JSP

[JSP] JSP의 request , response주요 메소드, 리다이렉트, 포워드

jinsiri 2019. 7. 11. 13:15

JSP request, response 메소드 그리고 requestDispatcher.forward()와 request.sendRedirect()

request 주요메소드)
    getParameter(String name)
      - 문자열 name과 같은 이름을 가진 파라미터의 값 얻어오기
    setAttribute(String key, Object value);   데이터 저장

    
    getAttribute(String key);    데이터 조회

    

    위 두 빨간색은 영역 객체들이 공통적으로 사용된다. (page, request, session, application)

    영역내에 데이터(숫자, 문자열, Beans, ArrayList)를 저장, 조회하는 역할


    getParameterNames();  
     

    request.getParameterValues("")

    다중선택된 값을 얻어오는 리턴이 배열인 메소드


    getCookies()
      - 모든 쿠기값을 javax.servlet.http.Cookie의 배열형태로 얻어오기
    getMethod()
      - 요청방식을 문자열로 얻어오기 ("GET","POST")
    getSession()
      - 현재 세션객체 얻어오기
    getRemoteAddr()
      - 클라이언트의 IP주소 얻어오기
    getProtocol()
      - 현재 서버의 프로토콜을 문자열 형태로 얻어오기


    setCharacterEncoding("문자집합명")
     - HTML 폼에서 한글 입력시 정상적으로 처리해주기 위해 설정.
     - POST로 전달된 한글을 처리하기 위해 사용.        

<%
	request.setCharacterEncoding("utf-8");
	String age=request.getParameter("age");
	String name=request.getParameter("name");
%>

꼭 getParameter 전에 인코딩 설정을 해줘야 한다.

페이지마다 설정하기 힘들다면 나중에 filter클래스를 사용하여 한번에 인코딩 설정을 한다.

 

그럴일은 없지만 혹시 내가 폼안의 name속성의 값을 모를경우?

Enumeration<String> names= request.getparameternames();

 

response 주요 메서드)

setContentType(type)
       - 문자열형태의 type에 지정된 MIME Type으로 contentType을 설정.
     setHeader(name,value)
       - 문자열 name의 이름으로 문자열 value의 값을 헤더로 설정.
     setDateHeader(name,date)
       - 문자열 name의 이름으로 date에 설정된 밀리세컨드 시간 값을 
          헤더에 설정.
     sendError(status, msg)
       - 오류코드를 세팅하고 메시지를 보낸다.

    sendRedirect(url)

       - 클라이언트 요청을 다른 페이지로 보낸다( 페이지 이동)

 

jsp에서는 페이지 이동 방법을 두가지를 사용한다.

 

a. 포워드 이동 <-- requestDispatcher.forward();

    - 브라우저에 출력되는 페이지와 URL에 명시된 페이지 이름이 서로 다름.

    - URL에 명시된 페이지와 이동한 페이지 간에 request를 공유.

    - 쇼핑몰, 티케팅같은경우 포워드를 사용하면 안된다.

    - 티켓 구입시 티켓정보를 insert를 하는데, 새로고침하면 두번 구매가 된다.

<%
		// 페이지 이동
		RequestDispatcher rd = request.getRequestDispatcher("/0711/end.jsp");
		rd.forward(request , response);
%>

b. 리다이렉트 이동 <-- request.sendRedirect("경로") 

    - 특징: 브라우저에 출력되는 페이지와 URL에 명시된 페이지가 서로 같다.

    - 앞 페이지와 연결을 끊어 버린다. 

    - 새로운 페이지로 이동해서 기존의 request영역 값을 하나도 사용할 수 없다.

    - start.jsp 와 end.jsp는 request를 사용할 수 없다.

    - URL에 명시된 페이지와 이동한 페이지간의 Session를 공유.

<%
		// 페이지 이동
		response.sendRedirect("end.jsp");
%>

 

데이터 영역 순서

page < request < session < application

application 서버!

<%
		pageContext.setAttribute("k1","siri"); // 현재페이지에서만 공유
		request.setAttribute("k2","하나"); // 요청관계에 있는 페이지간 공유
		session.setAttribute("k3","유나"); // 동일 브라우저(동일접속) 내에서 공유
		application.setAttribute("k4","돼지"); // 동일서버(Tomcat)에서의 공유
        
        // 페이지 이동
		RequestDispatcher rd = request.getRequestDispatcher("/0711/end.jsp"); 
		rd.forward(request , response);// request, session, application출력
		
		response.sendRedirect("end.jsp"); // session과 application만 출력
%>

리다이렉트: session, application만 출력

포워드 이동:  request, session, application만 출력

 

웹어플리케이션 = 웹 컨텍스트

 

반응형