[JSP] 내장 객체

HodooHa·2024년 5월 24일
post-thumbnail

JSP에서는 수행문과 표현식에서 사용할 수 있는 내장 객체를 지원한다.
이를 이용하여 JSP 내 상당수의 자바 코드를 삭제할 수 있다.

원래 자바에서는 힙(heap) 메모리에 생성된 객체에 직접 접근할 수 없기 때문에 참조 변수 선언 없이 객체를 사용하는 것은 불가능하다. 그러나 JSP가 제공하는 내장 객체를 통해 변수 선언 및 초기화 과정이 없이 사용할 수 있다. 대표적인 내장 객체는 request와 response, session이다.

※ JSP에서 서블릿을 사용할 수 있는 것은 서버가 JSP를 서블릿으로 변환하는 과정에서 자동으로 선언되고 초기화된다.

내장 객체의 종류

내장 객체를 이용한 정보 공유

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

[예시] 로그인 시 회원정보 session에 저장

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)의 교육을 수강하고 작성되었습니다.

profile
성장하는 개발자, 하지은입니다.

0개의 댓글