servlet请求表单数据(二)

本文介绍了一个使用POST方法处理表单提交数据的Servlet实例。通过示例代码展示了如何读取并处理表单中的中文数据及复选框等元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用表单的 POST 方法实例
让我们对上面的 Servlet 做小小的修改,以便它可以处理 GET 和 POST 方法。下面的 ServletForm.java Servlet 程序使用 GET 和 POST 方法处理由 Web 浏览器给出的输入。
注意:如果表单提交的数据中有中文数据则需要转码:

String name =new String(req.getParameter("name").getBytes("ISO8859-1"),"UTF-8");

package com.xlucas.cn;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletForm extends HttpServlet{

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out=resp.getWriter();
        //如果存在中文则需要转换
        String name =new String(req.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
        String title="使用Post获取表单数据";
        String doctype="<!DOCTYPE html> \n";
        out.println(doctype+"<html>\n"
                +"<head><title>"+title+"</title></head>\n"
                +"<body bgcolor=\"#f0f0f0\">\n"+
                "<h1 align=\"center\">"+title+
                "</h1>\n"+
                "<ul>\n"+" <li><b>姓名</b>: "
                +name+"\n"+
                " <li><b>网站</b>:"+req.getParameter("url")
                + "\n"+"</ul>\n"+"</body></html>");     
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //用doGet请求来完成
        doGet(req,resp);
    }

}

现在,编译部署上述的 Servlet,并使用带有 POST 方法的 Form.html 进行测试,如下所示:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>知识分享(www.xlucas.com)</title>
</head>
<body>
<form action="xlucas/ServletForm" method="POST">
网址名:<input type="text" name="name">
<br />
网址:<input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

输入
这里写图片描述
结果
这里写图片描述

读取所有的表单参数
以下是通用的实例,使用 HttpServletRequest 的 getParameterNames() 方法读取所有可用的表单参数。该方法返回一个枚举,其中包含未指定顺序的参数名。
一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements()) 方法来确定何时停止,使用 nextElement()) 方法来获取每个参数的名称。

CheckForm.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>分享站(www.xlucas.com)</title>
</head>
<body>

<form action="xlucas/ServletForm1" method="POST" target="_blank">
<input type="checkbox" name="maths" checked="checked" /> 数学
<input type="checkbox" name="physics"  /> 物理
<input type="checkbox" name="chemistry" checked="checked" /> 化学
<input type="submit" value="选择学科" />
</form>

</body>
</html>

servletForm1.java内容

package com.xlucas.cn;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletForm1 extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
            resp.setContentType("text/html;charset=UTF-8");
            PrintWriter out =resp.getWriter();
            String title = "读取所有的表单数据";
            String docType =
                "<!doctype html public \"-//w3c//dtd html 4.0 " +
                "transitional//en\">\n";
                out.println(docType +
                "<html>\n" +
                "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<table width=\"100%\" border=\"1\" align=\"center\">\n" +
                "<tr bgcolor=\"#949494\">\n" +
                "<th>参数名称</th><th>参数值</th>\n"+
                "</tr>\n");
                //获取所有表单的信息
                Enumeration paramNames=req.getParameterNames();
                while(paramNames.hasMoreElements()){//开始循环
                    String paramName=(String) paramNames.nextElement();//取到第一个的表单名称
                    out.print("<tr><td>" + paramName + "</td>\n");
                    String[] paramValues =req.getParameterValues(paramName);//取到结果集
                    // 读取单个值的数据
                    if (paramValues.length == 1) {
                        String paramValue = paramValues[0];
                        if (paramValue.length() == 0)
                            out.println("<td><li>没有值</li></td>");
                        else
                            out.println("<td>" + paramValue + "</td>");
                    } else {
                        // 读取多个值的数据
                        out.println("<td><ul>");
                        for(int i=0; i < paramValues.length; i++) {
                        out.println("<li>" + paramValues[i]);
                    }
                        out.println("</ul></td>");
                    }
                    out.print("</tr>");
                }
                out.println("\n</table>\n</body></html>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doGet(req,resp);
    }


}

web.xml配置

<servlet>
        <servlet-name>ServletForm1</servlet-name>
    <servlet-class>com.xlucas.cn.ServletForm1</servlet-class>
  </servlet>

    <servlet-mapping>
        <servlet-name>ServletForm1</servlet-name>
        <url-pattern>/xlucas/ServletForm1</url-pattern>
    </servlet-mapping>

登录CheckForm.html页面点击 “选择学科”
这里写图片描述
请求的结果是
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值