쉽게 풀어서 설명하자면 이번 정리의 목표는
사용자가 입력한 결과값들을 잘 받기 이다 !!
[getParameter계열 메소드가 null을 반환하거나 빈 문자열을 반환 하는 경우]
1. parameter를 전달하지 않거나 파라미터명이 틀린 경우 null반환
2.Text박스 계열인 경우 값을 입력 안하고 전송한 경우 빈 문자열(" ") 반환
3.선택 계열인 radio박스나 checkbox등인 경우 미 선택시에는 null반환(왜냐하면 파라미터가 전달이 안되니까!)
※name이 같은 form의 하위요소의 값을 받을때는 getParameterValues() -> 이게 뭔말이냐면 name 은 1개인데 value 값이 여러 개일 때를 말함 ! 체크박스같은거 ! 값이 여러개 일 수 있지 !
단, type="radio"처럼 하나의 이름으로 하나의 값을 전달할때는 getParameter()로 받아도 된다.
자 우선 받은 HTML 문서 보고 확인(+ form 태그 이용한 값 전송 결과물까지 )
<h1 class="display-4">
<code>form</code>태그를 이용한 값 전송
</h1>
<form> <!-- 따로 지정 없으니 get방식 -->
<div class="form-group">
<label class="lead font-weight-bold">이름</label>
<input type="text" class="form-control" name="name"> <!-- text박스는 입력값이 없어도 무조건 전송이 됨 !!-->
</div>
<div class="form-group">
<label class="lead font-weight-bold">성별</label>
<div class="form-check">
<label class="form-check-label"> <input type="radio"
class="form-check-input" name="gender" value="남자">남자
</label>
</div>
<div class="form-check">
<label class="form-check-label"> <input type="radio"
class="form-check-input" name="gender" value="여자">여자
</label>
</div>
</div>
<div class="form-group">
<label class="lead font-weight-bold">관심사항</label>
<div class="form-check">
<label class="form-check-label">
<input type="checkbox" class="form-check-input" name="inter" value="POL">정치
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input type="checkbox" class="form-check-input" name="inter" value="ECO">경제
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input type="checkbox" class="form-check-input" name="inter" value="ENT">연예
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input type="checkbox" class="form-check-input" name="inter" value="SPO">스포츠
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">확인</button>
</form>
//form 태그를 이용한 값 전송 결과 바로 뿌리기
<h3><%= values %></h3>
1. 사용자에게 입력 받아야지
<%
//파라미터 받기
String name = request.getParameter("name");
String gender = request.getParameter("gender");
String[] inter= request.getParameterValues("inter"); // 값이 여러개가 가능해서 getParameterValues
// out.println(String.format("이름:%s,성별:%s,관심사항:%s",name,gender,inter)); 관심사항은 배열이라 주소가 출력 됨..
String values =" ";
if(name != null && name.trim().length()!=0 && gender != null && inter != null ){
values=String.format("이름:%s,성별:%s,관심사항:",name,gender);
for(String code : inter) values += codeToValue(code)+ " "; //관심사항은 따로 구해 values에 누적 함!
}
%>
그리고 관심사항의 코드값은 직관적으로 알아보기 힘들어서
코드값을 value로 변경 할 것임!
이건 맨~ 위 선언부에서 선언한다 !
<%!
///코드값을 value로 변경하는 메소드
private String codeToValue(String code){
switch(code.toUpperCase()){
case "POL": return "정치";
case "ECO": return "경제";
case "ENT": return "연예";
default: return "스포츠";
}
}
%>
1. a 태그방식으로 전송 값 얻기
<h1 class="display-4">
<code>a</code>태그를 이용한 값 전송
</h1> <!-- a 태그는 무조건 get방식 -->
<a href="RequestForParameter.jsp?name=코스모&gender=남&inter=eco&inter=spo&inter=ent">GET</a>
<h1 class="display-4">모든 파라미터명 얻기 </h1>
<!-- request 객체의 getParameterNames()메소드로 얻는다
파라미터명 존재 여부 판단
-->
<ul class="list-unstyled">
<%
Enumeration<String> names =request.getParameterNames();
while(names.hasMoreElements()){
//파라미터명 얻기
String paramName = names.nextElement();
//파라미터값 얻기
//out.println("<li>"+request.getParameter(paramName)+"</li>"); 이렇게 하면 관심사항 여러개 찍어도 하나만 넘어감
//out.println("<li>"+request.getParameterValues(paramName)+"</li>"); 이건 주소가 나와서 안됨
if(paramName.equals("inter")){
String[] paramValues =request.getParameterValues(paramName);
//out.println("<li>"+String.format("%s : %s",paramName,Arrays.toString(paramValues))+"</li>");
//코드변환출력
//방법1.
String vals="";
for(String code:paramValues){
vals += codeToValue(code)+" ";
}
out.println("<li>"+String.format("%s : %s",paramName,vals)+"</li>");
//방법2. 스트림 사용해서 배열의 요소값들을 변환
Stream<String> streams = Arrays.stream(paramValues);
String vals = Arrays.toString(streams.map(x->codeToValue(x)).toArray());
out.println("<li>"+String.format("%s:%s",paramName,vals)+"</li>");
}
else{
String paramValue =request.getParameter(paramName);
out.println("<li>"+String.format("%s : %s",paramName,paramValue)+"</li>");
}
}
%>
</ul>
2.맵으로 모든 파라미터 얻기
getParameterMap() : 많은 파라미터가 있을 때 한꺼번에 받을 때 유리
key는 파라미터명이 되고
value는 사용자가 입력하거나 선택한 값이 된다
<h1 class="display-4"> 맵으로 모든 파라미터 얻기</h1>
<ul class="list-unstyled">
<%
Map<String,String[]> params = request.getParameterMap();
//파라미터명 얻기
Set<String> paramNames = params.keySet(); //키들 가져와 담음
out.println("모든 파라미터명:"+paramNames.toString());
for(String paramName:paramNames){
String[] vals = params.get(paramName); //키로 value값들을 꺼내와 배열에 담음
if(vals.length != 1 ){
%>
<li><%=paramName %> : <%= Arrays.toString(vals) %></li>
<%
}
else{ %>
<li><%=paramName %> : <%=vals[0] %></li> //1개만 선택 했을 때
<%
}
} ///for
%>
</ul>
'학원 > JSP' 카테고리의 다른 글
11/22 48-1 [JSP] ResponseForHeader (0) | 2022.11.22 |
---|---|
11/21 47-8 [JSP] RequestForExam ++추가 (0) | 2022.11.22 |
11/21 47-6 [JSP] ScriptingExample (0) | 2022.11.21 |
11/21 47-5 [JSP] RequestForHeader (0) | 2022.11.21 |
11/21 47-4 [JSP] RequestForServerNClient (0) | 2022.11.21 |