Servlet

호떡·2022년 9월 1일
0

Servlet이란

Servlet이란

  • 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양
  • 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종 (HttpServlet을 상속받은 클래스)
  • 자바 코드 안에 HTML을 포함
  • main() 대신 service() 메서드를 실행_ 이 마저도 doxxx 메서드로 자동으로 넘어감

기본 및 작성규칙

package com.ssafy.hello;

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 HelloServlet
 */

@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	// 서블릿은 java 파일이기 때문에 text/html 파일로 응답설정
    	response.setContentType("text/html; charset=UTF-8");
    
    	// 이 경우는 웹브라우저에 바로 response를 찍어내는 것
        // (manager 클래스에서 println 해버리는 것처럼)
    	// 웹브라우저에 출력할 스트림을 얻어오는 과정 
		PrintWriter writer = response.getWriter();
		
        // 이 과정이 웹브라우저에 찍을 응답 메시지들을 response에 담는 것 
		writer.append("<html>");
		writer.append("<head>");
		writer.append("<title>Hello</title>");
		writer.append("</head>");
		writer.append("<body>");
		writer.append("<h1>Hello Servlet!</h1>");
		writer.append("</body>");
		writer.append("</html>");
	}

}
  1. Http 관련 서비스를 처리하기 위해서 java.servlet.http.HttpServlet 클래스를 상속받는다.
  2. doGet 또는 doPost 메서드안에 클라이언트의 요청이 왔을 때 처리해야 할 일들을 기술

@WebServlet을 통한 접근

어노테이션에 URL 패턴을 적어주고 해당 URL 패턴으로 들어온 요청은 해당 서블릿과 매핑을 시켜준다.

URL( ... / 포트번호 /context path ex.프로젝트명 /요청 ex.HelloServlet)을 통해 들어온 요청이 HelloServlet 이라는 요청이라면, 어노테이션을 보고 해당 서블릿을 찾아 실행시킨다.

매핑? 서블릿과 URL(요청)을 연결시킨다.

HttpServletRequest와 HttpServletResponse 객체

WAS가 웹브라우져로부터 Servlet요청을 받으면
1. 요청을 받을 때 전달 받은 정보를 HttpServletRequest객체를 생성하여 저장
2. 웹브라우져에게 응답을 돌려줄 HttpServletResponse객체를 생성(빈 객체)
3. 생성된 HttpServletRequest(정보가 저장된)와 HttpServletResponse(비어 있는)를 Servlet에게 전달

HttpServletRequest

👉요청처리 객체

  • Http프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용
  • Header정보, Parameter, Cookie, URI, URL 등의 정보를 읽어들이는 메소드, Body의 Stream을 읽어들이는 메소드를 가진 클래스
  • 메소드 : getParameterValues(), getParameter(), getRemoteHost(), getServerName()

HttpServletResponse

👉응답처리 객체

  • Servlet은 HttpServletResponse객체에 Content Type, 응답코드, 응답 메시지 등을 담아서 전송
  • 인자의 내용에 맞게 동적인 HTML 코드를 생성하여 response 객체에 담아 반환
  • 메소드 : setContentType(String type), setContentLength(int length), getWriter()

doGet()과 doPost() 인코딩

package com.ssafy.hello;

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("/HelloServlet")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	// 서블릿은 java 파일이기 때문에 text/html 파일로 응답설정
        // 응답을 해줄 때는 html로 처리하겠다는 의미
    	response.setContentType("text/html; charset=UTF-8");
    
    	// 이 경우는 웹브라우저에 바로 response를 찍어내는 것
        // 따라서 response에 대한 인코딩이 필요한 것
		PrintWriter writer = response.getWriter();
	
		writer.append("<html>");
		writer.append("<head>");
		writer.append("<title>Hello</title>");
		writer.append("</head>");
		writer.append("<body>");
		writer.append("<h1>Hello Servlet!</h1>");
		writer.append("</body>");
		writer.append("</html>");
	}

}

package com.ssafy.servlet;

import java.io.IOException;
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("/FormServlet")
public class FormServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// request에 인코딩 방식을 설정
		request.setCharacterEncoding("UTF-8");
	
		System.out.println("POST");
		
		System.out.println(request.getParameter("name"));
		System.out.println(request.getParameter("age"));
		System.out.println(request.getParameter("gender"));
	}

}

💡GET방식이든 POST방식이든 정보는 key:value 형태로 들어온다. 따라서 request객체의 메서드인 getParameter(name얘가 키)_ 로 value를 얻을 수 있다.

0개의 댓글