FreeHand

Servlet 등록 / 요청과 응답 본문

Web/...

Servlet 등록 / 요청과 응답

Jinn 2023. 10. 15. 01:22

서블릿 등록

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@ServletComponentScan // 서블릿 자동 등록
@SpringBootApplication
public class ServletApplication {

	public static void main(String[] args) {
		SpringApplication.run(ServletApplication.class, args);
	}
    
}
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // ...
    }
}

@WebServlet: 서블릿 애노테이션

- name: 서블릿 이름

- urlPatterns: URL 매핑

 

HTTP 요청으로 매핑된 URL이 호출되면 서블릿 컨테이너가 service 메서드를 실행한다.

 

 

HTTP 요청 데이터 - GET 쿼리 파라미터

쿼리 파라미터를 조회하는 메서드

// 단일 파라미터 조회
String username = request.getParameter("username");

// 모든 파라미터 이름 조회
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()) {
	String paramName = parameterNames.nextElement(); // username, age
    System.out.println(paramName + "=" + request.getParameter(paramName));
}
// 또는
request.getParameterNames().asIterator()
	.forEachRemaining(paramName -> System.out.println(paramName + "=" + request.getParameter(paramName)));

// Map으로 조회
Map<String, String[]> parameterMap = request.getParameterMap();

// 복수 파라미터 조회
String[] usernames = request.getParameterValus("username");
for(String name : usernames) {
	System.out.println("username = " + name);
}

 

?username=jin&username=lee처럼 같은 파라미터 이름에 값이 중복일때, request.getParameter()를 사용하면 첫번째 값을 반환한다.

 

 

HTTP 요청 데이터 - POST HTML form

HTTP 메시지 바디에 쿼리 파라미터 형식으로 데이터 전달 (content-type: application/x-www-form-urlencoded)

따라서 쿼리 파라미터 조회 메서드를 사용하여 조회하면 된다.

 

 

HTTP 요청 데이터 - API 메시지 바디(JSON)

HTTP 메시지 바디에 데이터를 직접 담아서 요청 (JSON 형식)

@Getter @Setter
public class HelloData {
    private String username;
    private int age;
}
private ObjectMapper objectMapper = new ObjectMapper();

@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.username = " + helloData.getUsername());
    System.out.println("helloData.age = " + helloData.getAge());
    
    response.getWriter().write("ok");
}

HTTP 요청 바디: {"username": "jin", "age": 25}

 

 

HTTP 응답 데이터 - 텍스트

//response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");

PrintWriter writer = response.getWriter();
writer.println("print text");

content-type을 text/plain으로 설정하고 출력한다.

 

 

HTTP 응답 데이터 - HTML

//response.setHeader("Content-Type", "text/html;charset=utf-8");
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");

PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head>");
writer.println("</head>");
writer.println("<body>");
writer.println("    <h1>print text</h1>");
writer.println("</body>");
writer.println("</html>");

content-type을 text/html으로 설정하고 출력한다.

 

 

HTTP 응답 데이터 - API JSON

private ObjectMapper objectMapper = new ObjectMapper();

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//Content-Type: application/json
	response.setHeader("content-type", "application/json");
	response.setCharacterEncoding("utf-8");
    
	HelloData data = new HelloData();
	data.setUsername("kim");
	data.setAge(20);
    
	//{"username":"kim","age":20}
	String result = objectMapper.writeValueAsString(data);
    
	response.getWriter().write(result);
}

Jackson 라이브러리가 제공하는 objectMapper.writeValueAsString()을 사용하면 객체를 JSON으로 변경한다.

 

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 (inflearn.com)

'Web > ...' 카테고리의 다른 글

[대규모 시스템 설계 기초] 사용자 수에 따른 규모 확장성  (0) 2024.06.28
서블릿 MVC 2  (0) 2024.01.07
CORS  (1) 2023.12.20
서블릿 MVC  (0) 2023.10.18
Servlet과 JSP  (0) 2023.10.15