서블릿 실습

김성환·2022년 6월 30일
0

실습

목록 보기
1/6

web.xml이용

web.xml이란 WAS가 최초로 구동될 때, web.xml 파일을 읽어서 메모리에 올린다.
그렇기 때문에 web.xml은 웹에 대한 다양한 설정들을 하는 곳이라고 할 수 있다.
즉, 웹 어플리케이션 설정을 위한 파일이라고 생각하면 된다.
웹 어플리케이션 프로그램은 기본적인 web.xml이 존재한다.(보이지는 않는다)
우리가 직접 만드는 web.xml은 커스텀된 web.xml인 것이다.

web.xml 만들기

web.xml도 xml파일이기 때문에 xml 형식을 따른다.
예시 코드를 살펴보면 다음과 같다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0">
 <servlet>
 	<servlet-name>helloServlet</servlet-name>
 	<servlet-class>sample1.HelloServlet</servlet-class>
 </servlet>
  <servlet-mapping>
  	<servlet-name>helloServlet</servlet-name>
  	<url-pattern>/helloServlet</url-pattern>
  </servlet-mapping>
 </web-app> 

위의 코드는 하나의 서블릿에 대한 것이다.

web.xml 주요 태그 종류

하나의 서블릿에는 servlet태그servlet-mapping태그가 존재하는데,
servlet태그는 서블릿 정보를 작성하는 태그이며, servlet-mapping태그는 매핑정보를 작성하는 태그이다.

  • web-app태그 : web.xml의 루트태그이다.
  • servlet-name태그 : 서블릿의 이름을 나타내는 태그이다.
  • servlet-class태그 : 매핑할 서버에서 작성된 서블릿 자바 클래스의 상대경로를 나타내는 태그이다.
  • servlet-mapping태그 : 매핑할 서블릿을 나타내는 태그

web.xml코드 설명

servlet태그 안에 servlet-name태그에는 helloServlet이라는 서블릿 이름을 명시해주고, servlet-class태그에는 sample1페키지 안에 작성된 HelloServlet클래스(매핑될 서블릿)를 넣어준다.
또한 servlet-mapping태그 안에는 servlet-name태그와 연결될(지정할)상대주소(url)를 넣어준다.

서블릿 클래스 작성하기

서블릿의 경우 생명주기를 가지고 있는데, 크게 3단계로 나누어진다.

  • init() : 서블릿을 초기화하는 단계로 내부적으로 자동 호출이 된다.(init함수를 굳이 오버라이드 할 필요 없다는 의미)
    ※참고로 init()의 경우 서블릿 요청 시 딱 한번만 실행된다.
  • service() : 서블릿이 요청, 응답을 처리하기 위한 단계로, 크게 doGet,doPost로 분기된다.(http메서드에 알맞게 오버라이드를 해준다)
  • destory() : 서블릿을 종료하는 함수로 메모리에 적제된 서블릿을 삭제한다.(내부적으로 자동 호출된다)
    아래는 예시 코드이다.
public class HelloServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html; charset=utf-8");
		String name = req.getParameter("name");
		String age = req.getParameter("age");
		String sex = req.getParameter("sex");
		String[] hobby = req.getParameterValues("hobby");
		ServletDto dto = new ServletDto(name,age,sex,hobby);
		//req.setAttribute("person", dto);// 데이터 저장(데이터 이동시 사용)(데이터는 object로 저장)
		//RequestDispatcher rd = req.getRequestDispatcher("sample");
		//rd.forward(req, resp);
		req.getSession().setAttribute("person", dto);
		resp.sendRedirect("sample");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		super.doPost(req, resp);
	}
}

서블릿 클래스 작성은 HttpServlet를 상속받고, 원하는 함수들(init,doGet,doPost등등)을 오버라이드 하여 사용하면 된다.
모든 함수들은 HttpServletRequest와 HttpServletResponse를 매개변수로 받는데,
이 두 객체는 요청,응답에 담긴 데이터들을 편리하게 이용할 수 있도록 도와주는 객체이다.

@WebServlet이용

@WebServlet 어노테이션을 이용하면 web.xml을 커스텀하지 않고도 서블릿을 사용할 수 있다.
사용법은 @WebServlet(상대경로)를 사용하면 된다.

profile
개발자가 되고 싶다

0개의 댓글