Java开发学习笔记之六:servlet-处理客户form数据

本实例在tomcat下测试通过。
用户在HTML页面中输入基本信息,这个HTML基本上用到的了所有的form元素,点“提交”时,将请求提交到servlet,servlet将用户输入的信息以表格的形式返回给客户。

一.客户端HTML(formparam.html)
<! DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<TITLE>
信息输入
</title>
</head>

<body bgcolor="#FFFFFF">
<p align="center"><b><font color="#009999" size="+2">员工信息表单<br></font>
<font color="#000000" size="+1"><br></font></b></p>
<p>本实例用来展示如何使用servlet的参数:</p>
<form action="formparam" method="post">姓:<input size="20" type="text" name="姓"><br>名:
<input size="20" type="text" name="名"><br>
<input type="checkbox" name="know java">熟悉java<br>
<input type="checkbox" name="know c++">熟悉c++<br>
<input type="radio" name="working" value="woking">已工作<input type="radio" name="working" value="unworking">未工作<br>工种<br>
<select size="3" name="job">
  <option value="工程师">工程师</option>
  <option value="学生">学生</option>
  <option value="农民">农民</option>
</select><br><br>工作资质<br>
<select size="3" name="jobrank">
  <option value="低级">低级</option>
  <option value="中级">中级</option>
  <option value="高级">高级</option>
</select><br><br>
<textarea rows="8" cols="50" name="备注">在这里输入其它信息</textarea>
<br>
<input type="submit" name="submit" value="submit"><input type="reset" name="重置" value="重置">
</form></body></html>

二.servlet(formparam.java)
package fey.servlets;

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

public class formparam extends HttpServlet{
  public void doPost(HttpServletRequest req,HttpServletResponse resp)
  throws ServletException,IOException
  {
   PrintWriter out;
   String[] paramvalues;
   String param,value;
   Enumeration paramnames;
   boolean first;
   int i = 0;
   resp.setContentType("text/html; charset=/"GBK/"");
   out = resp.getWriter();
   out.println("<html><body><h3>您输入的信息</h3><hr>");
   out.println("<table border=1><tr><th>名称</th><th>值</th></tr>");
   req.setCharacterEncoding("GB2312");   
   paramnames = req.getParameterNames();
   while(paramnames.hasMoreElements()){
    param = (String)paramnames.nextElement();
    paramvalues=req.getParameterValues(param);
    first = true;
    value = "";
    for(i=0;i<paramvalues.length;i++)
    {
     if(first){ value = value + paramvalues[i]; first = false;}
     else value =value + "," + paramvalues[i];
    }
    value = req.getParameter(param);
    out.println("<tr><td>"+param+"</td><td>"+value+"</td></tr>");
   }
   out.println("</table>");
   out.println("<br><form action=/"formparam.html/"><input type=/"submit/" name=/"返回/" value=/"返回/"></form></body></html>");
   out.flush();
   
  }
  public void doGet(HttpServletRequest req,HttpServletResponse resp)
  throws ServletException,IOException
  {
   doPost(req,resp);
  }
}

三.web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>fey's servlet</display-name>
  <description>fey's servlet</description>
   
  <servlet>
    <servlet-name>formparam</servlet-name>
    <servlet-class>fey.servlets.formparam</servlet-class>
  </servlet> 
  <servlet-mapping>
    <servlet-name>formparam</servlet-name>
    <url-pattern>/formparam</url-pattern>
  </servlet-mapping>

</web-app>

四.关于中文显示的问题
  这两次在测试servlet的时候遇到一个问题,就是由servlet响应字符数据中若含有中文字符,则在客户浏览器中总是显示成乱码,经调试处理,总结了以下几点:
1.若客户端浏览器的form向web服务器发送的请求数据中含有中文字符,则需要将form的method属性设置为post;
2.在获得ServletResponse的getWriter对象以写响应之前,须先设置ServletResponse.setContentType("text/html; charset=/"GBK/"")
3.在用ServetRequest的GetParameter(),getParameterValues()等方法取得表单提交的数据之前需要设置ServletRequest.setCharacterEncoding("GBK")或ServletRequest.setCharacterEncoding("GB2312")
 

你可能感兴趣的:(Java开发学习笔记之六:servlet-处理客户form数据)