본문 바로가기
JSP

[JSP] 13. 쿼리 스트링

글: Song hyun 2024. 7. 3.
728x90
반응형

[JSP] 13. 쿼리 스트링

 

1. Query String이란?

-쿼리 스트링은 URL의 일부로, URL에서 리소스 경로 뒤에 추가로 전달되는 매개변수들을 나타낸다. 

-쿼리 스트링은 '?' 문자 뒤에 위치하며, 여러 개의 매개변수는 '&'문자로 구분된다.

 

 

 

2.Path variable이란?

 Path variable은 URL 경로의 일부로 포함된 매개변수이다. 리소스의 특정 식별자나 속성을 URL 경로에 직접 포함시켜 RESTful API에서 자주 사용된다.

 

 

 

3. 주소 설계 방식 비교

(1) Query String 방식

-매개변수는 '?'뒤에 '&'로 구분한다.

-일반적으로 필터링, 검색, 페이징 등에 사용된다.

 

(2) Path Variable 방식

-매개변수는 URL 경로의 일부로 포함한다.

-리소스의 식별자나 속성을 명확히 나타낸다.

-RESTful API 설계에서 자주 사용된다.

 

 

4. 시나리오 코드

package com.tenco.controller;

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;


// http://localhost:8080/req-test
@WebServlet("/req-test")
public class RequestTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public RequestTest() {
        super();
    }

    // http://localhost:8080/gp/req-test?name="홍길동"
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// http 메서드 <--- GET 방식일 때 동작한다.
		// 요청을 받고, 응답시에 MIME TYPE을 text/html 형식으로 내려주려고 한다.
		response.setContentType("text/html; charset=UTF-8");
		
		// HTTP 요청 메세지의 시작줄에 /req-test?name="홍길동"
		String name=request.getParameter("name");
		String greeting="Hello,"+name+" !!";
		response.getWriter().print("<html><body><h2>"+greeting+"</h2></body></html>");
	}


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

}

 

package com.tenco.controller;

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;


// http://localhost:8080/gp/req-test
@WebServlet("/req-test")
public class RequestTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public RequestTest() {
        super();
    }

    // http://localhost:8080/gp/req-test
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// http 메서드 <--- GET 방식일 때 동작한다.
		// 요청을 받고, 응답시에 MIME TYPE을 text/html 형식으로 내려주려고 한다.
		response.setContentType("text/html; charset=UTF-8");
		
		// HTTP 요청 메세지의 시작줄에 /req-test?name="홍길동"
		String name=request.getParameter("name");
		String greeting="Hello,"+(name!=null ? name : "배고파유...")+" !!";
		response.getWriter().print("<html><body><h2>"+greeting+"</h2></body></html>");
		
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 요청을 받아서 (인증 검사, 요청 값들의 유효성 검사)
		
		// HTTP 요청 바디에서 데이터를 추출
		response.setContentType("text/html; charset=UTF-8");
		String name=request.getParameter("name");
		String email=request.getParameter("email");
		
		// 보통 DB에 접근해서 CRUD 작업
		
		response.getWriter().write("<html>");
		response.getWriter().write("<head>");
		response.getWriter().write("</head>");
		response.getWriter().write("<body>");
		response.getWriter().write("<h1>");
		response.getWriter().write("<p>");
		response.getWriter().write("name : "+name);
		response.getWriter().write("</br>");
		response.getWriter().write("email : "+email);
		response.getWriter().write("</p>");
		response.getWriter().write("</h1>");
		response.getWriter().write("</body>");
		response.getWriter().write("<html>");
		
		
		
		
	}

}

 

		//response.setContentType("text/html; charset=UTF-8");
		String name=request.getParameter("name");
		String email=request.getParameter("email");


-ContentType이 제대로 지정되어 있지 않으면, 데이터가 제대로 읽히지 않기도 한다.

-UTF-8이 없으면, 브라우저에 따라 한글이 깨지기도 한다.

 

컨텍스트 루트를 변경하면, 기존 URL로 들어갈 수 없다.

 

*컨텍스트 루트(Context root)란?

 웹 애플리케이션이 URL을 통해 접근될 때 사용되는 기본 경로이다. 웹 애플리케이션이 웹 서버나 애플리케이션 서버에 배포될 때, 서버는 각 애플리케이션에 대해 고유한 컨텍스트 루트를 할당한다. 이를 통해 여러 애플리케이션이 동일한 서버에서 여러 애플리케이션을 동시에 실행시킬 수도 있다.

 

*컨텍스트 루트는 server.xml에서 설정할 수 있다!

 

**주소창에서 한글이 있는 경우, 복사하면 한글이 인코딩처리된다.

-> URL 인코딩

-URL은 ASCII 문자만을 안전하게 포함할 수 있다. ASCII 코드로 표현되지 않는 문자는 URL에서 문제를 일으킬 수 있다.

-따라서 비 ASCII, 즉 문자나 특수 문자는 URL 인코딩되어야 한다.

-URL 인코딩은 해당 문자를 %와 두자리 16진수로 변환한다.

 

 

728x90
반응형

'JSP' 카테고리의 다른 글

[JSP] 15. 서블릿과 DB 연동  (0) 2024.07.03
[JSP] 14. 서블릿과 서블릿 컨텍스트  (0) 2024.07.03
[JSP] 12. URI와 URL  (0) 2024.07.03
[JSP] 11. Servlet을 사용하여 JSON 파싱하기  (0) 2024.07.03
[JSP] 10. WAR 파일 생성 및 배포  (0) 2024.07.03