수업/정리

220324 model2_ JavaServlet, 표현언어(EL)

jumphare 2022. 3. 24. 22:23

 - 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는 영역이 너무 좁거나 넓어서 자주 사용하지 않음

https://velog.io/@oliviarla/%ED%91%9C%ED%98%84-%EC%96%B8%EC%96%B4EL