서블릿

이성준·2022년 2월 17일
0

스프링 MVC

목록 보기
2/10

프로젝트 생성



인텔리제이로 바꾸기
이래야 롬복 정상동작

Hello Servlet

?뒷부분 = 쿼리파라미터


@WebServlet(name = "helloServlet", urlPatterns = "/hello")
// /hello로 오면 이클래스가 실행
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("HelloServlet.service");
        System.out.println("request = " + request); //was 서버들이 서블릿 표준스펙을 구현한 구현체가 출력됨
        System.out.println("response = " + response);
        String username = request.getParameter("username");
        System.out.println("username  =  "+ username);

        response.setContentType("text/plain");
        response.setCharacterEncoding("utf-8");
        response.getWriter().write("hello"+ username);



    }
    // 서블릿이 호출되면 서비스 메소드가 호출됨
}

동작원리


HTTP REQUEST
http 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법

  • GET - 쿼리 파라미터
    • 메시지바디x url의 쿼리파라미터에 데이터를 포함해서 전달
    • url*?username=hello&age=20
    • ?로 시작 추가 파라미터는 &로 구분한다
    • request.getParameter 단일값 request.getParameters는 값중복일때
  • POST -HTMLFORM
    • 메시지 바디에 쿼리 파라미터 형식으로 전달 username=hello&age=20
    • request.getParameter는 html form 형식도 지원
  • HTTP message body
    • HTTP API에서 주로 사용

@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletInputStream inputStream = request.getInputStream();
        String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);

        System.out.println("messageBody = " + messageBody);
        HelloData hellodata =objectMapper.readValue(messageBody, HelloData.class);

        System.out.println("hellodata = " + hellodata.getUsername());
        System.out.println("hellodata = " + hellodata.getAge());

    }

텍스트 메시지를 HTTP 메시지 바디에 담아서 전송하고,
HTTP 메시지 바디의 데이터를 InputStream을 사용해서 직접 읽을 수 있다. 자바 객체로 변환하려면 jackson같은게 필요 jackson의 ObjectMapper 로 읽는다 스프링mvc는 기본 제공


HTTP RESPONSE
HTTP 응답, 헤더, 바디 생성
Content-Type, Cookie, Redirect 등의 기능 제공

private void redirect(HttpServletResponse response) throws IOException {
        //Status Code 302
        //Location: /basic/hello-form.html
        //response.setStatus(HttpServletResponse.SC_FOUND); //302
        //response.setHeader("Location", "/basic/hello-form.html");
        response.sendRedirect("/basic/hello-form.html");
    }

리다이렉트
단순 텍스트 응답 -http 응답으로 html를 반환할땐, content-type을 text/html로 지정한다.

json뿌리기

@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("utf-8");

        HelloData helloData = new HelloData();
        helloData.setUsername("kim");
        helloData.setAge(20);

        String result = objectMapper.writeValueAsString(helloData);

0개의 댓글