2009. 3. 30. 18:38

[Tip]모든 폼 데이터 출력하기

여기서는 모든 파라미터 이름을 찾아 표로 만드는 프로그램을 살펴 본다. 이 프로그램은 여러 개의 값을 갖는 파라미터 뿐 아니라 ‘0' 값을 갖는 파라미터도 강조된 문자로 출력해준다. 먼저 ‘HttpServletRequest ‘의 ‘getParameterName' 메소드를 통해 파라미터 이름을 구한다. 다음으로 계속 ‘Enumeration'을 순환하면서 언제 끝낼지 판단하기 위해 ‘hasMoreElement'를 사용하고, 각 값을 얻기 위해 ‘nextElement'를 사용한다. ‘nextElement'는 ‘Object'를 반환하기 때문에 ‘Strings' 배열의 요소를 하나씩 ‘String'으로 변환해서 ‘getParameterValues'로 넘겨준다. 만약 그 배열에 하나의 엔트리만 있고 빈 문자열만 있다면 파라미터는 값을 갖지 않는 것이기 때문에 서블릿에서는 ‘No Value'를 이탤릭 체로 출력하게 했다. 만약 배열에 1개 이상의 엔트리가 있다면 그 파라미터는 여러 개의 값을 갖기 때문에 점으로 된 목록으로 각기 그 값을 출력하게 한다. 이외의 경우는 표에 값이 출력되도록 했다.
소스 다운로드

여기서는 이전에 만든 ServletUtilities.java 를 사용한다.

package hall;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

/** Shows all the parameters sent to the servlet via either
* GET or POST. Specially marks parameters that have no values or
* multiple values.
*

* Part of tutorial on servlets and JSP that appears at
* http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
* 1999 Marty Hall; may be freely used or adapted.
*/

public class ShowParameters extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Reading All Request Parameters";
out.println(ServletUtilities.headWithTitle(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>Parameter Name<TH>Parameter Value(s)");
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();


out.println("<TR><TD>" + paramName + "\n<TD>");
String[] paramValues = request.getParameterValues(paramName);
if (paramValues.length == 1) {
String paramValue = paramValues[0];
if (paramValue.length() == 0)
out.print("<I>No Value");
else
out.print(paramValue);
} else {
out.println("<UL>");
for(int i=0; i<paramValues.length; i++) {
out.println("<LI>" + paramValues[i]);
}
out.println("</UL>");
}
}
out.println("</TABLE>\n</BODY></HTML>");
} }


public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
 


ShowParameters에서의 폼 처리
이것은 파라미터의 수를 이 서블릿으로 보내주는 HTML form이다. 소스 코드 링크 에서 오른쪽 클릭해서 HTML을 다운로드 할 수 있다. 이 링크에 왼쪽 클릭을 하면 온라인 상에서 테스트를 할 수 있다. 여기서는 데이터를 보내기 위해 POST를 썼다 (PASSWORD 를 포함한 모든 폼을 보내야 하기 때문이다). 서블릿이 가지는 값은 ‘doGet'과 ‘doPost'를 모두 포함한다. 하지만 단순히 살펴보기만 하려면 GET을 사용한 버전 을 다운로드 하거나 온라인 상에서 테스트할 수 있다.

PostForm.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>A Sample FORM using POST</TITLE>
</HEAD>

<BODY BGCOLOR="#FDF5E6">
<H1 ALIGN="CENTER">A Sample FORM using POST</H1>
<FORM ACTION="/servlet/hall.ShowParameters"
METHOD="POST">
Item Number:
<INPUT TYPE="TEXT" NAME="itemNum"><BR>
Quantity:
<INPUT TYPE="TEXT" NAME="quantity"><BR>
Price Each:
<INPUT TYPE="TEXT" NAME="price" VALUE="$"><BR>
<HR>
First Name:
<INPUT TYPE="TEXT" NAME="firstName"><BR>
Last Name:
<INPUT TYPE="TEXT" NAME="lastName"><BR>
Middle Initial:
<INPUT TYPE="TEXT" NAME="initial"><BR>
Shipping Address:
<TEXTAREA NAME="address" ROWS=3 COLS=40></TEXTAREA><BR>
Credit Card:<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Visa">Visa<BR>
<INPUT TYPE="RADIO" NAME="cardType"


VALUE="Master Card">Master Card<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Amex">American Express<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Discover">Discover<BR>
<INPUT TYPE="RADIO" NAME="cardType"
VALUE="Java SmartCard">Java SmartCard<BR>
Credit Card Number:
<INPUT TYPE="PASSWORD" NAME="cardNum"><BR>
Repeat Credit Card Number:
<INPUT TYPE="PASSWORD" NAME="cardNum"><BR><BR>
<CENTER>
<INPUT TYPE="SUBMIT" VALUE="Submit Order">
</CENTER>
</FORM>

</BODY>
</HTML>