이번 포스팅은 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에 대한 데이터값을 받아 출력하는 것을 볼 수 있다.
끝.
'개발 지식 > JSP & Servlet' 카테고리의 다른 글
[JSP & Servlet] 서블릿 스코프(Scope) : Page, Request, Session, Application (0) | 2020.08.07 |
---|---|
[JSP & Servlet] 서블릿 파라미터(init-Param, context-param) (0) | 2020.08.07 |
[JSP & Servlet] doGet, doPost 그리고 기타 메소드의 lifeCycle (0) | 2020.08.04 |
[JSP & Servlet] Servlet 이란 무엇일까? (0) | 2020.08.04 |
댓글