server Servlet

moonseungha·2023년 1월 1일

📌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을 기술
  1. 출력할 내용은 문서형태의 html이고 문자셋은 UTF-8이라는것 선언
  2. 응답하고자 하는 사용자(요청했던 사용자)와의 스트림 생성
  3. 스트림을 통해 응답 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코드를 기술
  1. 전달된 값을 JSP로 전달해야함 (request의 attribute영역 이용)
    request.setAttribute("키", 밸류);
  2. 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);

0개의 댓글