220324 model2_ JavaServlet, 표현언어(EL)
- JavaServlet -> JSP Forwarding 방법
0. 포워딩: 서블릿 프로그래밍 시 서블릿끼리, 혹은 서블릿과 JSP 사이에 정보를 공유하거나 정보를 전달하는 등의 연동 작업이 필요할 때 사용하는 기능
(참고+ session 영역에 저장된 값은 웹페이지 하나에 유효하므로 어떤 방식으로 포워딩하든 값이 유지됨)
1. Dispatcher 방식
: request, response에 담긴 값이 유효(유지) -> 새로 고침(재요청) 시에도 재동작
: 이동된 url이 화면에 보이지 않음 (url이 변경되지 않음) -> login.html에서 로그인해서 login1.jsp login2.jsp 거쳐도 처음 주소 유지
: request.setAttribute(name, value) -> controller가 view에 정보를 공유
: request 객체에 소속됨
>> 정보 조회에 적합 (전달된 값을 계속 볼 일이 있는 경우)
request.setAttribute("request","requestValue"); // 공유 설정 RequestDispatcher dispatcher = request.getRequestDispatcher("./servlet/ex666/login.jsp"); //webContent 폴더 기준으로 위치 설정 dispatcher.forward(request, response); ----------------- login.jsp에서 값을 가져올 때 <%= request.getAttribute ("request") %> |
2. Redirect 방식
: request, response 유지되지 않음 (새로 생성) -> 클라이언트가 새로 페이지를 요청한 것과 같은 방식
: 이동된 url이 화면에 보임 (url이 변경됨)
: response 객체에 소속됨
>> 정보 생성, 수정, 삭제에 적합 (전달된 값을 한 번만 전달하면 끝나는 경우)
회원가입하고 다시 로그인하라고 뜨는 이유... redirect 방식으로 회원가입하고 새고하면 공유가 되지 않기 때문이었던 것임
response.sendRedirect("redirect.jsp");
View
* 표현언어(EL, Expression Language)
: JSP의 표현식 태그와 비슷한 역할 <%= %>
: ${ } 기호 사용
: JSP 네 영역 객체로 공유한 값을 구해올 수 있음 ex ${sessionScope.id}
+) JSTL의 <c:set > 태그로 정의된 변수도 가져올 수 있음!
: 연산자 사용 가능( 산술, 비교,논리, 조건, empty etc.) ex ${10+20}
: 자바빈 클래스의 getter 메소드 호출 가능 ex ${article.id} -> 객체명.프로퍼티명 으로 표시!
ex <jsp:useBean id="product" class="jspbook.Product" scope="session"/> 의 값인 product.getNum1()을 불러올 때
---> ${product.num1} 이렇게 ${객체명.프로퍼티명} 형태로 불러올 수 있음
(+) scope="session" 즉 세션 영역에 공유되므로 다른 url로 넘어가서도 그대로 객체를 사용할 수 있음!
- 간단한 예
- 표현식 태그 vs 표현 언어 비교
표현식 태그 | 표현언어(EL) |
String str = "jsp"; | request.setAttribute("str",str); |
<%=str %> | ${str} |
<%=article.getId()%> | ${article.id} |
<%=session.getAttribute("test")%> | ${sessionScope.test} |
<%=request.getArrtibute("page")%> | ${requestScope.page} |
<%=request.getParameter("name")%> | ${param.name} |
<%=request.getParameterValues("choice")%> | ${paramValues.choice} |
- 기본 객체
pageScope, applicationScope는 영역이 너무 좁거나 넓어서 자주 사용하지 않음