[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