230711 forward , redirect , JSP
페이지 이동방식
1. redirect 리다이렉트 (ex
응답이 이루어지면 request, response 객체가 사라진다.
제일밑에서 요청이 다시 되면 request, response 객체가 다시 생성된다.
2. forward (
request, response 객체를 전달해준다. (계속 가져감)
요청이 들어오면 request, response객체는 계속 이동되며 사용된다.
서블릿은 요청, 제어만 하고 직접 응답은 하지 않는다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
request
move url을 sendRedirect을 사용하면 네이버로 이동하게 된다.
http://localhost:8888/backstudy/move
http://localhost:8888/backstudy/move?t=abc
move에 t값 abc를 보낸다는 url을 적으면
값이 나타나게 된다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
forward
http://localhost:8888/backstudy/move
를 들어가면 404가 뜬다
forward는 naver로 들어가지 못하고 패키지 안(/backstudy )에 있는 a , life 서 파일로만 경로 설정이 가능하다.
ex) http://localhost:8888/backstudy/move --> http://localhost:8888/backstudy/life 으로 이동가능
http://localhost:8888/backstudy/move?t=abc
move에 t값 abc를 보낸다는 url을 적으면
값이 나타나게 된다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
http://localhost:8888/backstudy/productlistmvc
url뒤에
?cp=1 ->1페이지
?cp=2 ->2페이지
?cp=3 ->3페이지
적으면 다음 페이지가 나오게 한다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
setParameter, setAttribute 차이점
request.setAttribute("list", list);
=>
request.setParameter();
=>세팅할 메서드가 따로 없다.
이클립스 productlistmvc, productlistview 참고!
productlistmvc (요청할controller) 에서 리스트, 요청전달 데이터, 어떻게 보여줄것인지를 적어서
String path = "/productlistview";
rd.forward(request, response);했으니
productlistview에서는 응답해준다.
뷰어로 사이트를 이동하는 이유
속도는 1번이 빠르다. (다이렉트로 정보를 주기때문에)
2번처럼 만드는 이유
단점 속도가 느리다. 그러나 응답사이트가 깔끔하고 세련되보이게된다.
1번처럼 하게 되면 응답내용이 많아져 controller(코드)가 너무 길어져 유지보수가 힘들어진다
2번처럼 하게 되면 응답내용이 많아도 코드를 따로 분리하기 때문에 유지보수가 쉬워진다.
자바코드와 html코드를 분리하는 목적이 jsp를 사용하는것이다 (3번처럼 하는것!!)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
jspinit() -> 자동호출
_jspService(요청,응답) => 호출된다.
jsp가 변경이 되는 경우(코드가 바뀐경우)
기존 객체는 메모리에서 소멸된다! => jspDestroy()호출
first_jsp 파일과 비교 해보기
파일위치 : C:\SW\apache-tomcat-9.0.75\work\Catalina\localhost\backstudy\org\apache\jsp
jsp코드 => out.write() 가 들어가진다. (html 코드가 많이 들어간다!)
JSP 구성요소
-HTML 요소 : _jspService()내부의 out.write()의 인자값
-JS요소
-Scripting element
-scriptlet : _jspService()내부에 들어갈 구문
< % (자바구문을 적어준다) % > <% int i;%>
-expression : <% = 변수값 또는 함수 반환값% > <%out.print(변수값);%>
또는 <%out.print(m());%>
<%=i%>는 <%out.print(i);%)와 같음
-desclaration : _jspService()외부에 들어갈 구문
< % ! % > -> <%! 멤버변수선언,메서드선언%>
<%! int i; %>
-Directive element
-page directive <%@page %>
-include directive <%@ include %>
-taglib directive <%@taglib %>
%@는 붙여서 사용해야한다.
-Action Tag element
<>를 안하면 문자열로 out.write()으로 만들어진다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
language는 기본으로 java 이고
pageEncoding="UTF-8"인데 contentType에 이미 적혀있으니 삭제해도 상관없다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
div대신 span사용할 경우 띄어쓰기 없이 999까지 적힌다.
controller, viewer(JSP)을 분리를 해야한다.