JAVA开发(3)- 读取表单参数Get&Post

本文介绍了HTML表单中form参数的两种提交方式:GET和POST,并详细解释了如何在HttpServlet中通过getParameter和getParameterValues方法读取这些参数。

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

一、 HttpServlet读取htmlform的参数

1、htmlform参数提交的两种方式

htmlform提交参数一般通过postget这两种方法,其中get提交参数的方法对应于HttpServletdoGet方法,而post提交参数的方法对应于HttpServletdoPost方法。

get方法提交参数的话会在url上显示,假如我们有的数据不想让别人看到(如密码等)则我们不应该让form通过get方法提交(如果我们的htmlformmethod属性不显示制定的话,默认值为get)

post方法提交的参数不会在url上显示。

2、 HttpServlet中如何读取form中的参数

对于HttpServlet中读取html form中传递过来的参数是一件很简单的事情,可以不必关心,form的提交方式为get或者post(有的情况下还是稍微有一点不同的,比如servletjsp中常见的一个问题:中文乱码的问题,有的form使用post提交到servlet后,中文的参数值可以正常显示,但是如果换成get提交的话,中文可能出现乱码)。我们都可以通过HttpServletRequest接口的String getParameter(String name)String[] getParameterValues(String name)这两个方法来读取参数的值。

String getParameter(String name)

name为参数名,返回的结果是参数的值。如果一个参数有很多个值得话,这里只返回一个。如果参数名存在,但是对应的值没有的话,返回值为””(也就是一个空字符串)。假如参数名本身不存在的话,返回值为null。需要注意的是这里对参数名的大小写是敏感的,也就是说htmlform中参数名如果为Name的话,使用getParameter(“name”)是取不到对应的值的。

String[] getParameterValues(String name)

当使用这个方法时,一般是name这个参数名可能存在多个参数值,它将返回一个由参数值组成的数组。举一个简单的例子,注册一个网站的时候,当需要客户的兴趣爱好资料的时候,一般会给出一个多选框(假设参数名为habit),让用户自己选择。当然每个人的爱好不同,每个人爱好的个数可能是0-N(让我们先假设一个人可以没有任何爱好),那么我们的HttpServlet读取formhabit的时候,显然应该使用String[] getParameterValues(String name)而不是String getParameter(String name),如果客户有一个到多个爱好时,我们会得到一个表示他爱好的String[]。但是假如我们的客户没有任何爱好的话。。。这个时候的返回值可能是null。所以我们在处理的时候需要先判断返回值是否为null(这个真是一个不友好的做法,友好的做法是返回一个0个元素的String[],很遗憾目前ServletAPI没有这么规定),加入我们不对返回值进行判断而直接开始对String[]做迭代的话,我们会得到一个java.lang.NullPointerException。当然当name的参数名不存在的时候,返回值显然为null。同样String[] getParameterValues(String name)name的值得大小写也一样是敏感的。

读取form表单参数还可以使用Map getParameterMap()方法,这里不多做介绍。

加入对form表单可能提交上来的参数名不是很明确的话,可以考虑使用Enumeration getParameterNames()方法来获取form表单的参数名。form提交的所有参数名将存放于一个java.util.Enumeration对象中(Enumeration对象的迭代方法不做介绍)

最后还是以一个例子来结束HttpServlet读取htmlform的参数的介绍。

在这之前为了避免万恶的汉字乱码的问题,让我们先修改tomcat的一个配置文件

添加<tomcat install dir>/conf/server.xml中的Connector结构的属性

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads
="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups
="false" redirectPort="8443" acceptCount="100"
connectionTimeout
="20000" disableUploadTimeout="true" />

/>之前添加属性useBodyEncodingForURI="true",修改后如下:

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads
="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups
="false" redirectPort="8443" acceptCount="100"
connectionTimeout
="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值