본문 바로가기
개발 지식/JSP & Servlet

[JSP & Servlet] 서블릿 요청 처리

by 에르주 2020. 8. 9.
반응형

이번 포스팅은 JSP 또는 HTML에서 from태그를 통해 서블릿 요청 시 서블릿이 어떻게 처리하는지에 대해 적어보려고 한다.

form 태그의 Action 처리 method는 두가지 방법으로 GET, POST 방식이 있는데 이 방식은 지난번 포스팅에서 언급하여 이번에는 각설하고 바로 서블릿 처리에 대해 적어본다.

 

우선 서블릿이 요청 파라미터를 처리하는 메서드는 3가지로 정리할 수 있다.

 

리턴 타입 메소드명 내용
String getParameter(name) name에 해당되는 파라미터 값을 리턴하고 해당 값이 없을 경우에는 null을 리턴한다.
String [] getParameterValues(name) checkbox, radio 태그와 같이 하나의 name에 여러 값을 가지는 경우 사용, name에 해당되는 파라미터 값을 배열로 리턴한다.
Enumeration (객체의 집합 처리) getParameterNames() 1) 폼 태그 안에 여러 개의 input 태그가 있을 경우 주로 사용, 모든 name 값을 Enumeration 타입으로 리턴한다. (즉 구체적인 파라미터 name을 모를 때 사용한다.)

2) 얻은 name 값을 이용하여 파라미터 값을 얻는다.

 

1) getParameter(name)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>

<h1> 로그인 폼</h1>

<form action="LoginServlet" method="post">
아이디 : <input type="text" name="userID"> <br/>
비밀번호 : <input type="password" name="userPassword"> <br/>

<input type="submit" value="로그인">

</form>
</body>
</html>

 

package com.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		
		String Id= request.getParameter("userID");
		String Password= request.getParameter("userPassword");
		
		
		//응답 처리 서버 ==> 브라우저에게 한글 전송시
		response.setContentType("text/html; charset=utf-8");
		
		
		PrintWriter out = response.getWriter();
		out.print("<html><body>");
		out.print("아이디는 : " + Id + " , 비밀번호는 : " + Password);
		out.print("</body><html>");
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// post 한글 처리 브라우져 ==> 서버에게 한글 전송
		request.setCharacterEncoding("utf-8");
		doGet(request,response);
	}

	

}

 




 

해당 login.html에 name을 설정하고 서블릿으로 요청보내면 서블릿에서는

 

String Id= request.getParameter("userID");
String Password= request.getParameter("userPassword");

 

를 통해 Id, Password 값을 불러와서 브라우저에 뿌려준다.

 

 

 

2) getParamterValues(name)

두번째 getParamterValues(name) 메소드는  checkbox 또는 radio 태그를 사용으로 하나의 name에 여러가지 값을 가져오는 경우 사용한다.

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>

<form action="hobbyServlet" method="post">

취미를 선택하시오 <br/>
게임 <input type="checkbox" name="hobby" value="게임"><br/>
농구 <input type="checkbox" name="hobby" value="농구"><br/>
축구 <input type="checkbox" name="hobby" value="축구"><br/>
배구 <input type="checkbox" name="hobby" value="배구"><br/>

<input type="submit" value="전송">
</form>

</body>
</html>

 

 

package com.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class hobbyServlet
 */
@WebServlet("/hobbyServlet")
public class hobbyServlet extends HttpServlet {
	//private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//하나의 name에 여러 vlaue 가진 사용자 입력데이터 방법
		
		String[] str = request.getParameterValues("hobby");
		for(String s : str) {	
			System.out.println(s);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// POST 경우 한글처리
		request.setCharacterEncoding("utf-8");
		doGet(request, response);
	}

}

 

 

String[] str = request.getParameterValues("hobby");

 

해당 예시를 통해 getParameterValues 메소드는 name이 hobby에 해당되는 배열 값을 리턴한다는 것을 볼 수 있다.

 

 

3) getParamterNames() 

 

해당 메소드는 프론트로 부터 정확한 name을 모르거나 전체 데이터 값을 받아 올 때 활용할 수 있다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>

<h1> 로그인 폼</h1>

<form action="LoginServlet2" method="post">
아이디 : <input type="text" name="userID"> <br/>
비밀번호 : <input type="password" name="userPassword"> <br/>

<input type="submit" value="로그인">

</form>
</body>
</html>
package com.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet2")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

		
		//name값 모를 때
		Enumeration<String> enu = request.getParameterNames();
		while(enu.hasMoreElements()) {
			
			String name =enu.nextElement();
			String value = request.getParameter(name);
			System.out.println(name+"\t"+value);
			
		}
		
		//응답 처리 서버 ==> 브라우저에게 한글 전송시
		response.setContentType("text/html; charset=utf-8");
		response.setCharacterEncoding("UTF-8");
	
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		// post 한글 처리 브라우져 ==> 서버에게 한글 전송
		request.setCharacterEncoding("UTF-8");
		doGet(request,response);
	}

	

}

 

 

 

Enumeration<String> enu = request.gertParamterName()를 통해 전체 요청에 대한 name 값을 알수 있고 

getParameter(name)을 통해서 각 name에 대한 데이터값을 받아 출력하는 것을 볼 수 있다.

 

 

 

끝.

 

반응형

댓글