리다이렉션이란 클라이언트가 웹 서버에 어떤 요청을 했을 때, 그 요청을 다른 곳에서 실행하는 것을 의미한다.
예를 들어 설명하면, 클라이언트가 회원가입을 했을 때, 데이터를 입력 후 회원가입을 완료하면 로그인 창으로 넘어가거나, 메인화면이 실행되는 것을 의미한다.
리다이렉션을 사용하면 이미 만들어진 페이지를 연결하는 것이기 때문에, 새로 코드를 만들지 않고 코드의 재사용이 가능해진다.
우선 간단한 html 로 간단한 메인화면을 만들어보자. 아래의 블로그와 이어진다.
1. MainServlet
@WebServlet("/main") public class MainServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setHeader("Content-Type","text/html; charset=utf-8"); // 서블릿 마다 들어감. 그래서 프론트컨트롤러를 만들어서 이런거를 공통로직으로 만듬ㄴ String html = "" + "<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" + " <title>Document</title>\n" + "</head>\n" + "\n" + "<body>\n" + " <h1>메인 페이지</h1>\n" + " <hr>\n" + "</body>\n" + "\n" + "</html>"; resp.getWriter().println(html); } }
/main 을 입력했을 때 실행되는 메인페이지이다.
이제 회원가입을 눌렀을 때 메인페이지가 실행되도록 해보자.
2. JoinServlet
@WebServlet("/join") public class JoinServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setHeader("Content-Type","text/html; charset=utf-8"); //데이터의 타입 지정 // 1. 파싱 String username = req.getParameter("username"); //버퍼에 있는 값을 스플릿 해서 키 값을찾아줌 String password = req.getParameter("password"); String email = req.getParameter("email"); // 2. 유효성 검사 if(username.length() <3 || username.length() >10){ resp.getWriter().println("<h1>username 글자수가 3~10 사이여야 합니다."); } resp.sendRedirect("/main"); } }
JoinServlet 은 실행하면 페이지에 아무 것도 표시가 되지 않고, DB 에 데이터를 Input 을 하고 숫자로 응답만 해준다. 그래서 UI 를 위해서 /join 를 실행하면 /main이 실행되도록 sendRedirect 를 이용한다. sendRedirect 는 톰캣의 메서드로 리다이렉션을 도와준다.
회원가입 버튼을 누르면 메인 페이지로 연결된다.
페이지 검사를 실행해보면 join 페이지에서 Status Code 가 302 로 되어있다.
상태 코드 302는 HTTP/1.1 프로토콜로 페이지의 상태를 나타내는데,
302 코드는 일시적으로 리다이렉션이 일어났을 때의 상태이고, 200은 정상 요청,
url 을 찾을 수 없을 때는 404 코드가 발생한다.
resp.sendRedirect() 실행은
resp.setStatus(302)
,resp.setHeader("Location" ,"/main")
를 실행한 것과 같은 의미이다. 톰캣이 가지고 있는 메서드는 상당히 편리하다.Share article