`

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

阅读更多

一、  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" />

 

提交form用的html页面,param.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<META http-equiv="Content-Type" content="text/html; charset=GBK" /> 
<script type="text/javascript">...
       
       
function changemethod()
...{
       
var a = document.getElementsByName("methodtype");
       
for(i = 0; i < a.length; i++)
       
...{
              
if(a[i].checked==true)
              
...{
                     fm.method
=a[i].value;
                     
break;
              }

       }

}

</script>
 
        
<title>parameter.html</title>
</head>
 
 
 
<body bgcolor="#FDF5E6">
 
<h2>参数传递示范</h2>
 
<form name ="fm" method="get" action="ShowParameter">
  
  
<p>姓名:<input type="text" name="username" size="15" /> </p>
  
<p>密码:<input type="password" name="password" size="15" /> </p>
  
<p>性别:<input type="radio" name="sex" value="Male" checked /> 男
                  
<input type="radio" name="sex" value="Female" /> 女 </p>
  
  
<p>年龄:
      
<select name="old">
             
<option value="10">10 - 20</option>
             
<option value="20" selected>20 - 30</option>
             
<option value="30">30 - 40</option>
             
<option value="40">40 - 50</option>
      
</select>
  
</p>
  
  
<p>兴趣:
      
<input type="checkbox" name="habit" value="Reading" />看书
      
<input type="checkbox" name="habit" value="Game" />玩游戏
      
<input type="checkbox" name="habit" value="Travel" />旅游
      
<input type="checkbox" name="habit" value="Music" />听音乐
      
<input type="checkbox" name="habit" value="Tv" />看电视  
  
</p>
  
  
<p>提交方式:
  
<input name="methodtype" value="get" type="radio" onclick="changemethod()" checked />
       Get
  
<input name="methodtype" value="post" type="radio" onclick="changemethod()" />
       Post
  
</p>
  
<p>
  
<input value="确认" type="submit" />
  
<input value="清除" type="reset" />
  
</p>
</form>
 
 
</body>
</html>

在这个html页面中写了一个写了一个简单的javascript函数,其实现的功能是当用户选择提交方式为get时,采用get方式提交;当选择为post时,采用post方式提交。请注意采用不同方式提交时URL的变化

 我们的HttpServlet来了:

package squall.servlet.basic;

 

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 ShowParameter extends HttpServlet

...{

       
protected void doGet(HttpServletRequest req, HttpServletResponse resp)

                     
throws ServletException, IOException

       
...{

              System.out.println(
"doGet invoke!");

              

              showParam( req,  resp);

       }


 

       
protected void doPost(HttpServletRequest req, HttpServletResponse resp)

                     
throws ServletException, IOException

       
...{

              System.out.println(
"doPost invoke!");

              showParam( req,  resp);

       }


       

       
private void showParam(HttpServletRequest req, HttpServletResponse resp) throws IOException

       
...{

              req.setCharacterEncoding(
"GBK");

              resp.setContentType(
"text/html; charset=GBK");

              PrintWriter out 
= resp.getWriter();

              String docType 
= "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ";

 

              String name 
= req.getParameter("username");

              String password 
= req.getParameter("password");

              String sex 
= req.getParameter("sex");

              String old 
= req.getParameter("old");

              String habit[] 
= req.getParameterValues("habit");

              String unknow 
= req.getParameter("unknow");

              out.println(docType 
+ "<HTML> " + "<HEAD><TITLE> showparam" 

                            
+ "</TITLE></HEAD> " + "<BODY BGCOLOR="#FDF5E6"> "

                            
+"     姓名:" + name + "   </br>"

                            
+"     密码:" + password + "   </br>"

                            
+"     性别:" + sex + "   </br>"

                            
+"     年龄:" + old + "   </br>"

                            
+"     兴趣:"

                            );

              
if(habit == null)

                     out.println(habit);

              
if(habit != null)

              
for(int i = 0; i < habit.length; ++i)

                     out.println(habit[i] 
+ " ");

              out.println(
"</br>");

              out.println(
"     未知:" + unknow + "   </br>");

              out.println(
"     提交方式:" + req.getParameter("methodtype"+ " </br>");

              out.println(
"</body></html>");

       }


       

}


部署:将param.html存放于<tomcat install dir>/webapps/train目录下。

ShowParameter部署后,mapping/ShowParameter

ShowParameter这个Servlet除了在显示html页面外,还会在tomcat的控制台打印调用了doGet还是doPost方法。

分享到:
评论

相关推荐

    Servlet表单Get和Post方式读取

    Servlet入门示例,以及表单Get和Post两种方式获取参数,以及一个表单数据读取示例。

    java 编写文件上传类简单易用

    通过表单提交数据的方法有两种,一种是 GET 方法,另一种是 POST 方法,前者通常用于提交少量的数据,而在上传文件或大量数据时,应该选用 POST 方法。在 HTML 代码中,在 &lt;form&gt; 标签中添加以下代码可以页面...

    Java学习笔记-个人整理的

    {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{subsection.1.3.1} {1.4}数据类型}{23}{section.1.4} {...

    c# http post get

    //提交表单,此处是登录百度的示例 client.UploadFile("http://hiup.baidu.com/zhangsan/upload", @"file1=D:\1.mp3");//上传文件 client.UploadFile("http://hiup.baidu.com/zhangsan/upload", "folder=myfolder&...

    Javashop开发规范V2.2

    Javashop开发规范V2.2 版本 说明 提交人 V1.0 初稿 定义了包名、异常、事务、和路径的规范 王峰 V2.0 1. 重新整理了命名规范 2. 增加常用命词对照表 王峰 V2.1 1.增加数据库操作的说明 2.增加常用方法介绍 王峰 V...

    万能后台管理模板javaweb

    11. 接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间 12. 发送邮件:单发,群发邮件 13. 置二维码:生成二维码图表保存到服务器 or 解析读取二维码内信息 14. 图表报表:...

    javaOA办公系统模块设计方案.pdf

    接⼝测试:POST or GET ⽅式检测系统接⼝,参数加密,json返回结果,计算服务器响应时间 14.系统设置:修改系统名称,每页显⽰条数, 邮件服务配置,站内信配置 15. 站内信:收信箱和发信箱,websocket技术通讯技术...

    AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求

    最近的一个项目中,需要通过 JavaScript 提交表单数据到另一个域名下的PHP接口(因为数据较大,需要HTTP POST方式提交),并获取PHP接口的返回值,在页面无刷新、无跳转的情况下,更新div标签内的内容。  浏览器...

    ajax中get和post的说明及使用与区别

    谈Ajax的Get和Post的区别 Get方式: 用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照URL参数的格式附加在请求行中的...

    零基础学ASP.NET 2.0电子书&源代码绝对完整版1

    3-08.cs 用一个输入参数通过值传递一个变量给一个方法。 3-09.cs 一维数组的使用。 3-10.cs 使用代理类型。 3-11.cs 使用接口。 3-12.cs 装箱操作。 3-13.cs 字符串操作。 3-14.cs if语句的...

    ajax请求post和get的区别以及get post的选择

    3.get请求需注意缓存问题,post请求不需担心这个问题 Get方式: 用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照URL参数...

    使用HttpClient发送POST请求,并获取响应内容(附详细步骤).txt

    这个代码的作用是使用HttpClient发送POST请求,...通过学习这个示例,你可以了解到如何使用HttpClient发送不同类型的HTTP请求(如GET、POST、PUT、DELETE等),以及如何处理响应结果(如读取响应体、解析JSON数据等)。

    Android集成主流优秀第三方组件框架

    HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求WebService接口 Sqlite数据库操作工具类(ToolDatabase.java),获取DAO、创建表、删除...

    Android例子源码集成安卓主流优秀第三方组件框架.zip

    HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求WebService接口 Sqlite数据库操作工具类(ToolDatabase.java),获取DAO、创建表、...

    集成安卓主流优秀第三方组件框架.zip

    HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求WebService接口 Sqlite数据库操作工具类(ToolDatabase.java),获取DAO、创建表、...

    精易模块[永久免费] V3.12

    V3.12模块MD5:9F4528CCB5AB2C2B263BC75E45BA6021 ' 相对于3.0的修复的 ' 修复 - 编码_usc2到ansi() 多了...' 改善 - 网页_访问_对象 () 第二个参数(访问方式)更改成和网页_访问()一样的,可空,默认0,0 = GET 1=POST

    Java面试宝典2020修订版V1.0.1.doc

    17、Java怎么读取文件和写入文件 65 18、java怎么复制文件 68 19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? ...

    PHP获取POST数据的几种方法汇总

    解释:也就是表单POST过来的数据 方法2、file_get_contents&#40;“php://input”&#41;; 说明: 允许读取 POST 的原始数据。 和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 ...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    集成目前Android主流优秀第三方组件

    HTTP网络通信工具类(ToolHTTP.java),get/post请求,支持多种接口回调 SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求WebService接口 Sqlite数据库操作工具类(ToolDatabase.java),获取DAO、创建表、删除...

Global site tag (gtag.js) - Google Analytics