내장객체란, jsp가 서블릿 코드로 변환될 때 참조할 수 있는 객체들로 jsp의 스크립트릿 등에서 별도의 선언없이 사용할 수 있는 자바 객체를 말한다.
프로그램에서 변수를 사용하려면 변수를 선언하고 초기화하는 작업이 선행되어야 한다. 다음 3단계를 거쳐야 변수를 사용할 수 있다.
1. 변수 선언 -> PrintWriter out;
2. 변수 초기화 -> out = res.getWriter();
3. 변수 사용 -> out.print("Hello");
하지만, JSP에서는 이 과정을 거치지 않고 바로 out.print();를 쓴다. 이는 JSP에서 내장 객체를 지원해주기 때문이다. 내장 객체에는 request, response, out, session, application, pageContext, page, confing, exception 총 9가지의 내장 객체가 있다. 내장 객체의 종류에 대해 자세히 알아 보자.
request와 response 내장객체는 각각 HttpServletRequest와 HttpServletResponse 타입으로 요청정보와 응답정보를 처리하는 객체이다.
<body>
<form>
ID : <input type="text" name=id><br>
비밀번호 : <input type="password" name=pwd><br>
<input type="submit" value="로그인"><br>
</form>
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
%>
<%= id %><br>
<%= pwd %>
</body>
간단하게 아이디와 비밀번호를 받는 소스를 작성해 보았다. 여기서 request의 getParameter() 메소드를 이용해서 아이디, 비밀번호 문자열을 추출하여 지역변수에 저장하는 역할을 한다.
위 사진과 같이 아이디, 비밀번호를 입력하면 밑에 출력을 한다.
이 값은 주소에도 나타난다. => http://localhost:8080/blog/test1.jsp?id=123&pwd=456
JSP 페이지의 실행결과를 웹 브라우저로 되돌력 줄 때 사용되는 객체이다. 서버에서 클라이언트에 대한 응답을 response 객체를 통하여 처리한다.
보통 redirect를 사용하기 위해 response를 사용한다.
response.sendRedirect("www.naver.com");
sendRedirect() 메서드는 지정된 url로 이동하기 위해 사용한다.
session은 javax.servlet.http.HttpSession의 내장 객체로서 클라리언트마다 하나씩 생성되며, 클라이언트 단위로 정보를 유지하고자 할 때 사용한다. session은 해당 클라이언트 내에서 유효하다.
<body>
<form action="test1.jsp" method="post">
ID : <input type="text" name=id><br>
비밀번호 : <input type="password" name=pwd><br>
<input type="submit" value="로그인"><br>
</form>
</body>
<body>
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
if(session.isNew() || session.getAttribute("id") == null) {
session.setAttribute("id",id);
out.println("로그인 작업이 완료되었습니다.");
} else {
out.println("이미 로그인 상태입니다.");
}
%>
</body>
logInOut.jsp 페이지에서 ID와 비밀번호를 입력받은 후 현재 로그인 상태인지를 판단하여 로그인 상태가 아니면 로그인 처리를 하여 "로그인 작업이 완료되었습니다."라는 메세지를 띄우고, 로그인 상태면 오류 메세지를 출력하는 예제를 작성해보았다. session 객체에 "id"라는 이름으로 id값을 등록하는 것으로 처리한다.
session.isNew();
메소드는 session 객체를 추출할 때 새로 생성해서 반환하면 true를 반환하고, 기존에 있던 session객체를 반환한다면 false를 반환한다.
session.getAttribute("id");
는 session객체에 "id" 이름으로 등록된 값을 추출한다.
session.setAttribute("id",id);
은 session에 "id"이름으로 id값을 등록한다. 이 작업이 로그인 처리 작업이다.
로그인 버튼을 클릭했을 때 로그인 상태가 아니면 로그인 처리 후 "로그인 작업이 완료되었습니다."를 출력하고, 로그인 상태면 "이미 로그인 상태입니다."를 출력한다.
out 내장 객체는 javax.servlet.jsp.JspWriter 타입이다. 웹 브라우저로 출력하는 기능을 한다. out 내장 객체가 가지고 있는 메소드는 크게 버퍼 관련 메소드와 출력 관련 메소드로 나눌 수 있다.
out.print();
: 괄호 안에 있는 값을 출력한다.
out.println();
: 출력 후 개행
out.clear();
: 버퍼에 있는 내용을 삭제하는 메소드. 버퍼의 모든 내용이 클라이언트에 전송이 완료된 후 실행되면 IOException이 발생함.
out.clearBuffer();
: 버퍼에 있는 내용을 삭제하는 메소드. 버퍼의 모든 내용이 클라이언트에 전송이 완료된 후 실행되면 IOException이 발생하지 않음
out.close();
: 출력 스트림 해제.
out.flush();
: 버퍼에 있는 내용을 강제로 전송한다. 버퍼가 꽉 차 있는지와 상관없이 버퍼의 내용을 전송한다.
out.getBufferSize();
: 버퍼의 크기 추출.
out.getRemaining();
: 버퍼의 남아 있는 크기 추출.
out.isAutoFlush();
: 버퍼의 크기만큼 내용이 채워져 있을 때 자동전송 여부 확인.
application 내장 객체는 javax.servlet.ServletContext 타입이다. 웹 애플리케이션마다 하나씩, 서비스가 시작될 때 생성되는 객체로서, 서버에 대한 정보 추출과 웹 애플리케이션 단위로 상태 정보를 유지하기 위해 사용한다. 이 객체는 실행되는 동안 범용 적으로 모든 jsp에서 유효하다. public과 비슷한 개념이라고 생각하면 된다.
pageContext 내장 객체는 javax.servlet.jsp.PageContext 타입이다. pageContext는 JSP 페이지당 하나씩 자동으로 생성되는 객체이다.
forward(String relativeUrlPath)
: 인자 값으로 지정된 페이지로 이동
getException()
: 현재 발생된 Exception 객체 반환
getPage()
: 현재 JSP 문서 정보 객체 반환
getRequest()
: 현재 JSP 문서의 HttpServletRequest 객체 반환
getResponse()
: 현재 JSP 문서의 HttpServletResponse 객체 반환
getServletConfig()
: 현재 JSP 문서의 ServletConfig 객체 반환
getServletContext()
: 현재 JSP 문서의 ServletContext 객체 반환
getSession()
: 현재 JSP 문서의 HttpSession 객체 반환
include(String relativeUrlPath)
: 인자값으로 지정된 페이지를 현재 JSP 문서에 포함
객체이름 | |
---|---|
입출력 객체 | request, response, out |
서블릿 객체 | page, config |
세션 객체 | session |
예외 객체 | exception |
참고 문헌 : 처음해보는 Servlet&JSP 웹프로그래밍