[Servlet] Servlet / Servlet 파일 작성 / URL 매핑
25 Oct 2021 -
2 minute read
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>
-