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