一、Servlet获取表单数据
表单提交数据经由Servlet处理,返回一个处理结果显示在页面上,
那么如何获取表单提交的参数进出相应的处理呢?
主要用到以下方法:
String getParameter("paramName")
以字符串形式返回请求参数对应的值,如果参数不存在返回null。
此处的参数名是指表达中提交属性控件的name属性。
例如:
在这个表单中username后面是一个输入框,paramName就是name=“username”中的“name”,
使用getParameter("username")获取的值就是输入到输入框中的内容。
String[] getParameterValues("paramName")
返回包含给定请求参数所有值的字符串数组,如果参数不存在返回null,
如果参数只有一个值,则数组长度为1.
例如:
爱好是一个多选项,这里设置的是复选框(CheckBox),而这个复选框的name是相同的,
也就是说一个参数名可能对应多个值,这时就需要采用getParameterVlaues("like"),来获取
所有被选中的复选框对应的value。
Enumeration request.getParameterNames();
返回此请求中所有的参数名称。如果没有参数返回空枚举。
例如:
使用getParameterNames()就可以获取当前请求中所有参数的名称(username、pwd、sex、like)
获取了参数名称,后续就可以通过参数名获取对应的值。
二、例子
<!DOCTYPE html> <!-- http://localhost:8080/TestServlet/Test.html --> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <!--表单提交调用servlet --> <!-- http://localhost:8080/TestServlet/TestServlet.html --> <form name = f1 action = "/TestServlet/TestServlet.html" method = "post"> username:<input type = "text" name = "username"></input><br> pwd:<input type = "password" name = "pwd"></input><br> 性别:<input type = "radio" name = "sex" value = "0"> 男 <input type = "radio" name = "sex" value = "1">女<br> 爱好:<input type = "checkbox" name = "like" value = "1">篮球 <input type = "checkbox" name = "like" value = "2">足球<br> <input type = "submit" value = "提交"> </form> </body> </html>
import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet{ // private PrintStream out = System.out; private String initParam = null; private String contextParam = null; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取输入的用户名。 //String username = getParameter("username"); PrintWriter out = resp.getWriter(); //获取所有参数名 Enumeration names = req.getParameterNames(); //打印html头部代码 printHtmlPage(out,true); //绘制html表格显示获取参数 out.println("<table border = 2>"); //遍历包含所有参数名的枚举对象 while(names.hasMoreElements()) {//判断是否有更多元素 String name = (String)names.nextElement();//获取当前枚举参数。 //根据当前参数名获取对应值 String[] values = req.getParameterValues(name); //输出参数名 out.println("<tr>"); out.print("<td>"); out.print(name); out.print("</td>\n"); //输出参数名所对应的值 for(int i = 0; i < values.length; i++) { out.print("<td>"); out.print(values[i]); out.print("</td>\n"); } out.println("</tr>"); } out.println("</table>"); //打印html尾部代码 printHtmlPage(out,false); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } //打印HTML页面,head为True打印HTML头部代码,为false打印尾部HTML代码 private void printHtmlPage(PrintWriter out, boolean head) { if(head) { out.println("<!DOCTYPE html>\r\n" + "<!-- http://localhost:8080/TestServlet/Test.html -->\r\n" + "<html>\r\n" + "<head>\r\n" + "<meta charset=\"UTF-8\">\r\n" + "<title>Insert title here</title>\r\n" + "</head>\r\n" + "<body>"); }else { out.println("</body>\r\n" + "</html>"); } } }
在Servlet中对获取的值(0,1,2等)结合参数名称进行处理
可以还原出选项所代表的中文信息。