[JSP] 231206

이슬기·2023년 12월 7일

servlet

목록 보기
1/8

페이지 이동

a.jsp -> b.jsp

  1. response.sendRedirect("./b.jsp")
    : 페이지가 존재하지 않으면 404 발동
    주소창이 변한다 - isRedirect: boolean
  • 기존 요청은 끊어지고 새로운{request, response 다름} 요청이 일어난다
  • 응답객체가 제공하는 메소드
  • 파라미터는 String 타입 : 컴파일 하는 언어 - 배포 - 빌드 - Maven, Gradle(Spring)
    <-> 자바스크립트는 컴파일이 없다 - 런타임에 결정된다 : 번들러 통해서 배포 버전을 생성함
  1. RequestDispatcher view = req.getRequestDispatcher("./b.jsp")
    : view.forward(req, res); - url은 바뀌지 않는데 화면은 바뀐다
  • 언제 사용하나? : select일 때
  • url 매핑 : 약속. 표준이다 (예측가능. 안전하다)
      1. exact
      1. /basic/*
      1. *.do : 내가 관여할게
      1. default -> / -> context directory
      • POJO : 전처리부가 필요하다
        • 전처리를 하기 위해서는 나를 통하도록 한다
        • 뒤에 확장자 이름에 .gd가 있으면 내가 가로챈다
  • @WebServlet("/auth/login.do")
    • 주소는 /auth/login.do{서블릿} -> index.jsp(출력)이었다
      • 요청이 바뀌었다.
      • 제어권(책임-관심사)이 서블릿에서 index.jsp로 넘어갔다
  1. refresh
    : 새로고침(F5) - 동기화(브라우저와 Tomcat에서 처리된 결과를 맞춘다(반영한다))
  • 새로운 요청이 발동한다
  • 주소창이 안 바뀐다
  • 세션이나 쿠키 값을 들고 온다 : 상태값
  1. 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> <!-- 실행 안 됨. 위에서 b.jsp로 넘어감-->
</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

  1. 리턴타입(void)을 다르게 해 보자
  • voidObject로 -> 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객체 원본이 넘어간다

  1. 화면이 jsp가 아니라면?
    ReactJS라면?
  • JSON으로 보내면 됨

파라미터도 변화를 줄 수 있을까?

프로젝트

  • 폭포수 모델
    • 분석 - 설계 - 개발 - 테스트 - 배포
  • get 방식 : 단위테스트 가능
    post 방식 : 단위테스트 불가
    • 따라서 post 방식으로 하고 싶은 경우, get 방식으로 테스트를 진행하며 개발한 뒤 마지막에 post 방식으로 바꾼다.

0개의 댓글