Servlet & Jsp

[sendRedirect 사용하기] - Head Frist Servlet & Jsp

사과씨앗 2020. 12. 21. 22:20
728x90
반응형

안녕하세요 오늘은 servlet에서 요청을 보내는 두 가지 방법은 sendRedirect와 forward 방식 중 sendRedirect을 알아보겠습니다.

 

1. sendRedirect

 

- sendRedirect 어떠한 경우에 사용하나요?

 

쉽게 말하자면 단순히 url의 방향만 바꾸어 주는 것이라고 생각하시면 됩니다.

흔히 사용하는 포털사이트에 접속하면 가장 먼저 메인화면이 호출됩니다. 메인화면에서 로그인을 하기 위해서는 로그인 화면으로 이동해야겠죠? 단순히 로그인 화면으로 이동하는 과정에서는 데이터베이스에서 값을 가져오거나 사용자가 보내온 요청을 가공할 일은 거의 없습니다. 단순히 화면만 옮겨 주면 됩니다. 

이러한 경우 sendRedirect 사용하여 보내 줍니다.

 

 

<%@ 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>

<form action="test.do" method="GET">

<input type="submit" value="서브밋 버튼!"> 

</form>


</body>
</html>

JSP 화면에 버튼을 하나 만들어줍니다. 

 

 

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	response.sendRedirect("https://www.naver.com/");		
		
	
	}

서블릿 화면에서 response객체를 이용하여 네이버로 이동하여 보겠습니다.

 

버튼을 클릭하게 되면
서블릿 response객체이 입력해 놓은 url을 따라 네이버 화면이 호출되는 것을 확인할 수있습니다.

 

다음은 JSP를 하나 더 만들어 호출하여 보겠습니다.

 

다음과 같이 WebContent 아래 view 폴더를 만들고 next.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>
<h1>Next Hello World!!!</h1>

</body>
</html>

호출을 확인하기 위해 <h1> 태그를 만들어 줍니다.

 

	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	response.sendRedirect("view/next.jsp");		
		
	

서블릿의 sendRedirect 경로도 수정하여 줍니다.

 

서브밋 버튼을 누르게 되면

 

금방 만들어 놓은 next.jsp로 이동 하는걸 확인할 수있습니다.

* 경로 수정 시 주의할 점

sendRedirect를 사용해서 다른 JSP로 이동할 경우 http://.... 이러한 경로를 생략한 뒤 상대 경로를 작성하여 주면 됩니다.

상대 경로를 지정하는 방법 중  / 사용하는 방법과 사용하지 않는 방법 두 가지가 있습니다.

 

예를 들어 가장 처음 index.jsp의 호출 url을 살펴보면 

 

http://localhost:8080/SampleProject/

 

이런 식으로 되어있습니다. 여기서 SampleProject는 Context root(보통은 프로젝트명)를 나타내고 web.xml 에 welcomfile로 설정되어있는 index.jsp를 찾아가서 보여줍니다. 

 

response.sendRedirect("view/next.jsp");		

 이 상태로 next.jsp 를 호출하게 되면 

 

http://localhost:8080/SampleProject/view/next.jsp

 

이러한 url이 호출 되는 것을 확인할 수 있습니다. sendRedirect에서 경로를 지정해 줄 때 가장 앞에 / 를 제외하면 호출했던 화면의 url뒤에 작성한 url이 합쳐져서 해당 경로에 맞는 화면들 찾아갑니다.

 

http://localhost:8080/SampleProject/ + view/next.jsp 

 

response.sendRedirect("/view/next.jsp");		

/ 를 앞에 붙혀주게 되면 

 

http://localhost:8080/view/next.jsp 

 

작성한 url이 그래도 호출되어 정확한 경로를 찾아갈 수 없어 404 에러가 나타납니다. 이 같은 경우에는

 

response.sendRedirect("/SampleProject/view/next.jsp");		

context root 를 포함한 경로를 지정하여 주면 정상적으로 찾아갈 수 있습니다.

 

다음글 에서는 forwar방식을 알아보겠습니다. 감사합니다.

728x90
반응형