본문 바로가기
Study/중앙정보처리학원과정

37일차. JSP getParameterValues, getParameterNames, getParameterMap

by 얏옹이 2022. 12. 15.
반응형

오늘은 JSP의 getParameterValues, getParameterNames, getParameterMap

메소드에 대해서 수업을 진행했다. 오늘 주된 수업의 내용은 값을 넘기고, 그 값을 전달받은 Page에서 해당 값을 어떻게 가져오고 어떻게 출력해주는것인지가 중점으로 이뤄진 수업이였다.

 

과제를 내주신 내용을 바탕으로 오늘 배운 저 JSP의 Method들을 이용하여 복습과 과제를 동시에 진행해보겠다.

 

먼저 값을 넘겨주는 withlabel이라는 JSP 파일을 생성해주어 값을 입력하는 여러가지 유형의 <input> 타입을 살펴보겠다.

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>withlabel</title>
</head>
<body>
	<h1>withlabel 값을 입력하는 Page</h1>
	<form action="withlabelresult.jsp" target="_blank">
	<fieldset>
	<legend>개인정보</legend>
	이름:<input type="text" name="user_name" id="user_name" autofocus="autofocus" placeholder="이름"/ size="10"><br/>
	비밀번호:<input type="password" name="user_pwd" id="user_pwd" placeholder="비밀번호" required="required"/><br/>
	메일주소:<input type="email" name="user_mail" id="user_mail" placeholder="이메일"/><br/></fieldset>
	<fieldset>
	<legend>선택사항</legend>
	좋아하는 TOP선수(중복선택가능):
			<br/><label><input type="checkbox" name="topname" id="topname1" value="canna"/>Canna</label>
				<label><input type="checkbox" name="topname" id="topname2" value="kingen"/>Kingen</label>
				<label><input type="checkbox" name="topname" id="topname3" value="nuguri"/>Nuguri</label>
				<label><input type="checkbox" name="topname" id="topname4" value="doran"/>Doran</label>
				<label><input type="checkbox" name="topname" id="topname5" value="kiin"/>Kiin</label><br/>
	좋아하는 MID선수(중복선택가능):<br/>
				<label><input type="checkbox" name="midname" id="midname1" value="faker"/>faker</label>
				<label><input type="checkbox" name="midname" id="midname2" value="chovy"/>Chovy</label>
				<label><input type="checkbox" name="midname" id="midname3" value="zeka"/>Zeka</label>
				<label><input type="checkbox" name="midname" id="midname4" value="bdd"/>Bdd</label>
				<label><input type="checkbox" name="midname" id="midname5" value="showmaker"/>Showmaker</label></fieldset>
				<input type="submit" value="제출"/>
				<input type="reset" value="초기화"/>
	</form>			
				
	
</body>
</html>

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> withlabel

withlabel 값을 입력하는 Page

개인정보 이름:
비밀번호:
메일주소:
선택사항 좋아하는 TOP선수(중복선택가능):

좋아하는 MID선수(중복선택가능):

 

HTML 파일로 만들어도 되지만, 과제 조건 자체가 JSP 파일로 작성하라는게 과제 조건중 하나였다. 

 

티스토리의 HTML 블럭에서는 fieldset이 먹지않는거같다 웹페이지에서 작동을 확인했을때는

 

 

이런식으로 보여진다. 저기서 단락을 구별하는듯한 선이 출력되는것이 바로 <fieldset>이다.

 

그리고 저 선 사이를 뚫고 fieldset의 이름을 지어주는듯한 태그가 바로 <legend> 이다.

 

입력을 하는 Form은 이렇게 생성하였고, 이제 데이터를 받아와서 출력해주는 jsp파일을 만들었다.

 

Form action란에 보면 withlabelresult.jsp라는 파일을 만들어주었다.

 

 

<%@page import="java.util.Iterator"%>
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.Map, java.util.Set"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>withlabelresult</title>
</head>
<body>
	<h1>withlabel의 값을 받아서 출력하는 Page</h1>
	<fieldset>
	<legend>입력한개인정보</legend>
	이름:<%String name = request.getParameter("user_name"); //request.getParameter(parameter명) 값을 하나하나 받아오는 방법
			out.print(name); %><br/> 
			<!-- out.print(변수명)은 기존 java System.out.print와 같은 기능이지만 console에서 출력하는것이 아닌 외부 page에서 출력하게함 -->
	비번:<%String pwd = request.getParameter("user_pwd"); 
			out.print(pwd);%><br/>
	메일주소:<%String email = request.getParameter("user_mail");
			out.print(email);%></fieldset>
	<fieldset>
	<legend>입력한선택사항</legend>
	<!-- request.getParameterNames는 전송된 parameter의 이름들을 가져온다. Enumeration 참조변수로 받아준다 -->
	parameterName:<% Enumeration<String> paraName = request.getParameterNames();
					 while(paraName.hasMoreElements()) {
						String pName = paraName.nextElement();
						out.print(pName+",");
					 }%><br/>
		<!-- request.getParameterValues는 String타입의 배열로 넘어온 파라미터안의 값들을 가져온다 --> 
	TOP선택1:<%String[] topnames = request.getParameterValues("topname"); 
				if(topnames != null) {
				for(int i=0; i<topnames.length; i++) {
					out.print(topnames[i]+",");
					}
				} else {
					out.print("선택된 값이 없습니다");
				}%><br/>
		<!-- request.getParameterMap은 Map형식으로 파라미터의 값을 가져온다. Key와 value로 이루어져있다. keyset으로 값을 꺼내주는 방식으로 작성 -->
	MID선택2:<%Map<String, String[]> midMap = request.getParameterMap();
				String[] values = midMap.get("midname");
				for(int i=0; i<values.length; i++) {
					out.print(values[i]+",");
				}
				%><br>
				<hr/>
	모든 파라미터와 넘어오는값을 map을 이용하여 출력하기<br/>
	<%Map<String, String[]> allMap = request.getParameterMap();
		Set<String> set = allMap.keySet();
		Iterator<String> iter = set.iterator();
		if(iter.hasNext()) {
			while(iter.hasNext()) {
				String keys = (String)iter.next();
				String[] allvalues = allMap.get(keys);
				for(int i=0; i<allvalues.length; i++) {
					out.print("key값:"+keys+" value값:"+allvalues[i]+"<br/>");
				}
			}
		}
		
		%>
	
						
	</fieldset>	
</body>
</html>

 

여기서 사용되는 request.getparameter의 메소드들을 살펴보자.

 

  1. getParameter(parameter이름) - user_name과 user_pwd라는 이름의 parameter의 값을 가져온다. HTML은 모두 String타입으로 가져오기때문에 String 타입의 변수에 넣어줘서 출력을 해준다
  2. getParameterNames() - 넘어오는 모든 Parameter의 이름을 확인해준다.Enumeration 타입으로 리턴해주기때문에 동일한 타입의 변수명을 선언해주고 Set과 비슷한 형식이기때문에 반복문을 사용하여 모두 값을 꺼내준다. 여기서 hasmoreElement는 elements를 가지고 있는지 확인하는 메서드이며, while문을 사용하여 다음 elements가 없을때까지 반복해서 nextElements 메서드를 사용하여 값을 꺼내고 출력해준다
  3. getParameterValues(parameter이름) - input checkbox의 특징은 하나의 parameter이름으로 여러개의 값이 넘어온다는것이다. 이를 받아올때 getParameterValues를 이용하여 해당하는 Parameter의 모든 값을 String타입의 배열로 리턴해주기때문에 동일타입의 배열로 받아준후 for문을 이용하여 출력해준다.
  4. getParameterMap() - checkbox에서 넘어온 값들을 key:value 구성으로 이루어진 Map형식으로 받아온다. 우리에게 현재 키값은 넘어오는 parameter이름이므로 get(parameter이름)으로 value를 꺼내서 출력해준다

 

마지막으로 쓰인 모든 파라미터와 넘어오는값을 Map형식으로 출력해보는건 key 값을 모른다는 가정하에 keyset과

 

Iterator를 이용하여 key값을 구하고 그 구한 key값으로 value를 구하는, Map 클래스의 복습차원에서 한번 작성을 추가로 해줬다.

 

이렇게 넘어온값들이 잘 출력해보겠다.

 

이렇게 다중선택을 해주었고 submit 버튼을 눌러주니

 

값도 잘 받아와서 출력도 정상적으로 잘 해주는것을 확인할수 있었다.

반응형