JSP/Servlet - Servlet 생성과 화면 출력( PrintWriter out = response.getWriter(); )

songmin jeon·2023년 12월 28일
0
post-thumbnail

1. Servlet (동적) 프로젝트 생성

  • 이름은 Servlet01

  • next > next

  • Context root는(최상위 경로를 나타낸다.) 나중에 프로젝트명이 아닌 다른 명으로 내보낼 예정...

  • 피니쉬 클릭
    프로젝트가 다음과 같이 생성되면 동적 페이지 프로젝트 !


2. Servlet

  • Servlet 확장자는 . java

2.1. src/main/java 영역에 새로운 패키지 만들기

  • 기본 값이 상속의 특성을 띄고 있다.

  • next > next

  • 아래와 같이 체크

  • 생성되면 주석 모두 삭제(앞으로 주석을 많이 쓸예정)

  • 실행 해보기

  • 화면 출력 !


톰켓 주소 알아보기 !

http://localhost:8081/Servlet01/ex00CreareServlet
  • http:// -> hyper text transfer protocol 사용
  • localhost -> server의 ip 주소
  • :8081 -> port 번호
  • /Servlet01 -> Context root(==Context Path)
  • /ex00CreareServlet -> url mapping 값

  • 수정을 하면 서버가 다시 반영됬는지 확인 방법.

2.2. servlet 파일 기본 코드해석


  • @WebServlet("/Create")

  • public class ex00CreateServlet extends HttpServlet { }

// url mapping 값
// : 실제 Servlet 클래스 파일과 문자열 url 경로값을 연결시키는 방법
// --> 경로를 간략하게 표현 가능하다.
// --> 클래스 파일의 이름을 숨김으로써 보안상 유리하다.
@WebServlet("/Create")
public class ex00CreateServlet extends HttpServlet {
	// 톰켓 Servlet 파일을 관리해주는 공간이 있다. (예로 main이 없는데 실행이 된다 > ?)
	// Servlet Container 
	// --> HttpServlet이라는 클래스를 상속받은 파일들을 관리하는 공간
	// --> 클래스 파일을 생성, 사용, 삭제 등 생명주기를 관리해주는 공간
	// --> HTML 파일로 자동으로 변환

  • private static final long serialVersionUID = 1L;

	// 2. 객체를 직렬화 시키는 코드
	// --> 컴퓨터가 파일을 해석하기 위해서는 byte code 형식으로 파일을 변환
	// --> 해당하는 객체가 Servlet 파일임을 알려주는 직렬화 코드
	// * 없어도 크게 상관은 없음.
	private static final long serialVersionUID = 1L;

컴퓨터는 0과1로 구분가능
자바언어를 컴퓨터가 이해가능한 0,1로 바꾸는 것을 직렬화
다시 클래스 파일로 만들어준다 이를 역직렬화
이 파일은 서블릿이니 직렬화시 참고하고 역직렬화시 서블릿이니 참고해야할때 사용하고 없어도 크게 상관은 없음.


  • 생성자 메소드

	// 3. 생성자
	// --> 클래스가 생성되는 순간 호출되는 메소드
	// 리턴 타입 지정x, 메소드명 == 클래스명, 기본 생성자는 생략 가능
    public ex00CreateServlet() {
    	System.out.println("생성자 호출");
    }

  • 초기화시키는 메소드

    // 4. 초기화시키는 메소드
    // initialize의 약자
    // --> Servlet을 초기화 시키는 메소드
    // * 딱 한번만 호출되는 메소드
    // --> 자원을 많이 소모하는 메소드이다.
    public void init(ServletConfig config) throws ServletException {
		System.out.println("초기화 메소드 호출");
	}

  • 삭제 메서드

    // 5. Servlet을 ServletContainer에서 삭제시키는 메소드
    // --> 딱 한번만 호출되는 메소드
    // --> Server가 꺼지는 순간에 호출되는 메소드
	public void destroy() {
		System.out.println("삭제 메소드 호출");
	}

  • 요청이 들어오는 순간 실행되는 메소드

	// 6. 요청이 들어오는 순간 실행되는 메소드
	// == java의 main method 영역
	// 요청이 들어 올때마다 호출되는 메소드(여러번 호출 될 수 있다.)
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service 메소드 호출");
	}

  • doGet , doPost 메소드

	// 7. doGetm doPost 메소드
	// : 요청이 들어 올때마다 실행하는 메소드
	// doGet --> get 요청 방식으로 들어올때 실행하는 메소드
	// doPost --> post 요청 방식으로 들어올때 실행하는 메소드
	// **** service --> 요청방식을 구분하지 않고 요청이 들어올 때 실행하는 메소드 ****
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

서버에 요청을 보내는 방식이 여러가지가 있다.
우체국 편지를 일반/등기 처럼 데이터를 요청하는 방식이 있다.
그 방식이라는 것 중에 get, post 방식과 service 방식 있다.
get, post 사용하지 않는 이유는 service는 구분하지 않고 보낼 수 있다.


  • 서버 실행시 생성자와 초기화 한번만 실행

  • 홈페이지를 새로고침할때마다 메소드 호출

  • 서버 종료방법 아래 그림 참조

  • 서버 종료시 콘솔로 삭제 메소드 확인가능.


3. 화면에 출력하는 방법

  • 새로운 서블릿 파일 생성

  • URL mappings 에서 안에 것을 더블 클릭해서 이름 변경가능 -> 변경하는 것은 URL의 정보를 수정하는 것임.

  • 다음과 같이 불필요한 것 제거


  • 추후 서블릿 잘하는 법..
    • 요청에 대한 정보를 누가 가지고 있는가?
    • 응답에 대한 정보를 누가 가지고 있는가?.

package sevlet01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/print")
public class ex01print extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// request
		// --> Client의 요청 정보를 가지고 있는 객체
		
		// reponse
		// --> 응답 정보를 가지고 있는 객체
		// 우리가 생성하는 객체가 아니라, tomcat에서 메소드의 매개변수로 자동으로 수집
		
		// 화면에 출력하는 방법
		// --> 응답을 되돌려 주겠다 !
		// tomcat 8버전 이상 charset = UTF-8 -> 표현할 수 있는 범위가 더 많음
		// tomcat 7버전 이하 charset = EUC-KR
		
		// 0) 응답 객체 한글 인코딩 수정하기 
		response.setContentType("text/html;charset=UTF-8");
		
		// 1) 응답 객체로 부터 화면에 출력을 도와주는 도구를 꺼내오기
		PrintWriter out = response.getWriter();
		// 2) 도구 사용하기
		out.print("<h1>");
		out.print("2023년도 나흘 남았습니다..!");
		out.print("</h1>");
	
	}
}


4. 실습 해보기

  • 아래 그림과 같이 table 태그로 실습 해보기!
package sevlet01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ex02Table
 */
@WebServlet("/Table")
public class ex02Table extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// 0) 응답 객체 한글 인코딩 수정하기 
		response.setContentType("text/html;charset=UTF-8");
		System.out.println("새로고침 확인용");
		
		// 1) 응답 객체로 부터 화면에 출력을 도와주는 도구를 꺼내오기
		PrintWriter out = response.getWriter();
		
		// 2) 도구 사용하기
			out.print("<table border=1>"
					+ "<tr>");
			
			for (int j = 1; j <= 6; j++) {
				out.print("<td>" + j + "</td>");
			}
			
			out.print("</tr>"
					+ "</table>");

	}
}

4.1. 마무리하며 복습...

  • Servlet
    • Servlet + Applet
      -> 동적인 페이지, 서버상에서 동작하는 응용 프로그램
      -> Java 언어 기반
  • Servlet 생명주기
  • url mapping
  • Secvlet 안에서 화면에 출력하는 방법
profile
제가 한 번 해보겠습니다.

0개의 댓글