[Servlet] Servlet / Servlet 파일 작성 / URL 매핑


Servlet


  • 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램

  • Java 코드 안에 HTML 태그 삽입 / 확장자는 .java

    • JSP : HTML 내부에 Java 코드 삽입, Servlet의 단점을 보완하고자 만든 서블릿 기반의 스크립트 기술
  • Java Thread를 이용하여 동작

  • MVC 패턴에서 Controller로 이용됨

  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받음

  • 코드 수정 시 다시 컴파일하고 배포해야 하는 단점



Servlet 문서 작성하기


서버 등록하기

프로젝트 (Dynamic Web Project) 생성하기

(Generate web.xml deployment descriptor 선택!)

Servlet 파일 생성

서블릿 파일은 HttpServlet 파일을 상속받아야 한다.

작성해보기

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/HelloWorld")
public class HelloWorld extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public HelloWorld() {

    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet : Hello World");
		// syso 브라우저가 아닌 콘솔창에 출력되는것
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost : Hello World");
	}

}
  • doGet(), doPost()메서드 : 서블릿 파일이 처리하는 부분

  • 서블릿을 호출, 클라이언트에서 요청이 들어올 때, get방식이냐 post방식이냐에 따라 호출되는 메서드가 달라짐

  • 보통 doGet메서드는 폼을 그냥 출력하는 형태, doPost메서드는 데이터를 가공하거나 처리코드를 실행할 때 많이 사용



Servlet(.java)에 HTML코드 작성하기


import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/NowTime")
public class NowTime extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public NowTime() {

    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html; charset=utf-8");
		
		PrintWriter out = response.getWriter();
		out.println("<HTML>");
		out.println("<HEAD><TITLE>현재시간</TITLE><HEAD>");
		out.println("<BODY>");
		out.println("<H1>현재시간 : </H1>");
		out.println(new Date());
		out.println("</BODY>");
		out.println("</HTML>");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

}



Servlet URL 매핑하기


  • URL 주소가 너무 길고, 경로가 노출되어 보안에 취약해지기 때문에 매핑하는 것

  • 어노테이션을 통한 매핑보다는 web.xml파일로 매핑하는 것이 우선순위가 높다.

  • 어노테이션 방식

    • Servlet 파일 생성 시 변경하기

    • 어노테이션을 사용한 매핑

        import java.io.IOException;
        import javax.servlet.ServletException;
        import javax.servlet.annotation.WebServlet;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
      
        @WebServlet("/HelloWorld")
        public class HelloWorld extends HttpServlet {
            private static final long serialVersionUID = 1L;
            ...   
      

      ->

        import ...
      
        @WebServlet("/HW")
        public class HelloWorld extends HttpServlet {
            private static final long serialVersionUID = 1L;
            ...   
      
  • web.xml 방식

    web.xml 파일 하단에 아래와 같이 작성

      <servlet>
          <servlet-name>임의의 이름</servlet-name>
          <servlet-class>패키지명을 포함, 매핑할 클래스 파일명</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>임의의 이름</servlet-name>
          <url-pattern>servlet-class의 클래스를 매핑할 임의의 이름('/'로 시작해야함)</url-pattern>
      </servlet-mapping>
    
    • ex)

        <servlet>
            <servlet-name>HelloWorld</servlet-name>
            <servlet-class>com.javalec.ex.HelloWorld</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloWorld</servlet-name>
            <url-pattern>/HW</url-pattern>
        </servlet-mapping>
      

Categories:

JSP/Servlet