페이지 이동
a.jsp -> b.jsp
- response.sendRedirect("./b.jsp")
: 페이지가 존재하지 않으면 404 발동
주소창이 변한다 - isRedirect: boolean
- 기존 요청은 끊어지고 새로운{request, response 다름} 요청이 일어난다
- 응답객체가 제공하는 메소드
- 파라미터는 String 타입 : 컴파일 하는 언어 - 배포 - 빌드 - Maven, Gradle(Spring)
<-> 자바스크립트는 컴파일이 없다 - 런타임에 결정된다 : 번들러 통해서 배포 버전을 생성함
- RequestDispatcher view = req.getRequestDispatcher("./b.jsp")
: view.forward(req, res); - url은 바뀌지 않는데 화면은 바뀐다
- 언제 사용하나? : select일 때
- url 매핑 : 약속. 표준이다 (예측가능. 안전하다)
- exact
- /basic/*
- *.do : 내가 관여할게
- default -> / -> context directory
- POJO : 전처리부가 필요하다
- 전처리를 하기 위해서는 나를 통하도록 한다
- 뒤에 확장자 이름에 .gd가 있으면 내가 가로챈다
- @WebServlet("/auth/login.do")
- 주소는 /auth/login.do{서블릿} -> index.jsp(출력)이었다
- 요청이 바뀌었다.
- 제어권(책임-관심사)이 서블릿에서 index.jsp로 넘어갔다
- refresh
: 새로고침(F5) - 동기화(브라우저와 Tomcat에서 처리된 결과를 맞춘다(반영한다))
- 새로운 요청이 발동한다
- 주소창이 안 바뀐다
-
세션이나 쿠키 값을 들고 온다 : 상태값
- location.href="./index.jsp";
: location.href = "/auth/login.do";
- http : 비상태 프로토콜 - stateless: 상태가 유지되지 않는다
- 웹서비스(JS)
- 단, location : 주체는 브라우저(클라이언트 측)
- res.sendRedirect : 주체는 Tomcat
- view.forward(req, res)
response.sendRedirect("./b.jsp")
🔽a.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>a.jsp페이지</h2>
<p>내용1</p>
<p>내용2</p>
<%
//스크립틀릿
response.sendRedirect("b.jsp"); //이 곳을 주석처리하면 a.jsp에 계속 머무른다
%>
<p>여기 코드는 실행될까?</p>
</body>
</html>
🔽b.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>b.jsp</title>
</head>
<body>
<h2>b.jsp페이지</h2>
<p>b페이지 내용1</p>
<p>b페이지 내용2</p>
</body>
</html>
RequestDispatcher view = req.getRequestDispatcher("./b.jsp"); view.forward(req, res);
처리를 해야하는 곳을 파라미터로 요청해서 그 곳에 전달한다.
🔽a2.jsp
🔽b2.jsp
중간 정리
기존의 서블릿 클래스의 틀을 조금이라도 바꿔본다.
doGet(req, res) : void
doPost(req, res) : void
- 리턴타입(void)을 다르게 해 보자
void를 Object로 -> setter/getter -> ActionForward
- String path
- boolean isRedirect
- select
- 조회결과가 있다 - 한 행을 담는 그릇(VO, Map) {deptno=10, dname=영업부}, 멀티행을 담는 그릇(List) []
- 유지{서블릿(.java)과 jsp 사이에} 되어야 한다
- 둘 사이에 거리가 있다(유지(연결))
- insert
: int
: commit - 1row inserted
- update
: int
: commit - 1row updated
- delete
: int
: commit - 1row deleted
- XXX_jsp.java : 서버마다 작명규칙이 다 다르다. 이름이 다 다르다 - 인스턴스화 못 함
- 변수 호출 불가함. 메소드 호출도 불가함 - 자바답지 않음
- 조회 : jsp(조회버튼 : 선택) -> Action(서블릿 : select : 처리 - 전달만 할게) -> JAVA(PURE : 관심사) -> db연동 : 이식성 좋다 -> JSP
- 조회버튼이 있는 화면에 조회결과를 출력해야 한다.
- FrontMVC : NoticeController
- FrontMVC : 화면에 돌려줘야 한다(
List<Map>)
- 저장소 역할을 하는 request가 있다. 단, dispatcher로.
- forward(req, res);
- view.forward(req, res);
- res.sendRedirect("a.jsp");
- /notice/noticeList.gd 보고 있는데 실제 화면에 출력되는 페이지는 noticeList.jsp이다.
- 사용자가 한 요청이 아직 끝나지 않았을 때
* 그래서 페이지가 실제로 바뀌는 forward가 호출될 때 파라미터 자리에 req객체 원본이 넘어간다
- 화면이 jsp가 아니라면?
ReactJS라면?
파라미터도 변화를 줄 수 있을까?
프로젝트
- 폭포수 모델
- get 방식 : 단위테스트 가능
post 방식 : 단위테스트 불가
- 따라서 post 방식으로 하고 싶은 경우, get 방식으로 테스트를 진행하며 개발한 뒤 마지막에 post 방식으로 바꾼다.