`

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方法。

分享到:
评论

相关推荐

    超强过滤器彻底解决JSP-SERVLET中文参数GET-POST传递的问题(转)

    - 对于POST请求,由于在读取请求参数前可以设置编码,因此在Servlet中使用上述方法可以解决问题。 - 但是,如果需要同时处理GET和POST,以及避免每个Servlet都写相同的代码,那么创建一个全局Filter是最好的解决...

    HttpUtils Java get post 工具类

    "HttpUtils Java get post 工具类" 提供了便捷的方法来发送GET和POST请求,简化了网络请求的操作。以下是对这两个主要HTTP方法的详细解释以及如何在Java中实现它们。 **1. GET方法** GET是HTTP中最常见的请求方法,...

    java 实现get,post请求

    本篇文章将详细介绍如何在Java中实现GET和POST请求,以及相关的知识点。 首先,我们要了解GET和POST的区别。GET请求通常用于获取资源,其参数附加在URL后面,是可见的,且对数据长度有限制,一般不超过2KB。而POST...

    Servlet表单Get和Post方式读取

    这就是关于Servlet表单GET和POST方式读取的基本知识。理解并熟练运用这些技术,开发者能够创建功能丰富的Web应用程序,处理用户提交的各种数据。在实际项目中,还需要考虑错误处理、安全性、性能优化等更多方面,以...

    Nginx服务器中使用lua获取get或post参数.docx

    在GET请求中,我们可以直接使用ngx.req.get_uri_args()来获取参数,而在POST请求中,我们需要使用ngx.req.read_body()来读取请求体,然后使用ngx.req.get_post_args()来获取参数。 如果我们需要处理multipart/form-...

    get和post的区别

    ### GET与POST方法的区别 在Web开发中,GET与POST是最常见的两种HTTP请求方式,它们在功能、安全性、数据传输等方面存在显著差异。本文将基于提供的文件内容对这两种方法进行详细解析。 #### 1. 基本概念 - **GET...

    java使用url发送post和get请求:HttpConnUtils.jar

    - 在`HttpConnUtils`中,可能有一个`sendGetRequest()`方法,接受URL和参数,将参数编码并添加到URL路径,然后使用`java.net.HttpURLConnection`或`java.net.URLConnection`来建立连接并读取响应。 2. **HTTP POST...

    HttpClient模拟get,post请求并发送请求参数(json等)

    它允许开发者模拟GET和POST等HTTP请求,并可以方便地发送JSON等数据作为请求参数。在本文中,我们将深入探讨如何使用HttpClient进行HTTP请求操作,以及如何处理JSON数据。 首先,我们需要引入HttpClient的相关依赖...

    java中用URLConnection_类post方式提交表单

    java中用URLConnection类post方式提交表单 java中用URLConnection类post方式提交表单是指在java应用程序中使用java.net.URLConnection类来实现POST方式的表单提交。POST方式是HTTP协议中的一种常见的请求方法,它...

    android基础 - POST GET

    在Android开发中,POST和GET是两种主要的HTTP请求方法,用于从服务器获取数据或向服务器发送数据。本文将深入探讨这两种方法的工作原理、应用场景以及如何在Android中实现它们。 一、POST与GET方法的区别 1. 工作...

    http发送Get和Post请求工具类

    接着,使用`DataOutputStream`写入请求参数,最后读取服务器响应。 在`HttpUtils`类中,为了处理HTTPS,可能还需要配置SSL证书,以解决安全套接层(SSL)或传输层安全(TLS)的问题。这包括创建`SSLSocketFactory`...

    Java发送HTTP请求GET/POST测试

    总的来说,Java发送HTTP请求GET/POST是网络编程的基础,理解和掌握这些知识对于进行Web服务的开发和集成至关重要。无论是简单的数据获取还是复杂的数据交互,都能通过这些方法实现。通过实践项目,你可以更好地理解...

    ajax POST 与GET提交的区别

    综上所述,GET和POST各有优缺点,在实际开发过程中应根据具体需求选择合适的方法。此外,在使用AJAX技术进行网络请求时,还需要特别注意编码问题,确保客户端和服务器端的编码一致,以避免乱码问题的发生。

    java后台用GET POST方式提交封装类

    在Java后台开发中,HTTP请求是与服务器交互的基础,主要包括GET和POST两种主要方式。本文将深入探讨如何在Java中创建一个封装类来处理这两种请求,同时支持多参数和Cookie的处理。 首先,GET和POST是HTTP协议中的两...

    Java实现HTTP(GET、POST)请求

    在Java编程中,HTTP(Hypertext Transfer Protocol)请求是应用程序与Web服务器之间通信的基础,主要涉及两种常用方法:GET和POST。理解并熟练掌握这两种请求的实现方式对于开发网络应用至关重要。 首先,我们来...

    Android-Httpclient_Get_Post

    `HttpClient_Get_Post`这个压缩包可能包含了使用`HttpClient`发送GET和POST请求的Android代码示例,包括如何构造请求、设置参数、处理响应等内容。通过学习这些示例,开发者可以更好地理解和掌握`HttpClient`的用法...

    平台和web简单demo 3,表单提交 form get

    本示例“平台和web简单demo 3,表单提交 form get”着重讲解了如何使用HTML表单进行GET请求,以及与Java后端平台的交互。 1. **HTML表单(Form)基础**: HTML表单是用户与网页交互的主要方式,用于收集用户输入的...

    c# http协议,实现get或post发送请求 并返回内容

    2. POST:POST请求则用于向服务器发送数据,通常用于提交表单或者上传文件。POST请求的数据包含在请求体中,对数据量无明显限制,且数据对用户不可见。 在C#中,我们可以使用`System.Net.Http`命名空间中的...

    dxServlet.java处理Http Post的表单请求xml

    ### dxServlet.java 处理 HTTP Post 的表单请求 XML #### 概述 在 Java 开发中,处理 HTTP 请求是一项常见的任务。对于基于 Web 的应用而言,能够有效地解析和响应 HTTP POST 请求中的 XML 数据至关重要。本文将...

    安卓网络通信之通过GET和POST方式提交参数给web应用

    本文将详细介绍如何在Android中使用GET和POST方式来提交参数给Web应用。 首先,GET方法是HTTP中最简单的请求方式,常用于获取资源。在Android中,我们可以使用`HttpURLConnection`或者第三方库如`Volley`、`OkHttp`...

Global site tag (gtag.js) - Google Analytics