211007(목) JSP - sendRedirect vs forward / el(변수명등) / jstl포맷
<JSP복습>
aa.jsp
aa_jsp.java(서블릿)
↓ 컴파일(파일의 내용이 바뀌면) - 서버(톰캣)을 껐다가 켜야 한다.
aa_jsp.class
내장객체이용!
1. request : javax.servlet.http.HttpServletReqeuest
2. response : javax.servlet.http.HttpServletResponse
3. out : javax.servlet.jsp.JspWriter
4. session : javax.servlet.http.HttpSession
5. application : javax.servlet.ServletContent
6. pageContent : javax.servlet.jsp.PageContext
7. page : javax.servlet.jsp.HttpJspPage
8. config : javax.servlet.ServletConfig
9. exception : java.lang.Throwable
<sendRedirect vs forward>
=> forward 개념 많이 쓰인다~!!!! 중요!!
- sendredirect
start.jsp - sendProc.jsp - sendResult.jsp 페이지 이동합니다
sendRedirect로 이동하므로 데이터는 공유하지 않습니다
주소는 sendResult.jsp가 보인다(뒤에꺼가)
=> 단순 페이지만 이동하는 것이라고 할 수 있다
- forward
start.jsp = forwardProc.jsp - forwardResult.jsp 페이지 이동합니다
forward로 이동하므로 데이터는 공유합니다
* 주소는 forwardProc.jsp(앞에꺼)로 보이지만 결과는 forwardResult.jsp(뒤에꺼)가 나온다
forward : 주소는 앞에꺼에서 머무르지만, 결과는 뒤에꺼로 나온다~!
* sendRedirect request :apple(사과) request response response aa.jsp → bb.jsp : page 페이지이동 : page sendRedirect - 데이터 공유 X - request response 는 aa, bb 각각 적용 => 따라서 aa의 request가 아는 사과를 bb는 모른다! 따라서 sendRedirect는 데이터 공유가 안된다는 뜻 |
* forward : 제어권을 넘겨준다! request request X response response X aa.jsp → bb.jsp : pageX 페이지이동 : page forward - 데이터 공유 O - page < request < session < application : 권한이 더 크다 - forward가 좋지만 메모리를 같이쓰니까 좀 느리다~!!!!! - 결론: 주소는 aa.jsp가 보이지만 결과는 bb.jsp가 보인다 |
<jsp: include page=""/>
<jsp:forward page=""/>얘는 죽고!! 많이안쓴다 -----> RequestDispatcher(인터페이스) 가 살아있음~!!! 얘를 쓴다!!
***RequestDispatcher(인터페이스): 중요!! 절대번지 못쓰고 상대번지만 가능~!! 이유는 특별하게 없다
- send 실습
- forward 실습
- forward el 이용 실습
<EL 개념보충>
: el 로 오면 자바코드인 <%%> <%=%> 쓰지 말자는 얘기
자바코드를 웹코드로 바꿔서 !
${ }를 쓰자는 말!!! => 하지만 if 문 등을 써야하기 때문에 JSTL로 미리 만들어 둔다 <= core에 다 만들어 놨다!
pageScope → requestScope → sessionScope → applicationScope 순으로 호출
< < <
cf) 포워드 시키면 더 커짐
- Scope로 바꿔서... 내장객체로 바뀐것이다
page - pageScope
request - requestScope
session - sessionScope
application - applicationScope
- 메소드 호출시 접두사 set/get를 생략 할 수 있다
메소드명을 변수명처럼 사용 할 수 있다
제공되는 태그의 종류
cf) 주소 복습
절대번지 : http://localhost:8080/프로젝트명/
상대번지 : 내가 있는 위치를 기준으로
get - 주소 (데이터는 문자열), 객체는 주소를 통해서 이동이 안된다 --> setAttribute
post -
el에는 자료형이 없어서 꼭 소문자 p로 객체명을 써줘야 한다!! 클래스명이아니라!
- 메소드명을 변수명처럼 사용: get빼고 뒤의 ()도 뺀다. 웹에서는 게터만....스프링은 세터게터 모두~!!!!!!
*** personDTO.name => 이 개념이 스프링가서도 쓰이기 때문에 매우 중요하다~~~~~!!!!!!!! 스프링에서는 setName도 이렇게 쓴다~~~~~~
get/post
String name = request.getParameter("name"); <-> ${param.name}
request.setArrribute("list",list); <-> ${requestScope.list}
String name = request.getParameter("hobby"); <-> 여러개라서 X
=> String name = request.getParameterValues("hobby"); <-> ${paramValues['hobby'][0]}
<jstlFormat 예제>