Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 캐시
- VMware
- JPA
- 레디스
- 영속성 컨텍스트
- 게시판
- 깃허브
- 스프링부트
- spring security
- 스프링 시큐리티
- Spring Boot
- 분할정복
- MongoDB
- Redis
- 다이나믹프로그래밍
- 자바의 정석
- 실행 컨텍스트
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 정처기
- NoSQL
- in-memory
- 스프링 부트
- 이벤트루프
- 동적계획법
- 정보처리기사
- document database
- 호이스팅
- SQL
- github
- sqld
Archives
- Today
- Total
FreeHand
Servlet 등록 / 요청과 응답 본문
서블릿 등록
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으로 변경한다.
'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 |