개발 공부중

[JAVA] 쿼리스트링 활용하기 (GET/POST) 본문

JAVA

[JAVA] 쿼리스트링 활용하기 (GET/POST)

개발자 leelee 2023. 10. 16. 00:26

쿼리스트링이란?

쿼리스트링은 URL에서 정보를 전달하는 데 사용되는 일반적인 방법 중 하나이다.

주로 웹 애플리케이션에서 GET 요청을 통해 데이터를 전송할 때 사용된다.

쿼리스트링은 URL의 끝에 "?" 문자로 시작하며, 그 뒤에 "키=값" 쌍을 나열하여 데이터를 전달한다.

각 "키=값" 쌍은 "&" 문자로 구분됩니다.

 

 

전달되는 입력값의 형태 예시 (GET 방식)

쿼리스트링을 아래와 같이 사용할 경우 전달되는 값은?

아래 예제는

"/hi" 경로로 HTTP GET 요청을 처리하고, 요청 파라미터 "cnt"를 쿼리스트링에서 읽어와서 반복 횟수를 지정한 후 "안녕 서블릿 !!!" 메시지를 출력하는 예제 코드

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("/hi")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		request.setCharacterEncoding("UTF-8");

		PrintWriter out = response.getWriter();

		int cnt = Integer.parseInt(request.getParameter("cnt"));
		
		for(int i = 0; i< cnt; i++) {
			out.println((i+1)+ ": 안녕 서블릿 !!! <br>");
		}
	}
}

 

 

위 코드를 실행하면 cnt가 null이라  500 에러가 뜬다.

주소를 /hi?cnt=3 으로 바꾸면 화면이 나온다.


오류 해결방법

null 오류가 나지 않게 cnt에 기본값을 설정해준다.

package com.newlecture.web;

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("/hi")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		request.setCharacterEncoding("UTF-8");

		PrintWriter out = response.getWriter();

		String cnt_ = request.getParameter("cnt");

		int cnt = 100; //cnt의 기본값을 설정
		if(cnt_ != null && !cnt_.equals("")) //전달된 값이 있으면
			cnt = Integer.parseInt(cnt_);    //전달된 값으로 대체
		
		for(int i = 0; i< cnt; i++) {
			out.println((i+1)+ ": 안녕 서블릿 !!! <br>");
		}
	}
}

주소가 /hi 일때 글자가 100번 나온다.

 

아래는 확인할 수 있는 예시

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Nana.java</title>
</head>
<body>

환영합니다 <br>
<a href = "hi"> 인사하기 </a><br>
<a href = "hi?cnt=3"> 인사 3번하기 </a><br>
</body>
</html>


사용자가 cnt 값을 직접 입력할 수 있도록 해주었다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Nana.java</title>
</head>
<body>

환영합니다 <br>
<a href = "hi"> 인사하기 </a><br>
<a href = "hi?cnt=3"> 인사 3번하기 </a><br>

<div>
	<form action="hi">
		<div>몇번 출력할까요??? </div>
		<div>
			<input type ="text" name = cnt />
			<input type ="submit" value="출력" /> 
		</div>
	</form>
</div>
</body>
</html>

결과화면


POST 방식

등록 버튼을 누르면 post방식으로 전송된다

아래는 예시 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css/bootstrap.css"> <!-- 참조  -->
<title>JSP 전송</title>
</head>
<body>
	<div>
		<form action ="notice-reg" method="POST">
			<div>
				<label>제목:</label> 
                   <input type ="text" class="form-control" placeholder="제목을 입력" name ="title" style="width:500px;">
			</div>
		
			<div>
				<label>내용:</label> 
                   <textarea class="form-control" placeholder="내용을 입력" name ="content" style="width:500px;" ></textarea>
			</div>
			<div>
				<input class="btn btn-primary" type="submit" value="등록" /> 
			</div>
		
		
		</form>
	
	</div>
	<script>

	</script>

</body>
</html>

reg.jsp

 

package com.newlecture.web;


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("/notice-reg")
public class NoticeReg extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		request.setCharacterEncoding("UTF-8");

		PrintWriter out = response.getWriter();

		String title = request.getParameter("title");
		String content = request.getParameter("content");
		
		out.println("==== title ====<br/>");
		out.printf(title + "<br/><br/>");
		
		out.println("==== content ====<br/>");
		out.println(content + "<br/><br/>");
	}
}

NoticeReg.java

Comments