DemoServlet
: 모든 요청을 처리하는 서블릿 (Front Controller)
package org.example.demo9;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
// http://localhost:8080/
@WebServlet("/") // 모든 요청이 여기로 몰린다. ex) /, /abc, /a, /b, /c
public class DemoServlet extends HttpServlet {
// http://localhost:8080?path=a
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// body -> path=값&name=값
// queryString -> ?path=값&name=값
String path = req.getParameter("path");
if (path.equals("a")) {
req.setAttribute("name", "ssar");
req.getRequestDispatcher(ViewResolver.viewName("a")).forward(req, resp);
} else if (path.equals("b")) {
req.setAttribute("age", 20);
req.getRequestDispatcher(ViewResolver.viewName("b")).forward(req, resp);
}
}
}
ViewResolver
: JSP 파일 경로를 설정하는 역할
package org.example.demo9;
public class ViewResolver {
private static final String prefix = "/WEB-INF/views/";
private static final String suffix = ".jsp";
public static String viewName(String filename) {
return prefix + filename + suffix;
}
}
a.jsp
, b.jsp
: View (화면)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>a.jsp</h1>
<h3>내 이름은 : ${name}</h3>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>b.jsp</h1>
<h3>내 나이는 : ${age}</h3>
</body>
</html>
1️⃣ 클라이언트 요청
http://localhost:8080?path=a
http://localhost:8080?path=b
2️⃣
DemoServlet
이 요청을 처리path=a
→name="ssar"
전달 후a.jsp
로 포워딩
path=b
→age=20
전달 후b.jsp
로 포워딩
3️⃣ JSP에서 데이터 출력
${name}
→ "내 이름은 : ssar"
${age}
→ "내 나이는 : 20"

WEB-INF/views/a.jsp
에 위치하면 직접 접근 불가능
올바른 접근 방식 (Front Controller 사용)
Share article