ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP] JSP의 request , response주요 메소드, 리다이렉트, 포워드
    Web/JSP 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만 출력

     

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

     

    반응형

    'Web > JSP' 카테고리의 다른 글

    [JSP] JSP기본객체(내장객체)  (0) 2019.07.12
    [JSP] Directives (JSP지시어)  (0) 2019.07.11
    [BootStrap] HTML 테이블에 부트스트랩 적용하기  (0) 2019.07.10
    [JSP] JSP 기본 태그  (0) 2019.07.10
    JSP란? 자바 서버 페이지  (0) 2018.12.16

    댓글

Designed by Tistory.