*JSP 내장객체
-객체를 생성하는 과정 없이 바로 사용할 수 있는 객체
-> 서블릿 파일로 변환될 때 서블릿 컨테이너가 객체를 자동으로 생성해주기 때문
-> 총 9개의 내장 객체 제공 (서블릿의 _jspService() 메서드가 이미 가지고 있는 객체들)
-입출력 관련 객체 : request, response, out
-서블릿 관련 객체 : page, config (환경설정)
-외부 환경 정보 제공 객체 : session, application, pageContext
-예외 관련 객체 : exception
*입출력 관련 객체 - out
-서블릿의 response.getWriter() 메서드로 얻어낸 out 객체와 동일
-서버에서 클라이언트로 열려있는 출력 스트림
-out.print(“출력합니다"); 이와 같이 출력
*입출력 관련 객체 - request
requset.getParameter(String name)
requset.getParameterValues(String name)
request.setCharacterEncoding("UTF-8")
// post방식으로 요청하기 때문에 요청 파라미터 값에 대한 한글 처리 필요, 스프링에서는 필터 태그를 추가
*파라미터
-클라이언트가 폼에 데이터를 입력한 후 서버에 요청할 때 전송되는 폼에 입력된 정보 형태
-<form>의 name 속성 값이 메서드의 전달인자로 넘어감, 그것이 파라미터 값
*입출력 관련 객체 - response
-실행 결과를 브라우저로 되돌려 줄 때 사용
-response.sendRedirect(“ ”) : 웹 페이지를 다른 위치로 강제로 이동시킴
*JSP에서 다른 페이지로 이동하기 위한 방법
1) 리다이렉트 방식
response.sendRedirect(“url”);
-브라우저의 URL이 아예 변경되버리는 것 (눈 깜짝할 새에 변경되어버림)
-변경된 URL 뒤에 전달하고자 하는 정보가 쿼리스트링 형태로 전달됨
-request, response 변경
-로그인, 회원가입, 글쓰기 등 시스템, DB의 변화가 있는 경우에 사용
2) 포워드 방식
RequestDispatcher dispatcher = request.getRequestDispatcher("url");
dispatcher.forward(request, response);
→ request.getRequestDispatcher("url").forward(request, response);
-서버 상에서 페이지가 이동되기 때문에 브라우저는 알아채지 못하고 URL도 변경되지 않음
즉, URL은 그대로인데, 안의 내용은 변경된다 (뒤에서 일이 이루어졌다는 것)
forward가 이루어진 페이지에 주구장창 써봤자 알게 모르게 페이지 전환이 이루어져 아무것도 뜨지 않음
-request, response 유지 (다른 페이지에 있는걸 거쳐거쳐도 쓸 수 있음)
-단순한 리스트보기, 검색 등의 경우에 사용
*자바스크립트 history 객체
history.go(-1) : 이전 페이지로 이동
history.back() : 이전 페이지로 이동
*내장 객체의 영역 (page < request < session < application)
1) page
-하나의 페이지를 처리할 때 사용되는 영역
-딱 그 페이지에서만, private 변수라고 볼 수 있음
-pageContext 객체를 사용하여 접근
2) request
-요청을 처리할 때 사용되는 영역
-해당 페이지와 다음 페이지까지 상태 유지 (포워드 방식에서는 달라질 수 있음?)
-페이지의 이동이 있더라도 request 객체로 값을 주고 받을 수 있음
1.이전 페이지(<form>)에서 입력된 값(파라미터)을 getParameter() 메서드로 얻어옴
2.setAttribute() 메서드로 파라미터가 아닌 원하는 정보를 저장하여 다음 페이지에서 쓸 수 있음
3.이전 페이지에서 저장한 정보를 getAttribute() 메서드로 얻어올 수 있음
3) session
-하나의 브라우저와 관련된 영역
-브라우저를 닫기 전까지 페이지가 이동하더라도 사용자 정보를 잃지 않고 서버에 보관하는 객체
4) application
-하나의 웹 어플리케이션과 관련된 영역
*내장 객체에서 정보를 주고 받기 위한 메서드
속성에 정보를 저장 -> set(세팅하다, 저장하다) / 정보를 얻어오기 -> get(가지다, 겟하다)
1) getParameter(name)
<form>에서 입력한 값을 다른 페이지에서 가져오고 싶을 때
<form>의 name 속성에 입력한 값이 파라미터라고 할 수 있음
2) setAttribute(name, value)
(id, “dblee0128”) -> name이 id인 것에 dblee0128이라는 값을 저장
3) getAttribute(name)
-위의 메서드에서 설정한 값을 가져올 때
request.getAttribute(id) 이런식으로
-리턴형이 object이므로, 가져올 때 String으로 형변환 필요
String name = (String)request.getAttribute("name");
왜? name 매개변수는 String형이고, value 매개 변수는 어떠한 값도 저장될 수 있도록 자바의 최상위
클래스인 object형으로 정의, 그러므로 이 메서드처럼 값을 찾아올 때도 object형으로 반환됨
4) getAttributeNames()
현재 객체에 관련된 모든 속성의 이름을 뽑아냄
5) removeAttribute(name)
매개 변수로 준 이름에 설정된 값을 제거
- 포워드 방식으로 전달하기 때문에, 결과값을 나타내는 다음 페이지에서 이전 페이지에서 저장한 값들을 그대로 가져와서 사용할 수 있는 것! 즉, 값들을 쓸 수 있게 하려면 포워딩 과정이 꼭 필요하다
*액션 태그
사용하는 이유?
jsp 페이지에 자바 코드를 기술하는 것보다는 태그를 기술하는 것이 깔끔하고 가독성이 높기 때문
1) <jsp:forward page=”URL” /> : 다른 사이트로 이동할 때 사용
2) <jsp:param name=”파라미터" value=”파라미터값" /> : 요청한 페이지로 정보를 전달할 때 사용
3) <jsp:include page=”url”>
-페이지의 상단, 하단을 나누어 작성하여 본문 영역에 끼울 때 사용 (top.jsp / footer.jsp)
-개별적인 여러 개의 페이지로 나눈다하여 모듈화라고 함 -> 후에 변경되어도 무리가 없음
-코드가 쭉 실행되다가 태그를 만나면 그 페이지로 직접 가서 실행하고 다시 원래 페이지로 돌아오는 과정
cf) <%@include> 지시자는 지정된 페이지가 현재 페이지에 포함되어서 하나로 합쳐진 상태에서 컴파일