以下内容引用自http://wiki.jikexueyuan.com/project/jsp/form-processing.html

当需要从浏览器向Web服务器传递一些信息并最终将信息返回到后端程序时,一定遇到了很多情况。浏览器使用两种方法将此信息传递给Web服务器。这些方法是GET方法和POST方法。

一、GET方法

GET方法发送添加到页面请求的编码用户信息。页面和编码信息是被符号?分开的,如下所示:

http://www.test.com/hello?key1=value1&key2=value2

GET方法是从浏览器向Web服务器传递信息的默认的方法,它产生一个长字符串出现在浏览器的位置框中。如果要把密码或其他敏感信息传递到服务器,那么不要使用 GET 方法。

GET方法有大小限制:在请求字符串中只可以有1024个字符(但这个值可以通过配置来加大)。

这些信息是通过使用QUERY_STRING标题传递的,并将通过QUERY_STRING环境变量被接收,该环境变量可以使用请求对象的getQueryString()方法和getParameter()方法处理。

二、POST方法

通常情况下,将信息传递给后端程序的更可靠的方法是POST方法。

该方法打包信息的方法与GET方法是完全一样的,但是它不是将信息作为一个文本字符串放在URL中的?符号之后来发送信息,它是把信息作为一个单独的消息来发送该消息。这个消息是以标准输入的形式发送到后端程序的,在处理过程中可以解析并使用这个消息。

JSP处理这种类型的请求时,使用getParameter()方法读取简单参数,使用getInputStream()方法读取来自客户端的二进制数据流。

三、使用JSP读取表单数据

JSP以自动解析的方式处理表单数据,根据情况不同使用以下不同的方法:

  • getParameter():调用request.getParameter()方法得到一种形式参数的值。

  • getParameterValues():如果参数出现不止一次,那么就调用这个方法并返回多个值,例如复选框。

  • getParameterNames():如果想要在当前请求下得到一个所有参数的完整的列表,那么调用这个方法。

  • getInputStream():调用这个方法读取来自客户端二进制数据流。

四、使用URL的GET方法示例

这是一个简单的URL示例,使用GET方法将两个值传递给HelloForm程序。

http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI

下面是main.jsp,JSP程序来处理由Web浏览器给定的输入。将使用getParameter()方法使访问传递信息变得容易:

<html>
<head>
<title>Using GET Method to Read Form Data</title>
</head>
<body>
<center>
<h1>Using GET Method to Read Form Data</h1>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>

现在在浏览位置框中键入(注意区分大小写)

 http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI

这将产生如下所示的结果:

五、使用表单的GET方法的示例

这是一个简单的例子,使用HTML表单和提交按钮传递两个值。将使用相同的JSP,main.jsp来处理这个输入。

<html>
<body>
<form action="main.jsp" method="GET">
First Name: <input type="text" name="first_name">
<br />
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>
</body>
</html>

将这个HTML保存在hello.htm文件中,并把它放在<Tomcat-installation-directory>/webapps/ROOT目录下。当访问http://localhost:8080/hello.htm时,这就是在表单上面的实际输出。

尝试输入姓和名,然后单击提交按钮来查看tomcat运行的本地机器上的结果。基于提供的输入,它会产生与上面提到的例子中相似的结果。

注意:上面步骤比较旧了,POM和Eclipse项目不需要配置。

六、使用表单的POST方法的示例

在上面的JSP中做一些小修改来处理GET和POST方法。下面是main.jsp,JSP程序使用GET或POST方法来处理Web浏览器给定的输入。

事实上上面的JSP没有改变,因为只有传递参数的方法改变了,并且没有二进制数据被传递到JSP程序。文件处理相关的概念将在单独的一章中解释,在这里需要读取二进制数据流。

<html>
<head>
<title>Using GET and POST Method to Read Form Data</title>
</head>
<body>
<center>
<h1>Using GET Method to Read Form Data</h1>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>

以下是hello.htm文件中的内容:

<html>
<body>
<form action="main.jsp" method="POST">
First Name: <input type="text" name="first_name">
<br />
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>
</body>
</html>

现在把main.jsp和hello.htm保存到<Tomcat-installation-directory>/webapps/ROOT目录下。当访问http://localhost:8080/hello.htm时,下面是表单的实际输出。

尝试输入姓名,然后单击提交按钮来查看tomcat运行的本地机器上的结果。

基于提供的输入,它会产生与上面提到的例子中类似的结果。

注意:上面步骤比较旧了,POM和Eclipse项目不需要配置。

七、将复选框数据传递给JSP程序

当需要选择多个选项时,就使用复选框。

这是HTML代码的示例,CheckBox.htm,一个表单中有两个复选框

<html>
<body>
<form action="main.jsp" method="POST" target="_blank">
<input type="checkbox" name="maths" checked="checked" /> Maths
<input type="checkbox" name="physics" /> Physics
<input type="checkbox" name="chemistry" checked="checked" />
Chemistry
<input type="submit" value="Select Subject" />
</form>
</body>
</html>

上述代码的结果如下所示:

以下是main.jsp,JSP程序为复选框处理由浏览器给定的输入。

<html>
<head>
<title>Reading Checkbox Data</title>
</head>
<body>
<center>
<h1>Reading Checkbox Data</h1>
<ul>
<li><p><b>Maths Flag:</b>
<%= request.getParameter("maths")%>
</p></li>
<li><p><b>Physics Flag:</b>
<%= request.getParameter("physics")%>
</p></li>
<li><p><b>Chemistry Flag:</b>
<%= request.getParameter("chemistry")%>
</p></li>
</ul>
</body>
</html>

以上的例子将会产生以下的结果:

八、读取全部表单参数

以下是使用HttpServletRequest的getParameterNames()方法读取所有可用的表单参数的通用的例子。该方法返回一个枚举,包含一个未指定序列的参数名称。

一旦得到一个枚举,可以以标准的方式循环这个枚举,使用hasMoreElements()方法来确定何时停止循环,使用nextElement()方法得到每个参数的名字。

<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>HTTP Header Request Example</title>
</head>
<body>
<center>
<h2>HTTP Header Request Example</h2>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>Param Name</th><th>Param Value(s)</th>
</tr>
<%
Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getParameter(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
%>
</table>
</center>
</body>
</html>

以下是hello.htm中的内容:

<html>
<body>
<form action="main.jsp" method="POST" target="_blank">
<input type="checkbox" name="maths" checked="checked" /> Maths
<input type="checkbox" name="physics" /> Physics
<input type="checkbox" name="chemistry" checked="checked" /> Chem
<input type="submit" value="Select Subject" />
</form>
</body>
</html>

现在试着使用上述hello.htm调用JSP,这将生成一个基于给定的输入的结果,类似情况如 下所示:

测试工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test7

JSP的表单处理的更多相关文章

  1. JSP 用户表单的简单实现

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  2. JSP将表单提交并在本页中显示

    代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8& ...

  3. jsp注册页面验证,easyui的jsp+js表单验证

    1.1下面的代码是写在Js里面的,就直接写进去不用什么其他东西,这样一个表单验证就好了(1.2图) $.extend($.fn.validatebox.defaults.rules, { phone: ...

  4. 在jsp提交表单的参数封装到一个方法里

    建议去看一下孤傲苍狼写的Servlet+JSP+JavaBean开发模式(http://www.cnblogs.com/xdp-gacl/p/3902537.html), 最好把他JavaWeb学习总 ...

  5. Ajax在jQuery中的应用 (4)向jsp提交表单数据

    ajax技术带给我们的是良好的用户体验,同时,使用jquery可以简化开发,提高工作效率. 下面就介绍一下大致的开发步骤. 工具/原料 本文中使用的是 jquery-1.3.2.min.js 方法/步 ...

  6. jsp处理表单上传图片(commons-fileupload-1.2.2.jar,commons-io-2.4.jar)

    upload.jsp <%@ page language="java" import="java.util.*" pageEncoding="U ...

  7. 【转】JSP提交表单

    设计表单页面,它是静态页面,使用HTML编写,而且使用了JavaScript脚本语言来验证填写表单数据,表单页面为form.htm,代码如下: <html><head>< ...

  8. JSP提交表单的几种方法

    1.通过<form action="url"><input type="submit"></form>按钮方式提交 这种方式 ...

  9. jsp 防止表单多次提交

    1:首先java 后台代码生成一个token,然后保存到jsp 页面的一个隐藏控件并且保存到set session中 */ @RequestMapping("/yuDengJi") ...

随机推荐

  1. Node.js(二)常用的系统模块

    http模块 第一章已经介绍了 node.js 的模块都可以传一个回调函数  回调函数支持两个参数  error , data let fs = require('fs'); fs.readFile( ...

  2. openmv第一次调试

    2018-09-19  20:14:51 import sensor, image, time import car import json import time from pyb import U ...

  3. R in action读书笔记(15)第十一章 中级绘图 之二 折线图 相关图 马赛克图

    第十一章 中级绘图 本节用到的函数有: plot legend corrgram mosaic 11.2折线图 如果将散点图上的点从左往右连接起来,那么就会得到一个折线图. 创建散点图和折线图: &g ...

  4. SparkRPC源码分析之RPC管道与消息类型

    SparkRPC源码分析之RPC管道与消息类型我们前面看过了netty基础知识扫盲,那我们应该明白,ChannelHandler这个组件内为channel的各种事件提供了处理逻辑,也就是主要业务逻辑写 ...

  5. Servlet相关的几种中文乱码问题

    Servlet相关的几种中文乱码问题浏览器调用jsp,html等页面中文显示乱码使得文件本身以utf-8字符集编辑保存 让浏览器浏览器以utf-8字符集解析 在浏览器中右键选择编码格式为utf-8: ...

  6. <jsp:include page="${pageContext.request.contextPath/index.jsp" ></jsp:include> 引发的错误

    路径引发的错误 如下使用项目路径对jsp页面进行获取,会报javax.servlet.ServletException: File "/web/dbwx/web/public/page_to ...

  7. js 零散知识

    # 同一种类型的事件注册多个事件句柄,后面的不会覆盖前面的事件 # event.which == 13,13代表回车 # parsley.js验证框架 # JSON.stringify, avoid ...

  8. splice用法解析

    splice()方法算是最强大的数组方法了,它有很多种用法,主要用于删除指定位置的数组项,在指定的位置插入数组项,在指定位置替换数组项,slpice()方法始终都会返回一个数组,该数组包括从原始数组中 ...

  9. rsync_ssh

    rsync -av -e "ssh" /data/wwwroot/a1 node2:/data/wwwroot/

  10. JavaSE-17 泛型

    学习要点 泛型接口 泛型类 泛型方法 多参数泛型类 泛型类的继承 泛型的定义 允许在定义类.接口.方法时使用类型形参,类型形参将会在声明变量.创建对象或者调用方法时候动态指定. 泛型接口 1  定义 ...