jsp

brave_chicken·2024년 4월 22일

잇(IT)생 챌린지

목록 보기
33/90
post-thumbnail

13장 MVC 디자인패턴 적용

  • 변경하는 시점이 다르면 같은 어플리케이션에 있으면 안되고 분리해야한다
  • 각각의 역할을 달리해서 분리하자 = MVC패턴

9. include

[문법]
RequestDispatcher rd = request.getRequestDspatcher("요청재지정할 web application path")
<요청재지정할 web application path: response하지않고 한번의 요청으로 서블릿과 jsp가 실행되므로 path는 context명은 빼고 정의하기>
rd.forward(request객체, response객체)

  • 최초요청으로 서블릿, jsp가 실행되므로 데이터공유가 가능
  • 한번의 요청으로 모든 application이 실행되므로 주소표시줄이 첫번째 요청된 path로 남아있다
  • forward와의 차이점은 서블릿에서 jsp로 요청재지정하여 jsp가 실행되면 jsp의 실행결과를 가지고 다시 최초 요청된 서블릿으로 되돌아와서 서블릿이 response된다.
    즉, 서블릿이 요청재지정된 jsp의 실행결과만 포함하는 개념

Include, forward 서블릿 적용 및 차이

IncludeTestServlet

@WebServlet(name = "include", urlPatterns = {"/included"})
public class IncludeTestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		System.out.println("Include연습 - IncludeTestServlet");
		out.print("<h1>요청재지정연습 -Include</h1>");
		
		//데이터공유하기
		MemberDTO dto = new MemberDTO("bts1", "1234", "슈가", "대구", "래퍼");
		
		//공유하고싶은 scope객체의 메소드를 호출
		request.setAttribute("mydata", dto);
		
		//요청재지정
		RequestDispatcher rd = request.getRequestDispatcher("/jspbasic/result.jsp");
		rd.include(request, response);
	}

}

ForwardTestServlet

@WebServlet(name = "forward", urlPatterns = {"/forward"})
public class ForwardTestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		System.out.println("Forward연습 - ForwardTestServlet");
		out.print("<h1>요청재지정연습 -Forward</h1><hr/><hr/><hr/>");
		
		//데이터공유하기
		MemberDTO dto = new MemberDTO("bts1", "1234", "슈가", "대구", "래퍼");
		
		//공유하고싶은 scope객체의 메소드를 호출
		request.setAttribute("mydata", dto);
		
		//요청재지정
		RequestDispatcher rd = request.getRequestDispatcher("/jspbasic/result.jsp");
		rd.forward(request, response);
	}

}


jsp- include/forward test

actiontag_sub.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>actiontag_sub</title>
	</head>
	<body>
		<hr/><hr/><hr/><hr/>
		<h1>forward나 include될 페이지:</h1>
		<hr/><hr/><hr/><hr/>
	</body>
</html>

includeTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>includeTest</title>
	</head>
	<body>
		<h1>jsp에서 include하기</h1>
		<h3>서블릿의 include와 동일하게 동작</h3>
		<%System.out.println("includeTest실행"); %>
		<!-- jsp에서 include하기(잘사용되지않는다) -->
		<jsp:include page="/jspbasic/actiontag_sub.jsp"/>
		<h1>========================include 액션태그 테스트============================</h1>
	</body>
</html>

forwardTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>forwardTest</title>
	</head>
	<body>
		<h1>jsp에서 forward하기</h1>
		<h3>서블릿의 forward와 동일하게 동작</h3>
		<%System.out.println("forwardTest실행"); %>
		<!-- jsp에서 forward하기(잘사용되지않는다) -->
		<jsp:forward page="/jspbasic/actiontag_sub.jsp"/>
	</body>
</html>


중요

  • register.jsp나 login.jsp는 그냥 뷰임. 실행결과가 아님.
  • list.jsp는 다이렉트로 부르면 userlist가 발생하지않음. 그래서 널포인트익셉션이 뜸(유저리스트는 서블릿에서 발생하는 데이터기때문)
  • dept도 멤버 mvc처럼 mvc화해보기!

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

0개의 댓글