📌web.xml (== deployment descriptor(배포 서술자, DD))
- 이 application의 전체 설정 정보가 기록된 파일
- 서버 스타트와 동시에 가장 먼저 실행됨
- welcome-file
- 이 애플리케이션의 루트로 요청시 보여지는 메인페이지 url을 지정해놓은것
http://구동중인서버의ip주소:포트번호/애플리케이션의루트명으로 요청 가능
- welcome-file은 src/main/wepabb폴더 안에 위치해야됨
📌Servlet
- Server + Applet 의 합성어
- 웹 서비스를 위한 자바클래스
- 자바를 사용해서 웹을 만들기위해 필요한 기술
- 사용자의 요청을 받아 처리하고 그에 해당하는 응답페이지를 만들어
다시 사용자에게 전송하는 역할을 하는 자바클래스 (Controller)
- 웹에서 동적인 페이지를 Java로 구현할 수 있게 도와주는 서버측 프로그램 (Java코드로 HTML 구현)
- 동작 구조
- 서블릿 컨테이너
웹 서버 또는 응용 프로그램 서버의 일부
웹 서버에서 온 요청을 받아 Servlet class를 관리하는 역할
컨테이너의 Servlet에 대한 설정은 web.xml파일 이용

- 경로 작성 방식
- 절대경로방식 (action 속성값이 /로 시작되는 경우)
localhost:포트번호 뒤에 action 속성값이 붙어서 url이 완성되는 방식
- 상대경로방식 (action 속성값이 문구로 시작되는 경우)
현재 이 페이지 url의 마지막 / 뒤에 action 속성값이 붙어서 url이 완성되는 방식
- HTML form내의 submit버튼 클릭시 form태그의 action에 작성된 url로 key=value값 넘어감
- 따라서 action에는 해당 요청을 받아서 처리해주는 Controller측(Servlet)을 작성
- 즉, 어떤 Servlet을 요청할건지 그 Servlet만의 url mapping값을 작성
mapping값 : Servlet의 @WebServlet(" ") 어노테이션 안에 작성되는 고유한 값으로 /로 시작됨
- 이때 Servlet mapping값은 반드시 ContextRoot명 바로 뒤에 작성되어야함
- 따라서 HTML form태그의 action속성값에는 /
ContextRoot명/mapping값 으로 작성
- 상황에 따라 알맞은 방식으로 작성해야함
- Servlet클래스의 메소드 매개변수
- 첫번째 매개변수인 request에는 요청과 관련된 내용들 담겨있음
(요청전송방식, 요청자의 ip주소, 요청시전달된값들 등등)
- 두번째 매개변수인 response는 요청처리 후 응답할 때 사용되는 객체
0. POST방식 요청의 경우 값 뽑기 전 인코딩 설정 필요
package 선언부
Class 작성부
method 작성부
request.setCharacterEncoding("UTF-8");
1. 요청처리를 위해 전달된 값 뽑기
- request의 parameter영역 안에 key=value 세트로 존재
- request.getParameter("
key") : String
그에 해당하는 value값 반환
- request.getParameterValues("
key") : string[]
그에 해당하는 value값 배열에 담겨서 반환
package 선언부
Class 작성부
method 작성부
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String[] foods = request.getParameterValues("food");
- input type="text"
"문자열" 또는 " "(빈문자열)
- input type="radio"
"라디오값1" 또는 "라디오값2" 또는 ... 또는 null
- input type="number"
"숫자" 또는 " "(파싱시 NumberFormatException예외 발생)
- input type="checkbox"
["문자열", "문자열", ...] 또는 null
- input type="range"
"숫자"
- select-option
"옵션값1" 또는 "옵션값2" 또는 ...
2. 전달된 값을 가지고 요청처리 (DB와 상호작용)
3. 성공시 응답페이지(HTML) 만들어서 전송
- 장점
Java코드 내에 작성하기때문에 자바에서의 반복문이나 조건문, 유용한 메소드를 활용해서 구성
- 단점
굉장히 복잡하고 불편, 혹시라도 html을 수정한다면 결국 Java코드를 수정하는것이기 때문에
수정된 내용을 반영시키고자한다면 서버 재실행해야될 수도 있음
3-1. 응답페이지 만드는 방식1. response객체 이용
- 순수 Servlet 방식으로 Java코드 내에서 html을 기술
- 출력할 내용은 문서형태의 html이고 문자셋은 UTF-8이라는것 선언
- 응답하고자 하는 사용자(요청했던 사용자)와의 스트림 생성
- 스트림을 통해 응답 html구문을 한줄씩 출력
package 선언부
Class 작성부
method 작성부
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<style>");
out.println("#name{color:orange;}");
out.println("#age{color:yellow;}");
out.println("</style>");
out.println("</head>");
out.println("<body>");
out.printf("이름 : <span id='name'>%s</span><br>", name);
out.printf("나이 : <span id='age'>%d</span>살<br>", age);
out.print("좋아하는 음식 목록 ");
if(foods == null) {
out.println("없음");
} else {
out.println("<ul>");
for(int i=0; i<foods.length; i++) {
out.println("<li>" + foods[i] + "</li>");
}
out.println("</ul>");
}
out.println("</body>");
out.println("</html>");
3-2. 응답페이지 만드는 방식2. JSP에 위임
- JSP(Java Server Page) 방식으로 html내에서 Java코드를 기술
- 전달된 값을 JSP로 전달해야함 (request의 attribute영역 이용)
request.setAttribute("키", 밸류);
- JSP페이지를 선택하면서 RequestDispatcher생성 (포워딩)
package 선언부
Class 작성부
method 작성부
request.setAttribute("name", name);
request.setAttribute("age", age);
request.setAttribute("foods", foods);
RequestDispatcher view = request.getRequestDispatcher("jsp페이지의경로");
view.forward(request, response);