[Servlet/JSP] Servlet 시작하기

아는벌·2023년 2월 27일
0

web (2)

목록 보기
11/20

서블릿 클래스의 구조

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() 메소드를 오버라딩한 구조이다.

HttpServletRequest

  • 클라리언트 -> 서버로 전달
  • Http 프로토콜의 request 정보를 서블릿에 전달하기 위한 목적으로 사용
  • 서블릿 컨테이너에서 생성되고 클라이언트 요청이 doGet(), doPost()로 전달될 때 인자로 함께 전달됨
  • 서블릿에서 클라이언트와 연결해 처리할 작업은 모두 HttpServletRequest를 통해야 함

HttpServletResponse

  • 서버 -> 클라이언트로 전달
  • 서블릿 컨테이너는 요청 클라이언트에 응답을 보내기 위한 HttpServletResponse 객체를 생성하여 서블릿에 전달
  • 서블릿은 HttpServletResponse 객체를 이용해 content type, 응답 코드, 응답 메세지 등 전송
  • 예제
    @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();
    }

서블릿 매핑 방식

1) web.xml

    <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 태그

  • servlet-name - 서블릿 이름
  • servlet-class - 서블릿 클래스의 위치를 src 아래의 경로부터 패키지명을 포함하여 클래스명까지 작성한다

servlet-mapping 태그

  • 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에 * 을 이용하여 다양한 형태로 설정 가능하다.

2) 어노테이션

@WebServlet("/test")
public class TestServlet extends HttpServlet {

서블릿 클래스명 위에 @WebServlet("/url")과 같이 web.xml 설정 대신 어노테이션으로 매핑시킬 수 있다. 명시된 localhost:8080/url로 접속 시 매핑된 해당 서블릿을 실행된다.
@WebServlet(name = "TestServlet", value = "/test")과 같이 서블릿명을 따로 명시할 수도 있다.

forward

servlet

데이터를 포함하여 페이지를 이동한다면 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);

JSP

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 객체를 사용하여 변수를 사용할 수도 있다.

0개의 댓글