손영배 블로그 누구나 쉽게 이해하고 습득하기
Servlet 본문
Servlet은 URL 요청을 처리하는 프로그램이라고 생각하면 된다.
예) http://localhost:8080/firstweb/HelloServlet을 브라우저에 요청을 하면 실제 HelloServlet하고 응답하는 서블릿 파일
http://localhost:8080/{프로젝트이름}/{URL Mapping값}
HTTP 프로토콜에서 request 메서드에는 GET, POST, PUT, DELETE 등이 있다. 웹 브라우저가 GET 메서드 방식으로 요청을 보낼 때, 서브릿에 doGet() 메서드가 호출이 된다.
GET 메서드는 웹 브라우저가 서버에게 문서를 요청할 때 사용하는 방식
Servlet 이란?
- 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할
- 서블릿을 정의 해보면
- 서블릿(servlet)은 WAS에서 동작하는 Java 클래스이다.
- 서블릿은 HttpServlet 클래스를 상속받아야 한다.
- 서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두가지(JSP, 서블릿)를 조화롭게 사용해 야 한다.
예 : 웹페이지를 구성하는 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현
Servlet 작성방법은 2가지로 나뉨
1. Servlet 3.0 spec 이상에서 사용하는 방법
- web.xml 파일을 사용하지 않음
- 자바 어노테이션(annontation)을 사용
- 앞에서 실습했던 firstweb에서 사용
2. Servlet 3.0 spec 미만에서 사용하는 방법
- Servlet을 등록할 때 web.xml파일에 등록해서 사용
예 : (3.0 미안에서는) URL이 /ten이라고 요청이 들어오면 이 URL mapping에서 찾아내고 여기에서 찾지 못하면 404페이지 나온다. 그런데 만약 존재한다면 servlet-name이라는 엘리멘트를 확인한다.
Servlet의 생명주기, 라이프 사이클 LifecycleServlet < init -> service(request, response) -> destroy >
service(request, response) 메소드
- HttpServlet의 service메소드는 템플릿 메소드 패턴으로 구현
- doGet : client의 요청이 Get일 경우에는 자신이 가지고 있는 doGet(request, response) 메소드를 호출
- dopost : client의 요청이 Post일 경우에는 자신이 가지고 있는 doPost(request, reponse)를 호출
HttpServletReqeuest , HttpServletResponse의 이해
요청과 응답 : WAS는 웹 브라우저로부터 Servlet 요청을 받으면,
- 요청할 때 가지고 있는 온갖 정보를 HttpServletRequest객체를 생성하여 저장
- 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse 객체를 생성
- 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달
HttpServletRequest
- http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다.
- 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있습니다.
- body의 Stream을 읽어 들이는 메소드를 가지고 있습니다.
HttpServletResponse
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언틍게 응답을 보내기 위한 HttpServletResponse 객체를 생성하여 서블릿에게 전달합니다.
- 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메세지 등을 전송합니다.
헤더 정보 읽어 들이기
- 웹 브라우저가 요청정보에 담아서 보내는 header값을 읽어 들여 브라우저 화면에 출력한다.
- package name : examples
- class name : HeaderServlet
- url mapping : /header
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title>form</title></head>");
out.print("<body>");
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
out.print(headerName + " : " + headerValue + "<br>");
}
out.print("</body>");
out.print("</html>");
}
파라미터를 읽어 들이면서 출력하는 서블릿
- URL 주소의 파라미터 정보를 읽어 들여 브라우저 화면에 출력한다.
- http://localhost:8080/firstweb/param?name=kim&age=5
- package name : examples
- class name : ParameterServlet
- url mapping : /param
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title>form</title></head>");
out.print("<body>");
String name = request.getParameter("name");
String age = request.getParameter("age");
out.print("name : " + name + "<br>");
out.print("age : " + age + "<br>");
out.print("</body>");
out.print("</html>");
}
그 외의 요청정보 출력
- URI, URL, PATH, Remote host 등에 대한 정보 출력
- http://localhost:8080/firstweb/info
- package name : examples
- class name : InfoServlet
- url mapping : /info
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head><title>info</title></head>");
out.print("<body>");
String uri = request.getRequestURI();
StringBuffer url = request.getRequestURL();
String contentPath = request.getContextPath();
String remoteAddr = request.getRemoteAddr();
out.print("uri : " + uri + "<br>");
out.print("url : " + url + "<br>");
out.print("contentPath : " + contentPath + "<br>");
out.print("remoteAddr : " + remoteAddr + "<br>");
out.print("</body>");
out.print("</html>");
}
'Web' 카테고리의 다른 글
Apache Tomcat (0) | 2019.06.16 |
---|---|
CSS (0) | 2019.06.15 |
HTML Tag 리스트 (0) | 2019.06.15 |
웹공부2 WAS (Web Application Server) (0) | 2019.06.14 |
HTTP에 S가 붙은 HTTPS 는 어떤 용도로 사용되는 건가요? HTTP와 무엇이 다른가요? (0) | 2019.06.14 |