JSP

211007(목) JSP - sendRedirect vs forward / el(변수명등) / jstl포맷

구름이팡팡 2021. 10. 7. 10:24
728x90

<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 실습

send : 결과 =null   -> 데이터 이동X 단순 페이지 이동

- forward 실습

forward: 결과 =사과  -> 통합! 데이터 이동 O
forward  ---> 여기서는 절대번지 불가 상대번지만 가능!!

- forward el 이용 실습

- forward el 이용


<EL 개념보충>

: el 로 오면 자바코드인 <%%> <%=%> 쓰지 말자는 얘기

자바코드를 웹코드로 바꿔서 !

${ }를 쓰자는 말!!! => 하지만 if 문 등을 써야하기 때문에 JSTL로 미리 만들어 둔다  <= core에 다 만들어 놨다!

 

pageScope  requestScope  sessionScope  applicationScope 순으로 호출

               <                    <                     <

cf) 포워드 시키면 더 커짐

 

- Scope로 바꿔서... 내장객체로 바뀐것이다

page - pageScope

request - requestScope

session - sessionScope

application - applicationScope

 

- 메소드 호출시 접두사 set/get를 생략 할 수 있다

메소드명을 변수명처럼 사용 할 수 있다

 

제공되는 태그의 종류

c만 쓰고 다른 것들은 거의 안쓴다 c에 다 만들어 둠

 

cf) 주소 복습

절대번지 : http://localhost:8080/프로젝트명/

상대번지 : 내가 있는 위치를 기준으로

 

get - 주소 (데이터는 문자열), 객체는 주소를 통해서 이동이 안된다 --> setAttribute

post - 

 

 

 

el에는 자료형이 없어서 꼭 소문자 p로 객체명을 써줘야 한다!! 클래스명이아니라!

자바 for(PersonDTO persondto : list2)와 같은 것!

- 메소드명을 변수명처럼 사용: 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]}

for문으로도 가능~~~~!!
인덱스 개수 구하기 나중에 필요할수도


<jstlFormat 예제>

 

 

 

 

 

 

 

 

 

 

728x90