public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
서블릿 클래스는 javax.servlet.Servlet 인터페이스르 구현한 추상 클래스인 HttpServlet 클래스를 상속해 구현한다. HttpServlet을 상속받아 doGet(), doPost() 메소드를 오버라딩한 구조이다.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println(" <head>");
out.println(" <title>Hello world</title>");
out.println(" </head>");
out.println(" <body>");
out.println(" <h1>Hello world</h1>");
out.println(" </body>");
out.println("</html>");
out.close();
}
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.comstudy.myapp.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
servlet-name
- 서블릿 이름servlet-class
- 서블릿 클래스의 위치를 src 아래의 경로부터 패키지명을 포함하여 클래스명까지 작성한다servlet-name
- 서블릿의 이름을 매핑url-pattern
- url 등록 ( "/" 포함)http://localhost:8080/프로젝트이름/hello
시 org.comstudy.myapp.HelloServlet 서블릿 클래스가 매핑된다.
<servlet>
<servlet-name>saramServlet</servlet-name>
<servlet-class>org.comstudy.myweb.SaramController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>saramServlet</servlet-name>
<url-pattern>/saram/*</url-pattern>
</servlet-mapping>
<url-pattern>/saram/*</url-pattern>
은 /saram/ 뒤에 무엇이 오던지 saramServlet 서블릿으로 매핑되어 실행되게 한다.이와 같이 모든 케이스를 의미하는 * 을 붙여 url-pattern에 * 을 이용하여 다양한 형태로 설정 가능하다.
@WebServlet("/test")
public class TestServlet extends HttpServlet {
서블릿 클래스명 위에 @WebServlet("/url")
과 같이 web.xml 설정 대신 어노테이션으로 매핑시킬 수 있다. 명시된 localhost:8080/url로 접속 시 매핑된 해당 서블릿을 실행된다.
@WebServlet(name = "TestServlet", value = "/test")
과 같이 서블릿명을 따로 명시할 수도 있다.
데이터를 포함하여 페이지를 이동한다면 requset 속성으로 데이터를 넣은 후 원하는 페이지로 포워딩을 해야함
// view 페이지로 forward
// RequestDispatcher 객체를 이용한 view 페이지 forward
String viewName = "/WEB-INF/views/saram/list.jsp"; // view 페이지의 위치
RequestDispatcher view = request.getRequestDispatcher(viewName);
// Forward - 현재 서블릿 페이지에서 하는 일을 뷰 JSP 페이지로 위임
// request와 response 객체 전달함
view.forward(request, response);
RequestDispatcher
객체를 이용하여 현재 서블릿 페이지에서 하는 일을 뷰 JSP 페이지로 위임하여 처리할 수 있도록 하는 forward를 한다. 현재 서블릿의 request와 response 객체 전달한다.
request.setAttribute("username","홍길동");
서블릿에서 뷰 페이지 JSP에서도 사용될 변수를 request.setAttribute()를 통해 response에 저장한다. JSP페이지에서는 request.getAttribute("username")
으로 사용한다.
ArrayList<String> userList = new ArrayList<String>();
userList.add("박길동 | 의사 | 33");
userList.add("김길동 | 변호사 | 35");
userList.add("최길동 | 프로그래머 | 30");
request.setAttribute("userList", userList);
servlet에서 forward 되는 JSP 페이지는 response, requsest 객체가 전달되므로
해당 Servlet 페이지 내부에서 처리되는 것과 같다
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>사람 목록 페이지~</h1>
<p>안녕하세요, ${username}님!</p>
<p>안녕하세욤, <%= request.getAttribute("username") %></p>
</body>
</html>
${username}
JSP에서 사용 가능한 표현식 중 하나인 EL 문법을 사용하여 username을 사용할 수 있으며, <%= request.getAttribute("username") %>
와 같이 servlet에서 전달된 requsest 객체를 사용하여 변수를 사용할 수도 있다.