Servlet处理表单数据
Servlet 表单数据
很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序。浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法。
使用 Servlet 读取表单数据
不区分GET和POST
Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:
- getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
- getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
- getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。
注意:如果表单提交的数据中有中文数据则需要转码:
String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");tomcat默认用ISO8859-1解码浏览器发来的数据,用此编码重新编码,再用实际编码解码为字符串即可获得原始数据
注意!POST方式获得的数据会被受上述过程影响,GET方式附加在URL上的数据似乎没有被tomcat默认解码,不需要调整编码即可使用
读取所有的表单参数
以下是通用的实例,使用 HttpServletRequest request的 request.getParameterNames() 方法读取所有可用的表单参数name的枚举(自动去重名)。该方法返回一个枚举,其中包含未指定顺序的参数名。
一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的name。
再用String[] request.getParameterValues(name)获得每个name可能具有的values 根据返回String[] values的values.length分单value和多value进行处理。
附简单例子:
ParseForm.java
package hentai.servlet; import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class Main
*/
@WebServlet("/ParseForm")
public class ParseForm extends HttpServlet {
private static final long serialVersionUID = 1L; //
private String msg = ""; /**
* Default constructor.
*/
public ParseForm() {
// TODO Auto-generated constructor stub
} @Override
public void init() throws ServletException {
// TODO 自动生成的方法存根
super.init();
//
msg = "1314233";
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
//判断提交方式以决定如何转换编码
boolean isPOST = false;
if(request.getMethod().toUpperCase().equals("POST"))
isPOST = true;
//设置响应格式与编码
response.setContentType("text/html;charset=utf-8");
//获得响应输出
PrintWriter out = response.getWriter();
//输出
out.println("<h1>" + request.getMethod() + "</h1>");
//遍历请求参数并打印回浏览器
Enumeration<String> allNames = request.getParameterNames();
while (allNames.hasMoreElements()) {
String name = allNames.nextElement();
String[] values = request.getParameterValues(name);
if (values.length == 1) {
String value = values[0];
if(isPOST)
value = new String(value.getBytes("ISO8859-1"), "utf-8");
out.println("<p>" + name + ":" + value + "</p>");
} else {
for (String value : values) {
if(isPOST)
value = new String(value.getBytes("ISO8859-1"), "utf-8");
out.println("<p>" + name + "s:" + value + "</p>");
}
} }
// out.println(request.getContextPath());
//response.sendRedirect("form.html");
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} @Override
public void destroy() {
// TODO 自动生成的方法存根
super.destroy();
} }
form.html
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>form</title>
</head> <body> <form method="post" action="ParseForm" id="dataForm">
<input type="text" name="uName" />
<input type="password" name="uPwd" /> <input type="radio" name="sex" value="1" />男
<input type="radio" name="sex" value="0" />女
<input type="radio" name="sex" value="-1" />保密 <input type="checkbox" name="hobby" value="game" />游戏
<input type="checkbox" name="hobby" value="music" />音乐
<input type="checkbox" name="hobby" value="write" />写作 <input type="submit" value="submit" />
<!--<input type="button" value="提交" />
<script>
var dataFormChilds = document.getElementById("dataForm").getElementsByTagName("input");
for (var i = 0; i < dataFormChilds.length; i++) {
if (dataFormChilds[i].getAttribute("type") == "button") {
dataFormChilds[i].onclick = function () {
alert(this);
this.parentElement.submit();
}
}
}
</script>-->
</form> </body> </html>
单选按钮名字需要一样,Servlet获得参数时获得是被选中的radio的value
多选框,......获得的是被选中的框的value的值的数组
其他待补充......
Servlet处理表单数据的更多相关文章
- 1.3(学习笔记)Servlet获取表单数据
一.Servlet获取表单数据 表单提交数据经由Servlet处理,返回一个处理结果显示在页面上, 那么如何获取表单提交的参数进出相应的处理呢? 主要用到以下方法: String getParame ...
- 用Servlet获取表单数据
用Servlet获取表单数据 在webroot下新建userRegist2.jsp 代码如下: <%@ page contentType="text/html;charset=gb23 ...
- JSP简单练习-用Servlet获取表单数据
// javaBean代码 package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.* ...
- Servlet 笔记-读取表单数据
Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析: getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值. get ...
- Servlet学习笔记(二):表单数据
很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. 1.GET 方法:GET 方法 ...
- Servlet 表单数据
很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. GET 方法 GET 方法向页 ...
- IT兄弟连 JavaWeb教程 Servlet表单数据
很多情况下,需要传递一些信息,从浏览器到Web服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到Web服务器,分别为GET方法和POST方法. 1.GET方法 GET 方法向页面请求发送已编 ...
- Servlet表单数据
1.GET 方法 GET 方法向页面请求发送已编码的用户信息.页面和已编码的信息中间用 ? 字符分隔,如下所示: http://www.test.com/hello?key1=value1&k ...
- Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据
用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...
随机推荐
- CodeForces - 891C: Envy(可撤销的并查集&最小生成树)
For a connected undirected weighted graph G, MST (minimum spanning tree) is a subgraph of G that con ...
- 242. Valid Anagram Add to List
Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...
- npm init node 通过指令创建一个package.json文件及npm安装package.json
描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license项的 ...
- 如何用nodejs启一个前端服务
1.新建文件夹,如 notice 2.新建页面和js文件,如 index.html server.js 3.index.html页面内容随你写,如: <!DOCTYPE html> < ...
- 前端优化规范 webApp
- STM32 -- 故障记录
1.串口2无法发送数据 1)串口2和串口1使用的时钟总线不同: usart1:RCC_APBPeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); usart2:R ...
- Python内置函数:get()
文章转载于:https://www.cnblogs.com/wushuaishuai/p/7738118.html(博主:IT技术随笔) 描述 Python 字典 get() 方法和 setdefau ...
- CodeForces - 510B Fox And Two Dots (bfs或dfs)
B. Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Hanoi双塔问题(递推)
Hanoi双塔问题 时间限制: 1 Sec 内存限制: 128 MB提交: 10 解决: 4[提交][状态][讨论版][命题人:外部导入] 题目描述 给定A,B,C三根足够长的细柱,在A柱上放有2 ...
- C# 获取图片某像素点RGB565值
Project Source Download: http://download.csdn.net/detail/mostone/6360007 [csharp] view plain copy pu ...