-
(8주차 51일) Servlet, html수업 내용 정리 2024. 7. 1. 17:43
Servlet, JSP, JDBC
Servlet
> 서블릿
- 서블릿은 웹 브라우저로부터 요청을 받아 처리하고 결과를 다시 웹 브라우저로 전송하는 역할을 한다.
- 일반적인 자바 클래스와 다르게 javax.servlet.http.HttpServlet 클래스를 상속해야 한다.
- HttpServlet 클래스는 서블릿이 웹상에서 HTTP 프로토콜을 이용해 서비스를 처리하기 위해 반드시 상속해야 하는 클래스이다.
> 서블릿 동작 구조
- 클라이언트가 웹 브라우저를 통해 요청을 보낸다.
- 해당 요청이 서블릿에 대한 요청이면 서블릿 컨테이너에게 처리를 넘긴다.
- 서블릿에서 요청에 대한 실행이 완료된 후에는 서블릿 컨테이너가 실행 결과를 웹서버에 전달한다.
- 웹서버는 서비스를 요청한 클라이언트에 응답한다.
- 컨테이너의 서블릿에 대한 설정은 배표 서술자(web.xml)에 작성한다.
> 서블릿 생명주기
- 첫 번째 요청일 경우, 서블릿 객체를 생성하고 init() 메소드를 호출한다.
이후 요청에 대해서는 서블릿 객체 생성, init()메소드는 호출하지 않는다. - 다음에 service() 메소드가 클라이언트 요청 방식에 따라 doGet() 또는 doPost() 메소드를 호출한다.
- 최종적으로 서블릿이 서비스되지 않았을 때 destroy() 메소드를 호출한다.
destroy() 메소드는 보통 서버가 종료되었을 때, 서블릿의 내용이 변경되어 재 컴파일 될 때 호출된다.
> 배포 서술자(Deploymetn Descriptor)
- 애플리케이션에 대한 전체 설정 정보를 가지고 있는 파일으로, 배포 서술자의 정보를 가지고 웹 컨테이너가 서블릿을 구동한다.
- 웹 애플리케이션 폴더의 WEB-INF 폴더에 web.xml 파일이 배포 서술자이다.
- 설정 정보
- Servlet 정의, Servlet 초기화 파라미터
- Session 설정 파라미터
- Servlet/JSP 매핑, MIME type 매핑
- 보안 설정
- Welcome file list 설정
- 에러 페이지 리스트, 리소스, 환경 변수
Web.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 배포 서술자(DD, Deployment Descriptor) - 배포 서술자는 웹 애플리케이션의 기본적인 설정을 위해 작성하는 파일이다. --> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" id="WebApp_ID" version="6.0"> <display-name>01-servlet</display-name> <!-- welcome-file-list - 클라이언트가 페이지 이름을 생략하고 요청했을 때 기본 웹 페이지에 대한 설정이다. --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.jsp</welcome-file> <welcome-file>default.htm</welcome-file> </welcome-file-list> <!-- 서블릿 등록 및 매핑 --> <servlet> <servlet-name>first</servlet-name> <!-- 등록할 이름 작성 --> <servlet-class>com.beyond.servlet.FirstServlet</servlet-class> <!-- 등록할 서블릿 클래스 --> </servlet> <!-- http://localhost:8080/01-servlet/first.do --> <servlet-mapping> <servlet-name>first</servlet-name> <!-- 등록한 이름 작성 --> <url-pattern>/first.do</url-pattern> <!-- 접근 URL 패턴 --> </servlet-mapping> </web-app>
FirstServlet.java
package com.beyond.servlet; import java.io.IOException; import java.io.PrintWriter; import java.time.LocalDateTime; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; /** * 서블릿을 실행시키는 방법 * 1. jakarta.servlet.http.HttpServlet 상속하는 클래스를 생성한다. * 2. 서블릿 등록 및 매핑한다. * - web.xml에 서블릿을 등록 및 매핑한다. * - @WebServlet 애노테이션으로 서블릿을 등록 및 매핑한다. */ public class FirstServlet extends HttpServlet { public static final long serialVersionUID = -5206829137206333067L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ // 응답 헤더를 설정하는 메소드(한글 깨짐 현상 때문에 인코딩 설정) resp.setContentType("text/html;charset=utf8"); System.out.println("클라이언트로부터 GET 요청을 받음"); // 응답 화면을 출력하기 위한 출력 스트림을 얻어온다. PrintWriter out = resp.getWriter(); // 자바 코드로 응답 화면을 작성 out.write("<!DOCTYPE html>"); out.write("<html>"); out.write("<body>"); out.write("<h1>첫 번째 서블릿이 반환한 내용</h1>"); out.write("<p>현재 시간: " + LocalDateTime.now().toString() + "</p>"); out.write("</body>"); out.write("</html>"); out.write("<!DOCTYPE html>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ } }
UserForm.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>개인 정보 입력</title> </head> <body> <h2>개인 정보 입력</h2> <form action="/01-servlet/method.do" method="get"> <label for = "name">이름: </label> <input type = "text" id = "name" name = "userName"/> <br> <label for = "name">나이: </label> <input type = "text" id = "age" name = "userAge"/> <br> <label><input type = "radio" name = "gender" value = "남자" checked/>남자</label> <label><input type = "radio" name = "gender" value = "여자"/>여자</label> <br> <label>좋아하는 음식: </label> <label><input type = "checkbox" name = "food" value = "한식" checked/>한식</label> <label><input type = "checkbox" name = "food" value = "중식"/>중식</label> <label><input type = "checkbox" name = "food" value = "일식"/>일식</label> <label><input type = "checkbox" name = "food" value = "양식"/>양식</label> <label><input type = "checkbox" name = "food" value = "분식"/>분식</label> <br> <br> <input type="submit" value = "전송"/> <input type="reset" value = "취소"/> </form> </body> </html>
'수업 내용 정리' 카테고리의 다른 글
(9주차 59일) STS4 설치, 톰캣 설정, 프로젝트 생성 (1) 2024.07.09 (8주차 52일) JSP 구성, 내장 객체 (1) 2024.07.02 (7주차 48일) 톰캣, 환경 설정 (0) 2024.06.28 (7주차 45일) 정렬 (0) 2024.06.25 (6주차 39~41일) 자료구조 (0) 2024.06.24