JSP 기본 3

이정우·2021년 10월 22일
1

JSP

목록 보기
5/10

JSP 내장 객체

서블릿에서는 out.print를 사용하기 위해서 PrintWriter out = response.getWriter();를 선언 생성 해줬었다. 하지만 jsp에서는 이러한 작업 없이 <% out.print();%>로 바로 사용이 가능하다. 이는 jsp가 서블릿 파일로 변환될 때 jsp 서블릿 컨테이너가 객체를 자동으로 생성해주기 때문이다. 이렇게 자동으로 생성되는 9개의 객체들을 내장 객체라고 한다.

out 내장 객체

출력을 담당하는 내장 객체. jsp에서 사용할 경우 따로 객체 생성을 안 해줘도 jsp파일이 서블릿 파일로 변환될 때 자동으로 객체 생성 선언 해주기 때문에 따로 객체 생성 및 선언 없이 손 쉽게 사용 가능하다.

request 내장 객체

클라이언트의 요청과 웹 서버의 응답하는 과정을 웹 서비스라고 한다. 이러한 웹 서비스에서 클라이언트와 웹 서버 사이에서 요청과 관련된 정보가 request 내장 객체에 저장된다. 즉 request는 클라이언트에서 서버로 전송되는 데이터(요청 사항)인 셈이다.
여러 request 메소드 사용법
< body>
<%= request.getContextPath() %>< br>
<%= request.getMethod() %>< br>
<%= request.getRequestURL() %>< br>
<%= request.getRequestURI() %>< br>
<%= request.getServerName() %>< br>
<%= request.getProtocol() %>< br>
< /body>

getParameter(String name) -> 지정한 이름의 파라미터를 구해옴. 여러 값일 경우 첫 값을 가져옴.
getParameterNames() -> 모든 파라미터의 이름을 구한다.
getParameterValues(String name) -> 지정한 이름의 파라미터가 여러개 일 경우 배열 값을로 저장할 때 사용.

데이터 서버로 전송.

회원 가입, 로그인 등에서 사용자 입력 데이터를 서버로 보낼 때는 html의 < form> 태그를 사용

response 내장 객체 + 웹 페이지 이동 방식, 리다이렉트

클라이언트의 요청에 대한 응답을 처리하는 객체. sendRedirect()메서드를 사용하여 지정 브라우저로 강제 이동 가능.
해당 jsp가 실행되면 강제로 naver로 이동됨.

<%
response.sendRedirect("https://www.naver.com/");
%>

뭔가 데이터를 넘기고 싶다면 쿼리 스트링 형태로 데이터를 전송해줘야함.(url로 데이터 알려주는 방식)

response.sendRedirect("04_main.jsp?name=" + URLEncoder.encode(줄려는 데이터, "UTF-8"));

줄려는 데이터의 경우 한글이면 URLEncoder을 사용해서 encoding을 해주어야 한다.

이러한 리다이렉트 기능을 사용하는 분야로는 대표적으로 로그인 분야가 존재. 로그인 성공과 실패시의 페이지를 따로 지정해서 강제 이동시켜줘야 함. 예를 들어 성공하면 정상 페이지로 강제 이동 시켜서 정상 작동되도록 하고 실패시 로그인 실패 화면으로 강제 이동 시켜줘야함.

또 다른 웹 페이지 이동 방식 포워드 방식

포워드 방식
리다이렉트 방식과 다르게 다른 페이지로 넘어갈 때 데이터를 그냥 들고갈 수 있다. 또한 한글을 넘길 때 따로 인코딩 작업을 거치지 않아도 된다. 다른 페이지로 넘어가면 request객체가 그대로 남아 있기에 requst를 그냥 불러오기 용이하다. 또한 포워드 방식은 서버 상에서 페이지가 이동되기 때문에 사용자가 보는 url의 창과 실제 실행되고 있는 웹 페이지 주소가 다를 수 있어서 사용자에게 지금 무슨 작업을 통해 어느 페이지로 이동하는지를 감출 수 있다. 예를 들어 a페이지 내용은 쭉 있고 마지막에 포워드 방식으로 b 페이지를 불러왔다면 url에는 a페이지가 써 있지만 정작 내용은 b페이지의 내용이 사용자에게 보여질 수 있다.

request.setAttribute("name", "이정우"); //이렇게 setAttribute를 통해 값을 속성 값으로 지정해줘서 다른 페이지로 넘길 수 있다.
RequestDispatcher dispatcher = request.getRequestDispatcher("05_forwardResult.jsp");//포워드 방식 사용 방법.
dispatcher.forward(request, response); //포워드 방식 사용 방법. 포워드 방식은 기존의 request, response가 그대로 유지되기에 그 전 페이지의 정보를 이렇게 간단하게 보내줄 수 있음.

application 내장 객체

application 내장 객체는 하나의 웹 애플리케이션 안에서의 자원을 공유하는 내장 객체이다. 웹 애플리케이션이란 웹 프로젝트로써 이클립스에서의 다이나믹 웹 프로젝트 단위라고 생각하면 된다.
지금까지는 다른 웹 페이지로 이동할 경우 request 객체등을 생성하여 값을 이동시켰지만 application 내장 객체를 생성하면 하나의 웹 프로젝트 내에서 해당 자원들을 모두 공유 가능하다.

내장 객체 저장 가능 범위

application > session > request > page
왼쪽이 더욱 강력. 오른쪽으로 갈 수록 영향 영역이 좁아짐.
application : 웹 애플리케이션과 관련된 모든 영역. 한 프로젝트 안에서는 모든 페이지에서 데이터 불러오기 가능. 한 번도 값 저장 페이지를 열지 않았어도 값이 존재함. 매우 광범위.
session : 브라우저를 닫기 전까지 페이지 이동을 하더라도 정보를 잃지 않음. 한 번은 데이터를 저장하는 웹 페이지를 열어줘야지 값 저장 가능한듯. application은 안 열어도 데이터가 존재하는듯.(로그인은 세션으로 저장하는게 좋음)
request : 한 번의 요청까지는 내용 기억 가능. (페이지 이동 한 번)
page : 해당 페이지에서만. 페이지 이동 하면 속성 사라짐.

로그인 부분에서 활용 가능. 그 외에도 무궁무진.

action 태그

지금까지 배운 여러 문법들(forward , include)등을 자바 문법으론 길게 쓸걸 짧게 쓸 수 있는 jsp 문법. 효과는 같으나 자바로 쓰는 것보다 가독성면이 좋다.

출처 : 국비 교육

profile
프로그래밍 공부 중!

0개의 댓글