
JSP에서는 수행문과 표현식에서 사용할 수 있는 내장 객체를 지원한다.
이를 이용하여 JSP 내 상당수의 자바 코드를 삭제할 수 있다.
원래 자바에서는 힙(heap) 메모리에 생성된 객체에 직접 접근할 수 없기 때문에 참조 변수 선언 없이 객체를 사용하는 것은 불가능하다. 그러나 JSP가 제공하는 내장 객체를 통해 변수 선언 및 초기화 과정이 없이 사용할 수 있다. 대표적인 내장 객체는 request와 response, session이다.
※ JSP에서 서블릿을 사용할 수 있는 것은 서버가 JSP를 서블릿으로 변환하는 과정에서 자동으로 선언되고 초기화된다.

HttpServletRequest, HttpSession, ServletContext가 지원하는 메소드를 이용하면 서블릿 객체들 간에 정보를 공유할 수 있다.

public class MemberLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
MemberService memberService = new MemberServiceImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userId = request.getParameter("userId");
String userPwd = request.getParameter("userPwd");
MemberDTO memberDTO = new MemberDTO();
memberDTO.setId(userId);
memberDTO.setPw(userPwd);
String page = "";
try {
MemberDTO loginMember = memberService.loginCheck(memberDTO);
if (loginMember != null) {
HttpSession session = request.getSession();
session.setAttribute("loginMember", loginMember);
// 회원 정보가 존재하면 memberDTO에 회원정보 담아 loginMember라는 이름으로 세션에 저장
response.sendRedirect(request.getContextPath());
} else {
page = "/WEB-INF/views/common/failed.jsp";
request.setAttribute("message", "로그인 실패!");
request.getRequestDispatcher(page).forward(request, response);
}
} catch (Exception e) {
page = "/WEB-INF/views/common/failed.jsp";
request.setAttribute("message", "로그인 실패!");
request.getRequestDispatcher(page).forward(request, response);
}
System.out.println("userId: " + userId + ", userPwd: " + userPwd);
}
}
정보 공유에 사용되는 객체와 그 범위를 그림으로 정리해 보았다.

HttpServletRquest가 가장 작은 공유 범위이고, 그다음이 HttpSessionsession, 가장 넓은 공유 범위는 Servletcontext이다.
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.