Servelt学习笔记之二——使用Servlet提取表单中的数据

1、Servlet表单数据

在很多的情况下,我们需要在浏览器,Web服务器和后台程序之间传递数据。浏览器使用两种方法可将这些信息传递到Web服务器,分别为Get方法和Post方法。

1.1、Get方法:

Get方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用?字符分隔,如下所示:

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

GET方法是默认的从浏览器向Web服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中。如果您要向服务器传递的是密码或其他的敏感信息,请不要使用GET方法.GET方法有大小限制:请求字符串中最多只能有1024个字符。

这些信息使用QUERY_STRING头传递,并可以通过QUERY_STRING环境变量访问,Servlet中使用doGet()方法处理这种类型的请求

1.2、Post方法:

另一个向后台程序传递信息的比较可靠的方法是POST方法。POST方法打包信息的方式与GET方法基本相同,但是POST 方法不是把信息作为URL中?字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序,您可以解析和使用这些标准输出。Servlet使用doPost()方法处理这种类型的请求。

Servlet 读取表单数据

Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:

  • getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
  • getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
  • getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。

2、方法实例

2.1、获取普通表单数据

2.1.1使用Get方法获取数据

2.1.1.1使用URL的GET方法实例

我们使用 GET 方法向BServlet程序传递两个值。

http://localhost:8080/MyServlet/BServlet?username=martin0319&password=admin

package com.servlet.basic;

//导入必须的包
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

//拓展继承HttpServlet类
public class BServlet extends HttpServlet {

    // 处理 GET 方法请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 设置响应内容类型
        response.setContentType("text/html");

        //利用创建PrintWriter对象,将内容输出到页面上
        PrintWriter out = response.getWriter();

        String title = "Using GET Method to Read Form Data";
        String docType = "<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">";
        out.println(docType +
                "<html>" +
                    "<head>" +
                        "<title>" + title+ "</title>" +
                    "</head>" +
                    "<body>"+
                        "<h1 align=\"center\">" + title + "</h1>" + "<ul>"+
                        "<li><b>username</b>:" + request.getParameter("username")+
                        "<li><b>password</b>:" + request.getParameter("password")+"</ul>" +
                    "</body>" +
                "</html>");
    }
}

下面是处理 Web 浏览器输入的BServlet.java Servlet 程序。我们将使用getParameter()方法,可以很容易地访问传递的信息:

2.1.1.2使用Get方法获取表单数据

在上面原有的基础之上,在WEB-ROOT的目录下新建一个FormData.html文件,文件的Action指向BServlet,method设定为Get

<!DOCTYPE html>
<html>
    <head>
        <title>FormData.html</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

    </head>
    <body>
        <form action="BServlet" method="get">
            username:<input type="text" name="username"/><br>
            password:<input type="password" name="password"/><br>
            <input type="submit" value="submit"/>
        </form>
    </body>
</html>

使用浏览器打开该HTML文件,username填写administrator,password填写admin,然后提交,自动跳转到BServlet页面,页面显示效果如下:

2.1.1、使用Post方法获取数据:

依旧使用上述的BServlet项目,但是要做一些修改,在程序下添加doPost()方法,修改WEB-ROOT目录下FormData.html文件,文件的Action指向BServlet,method设定为POST。效果如下:

FormData.html文件:

<!DOCTYPE html>
<html>
    <head>
        <title>FormData.html</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

    </head>
    <body>
        <form action="BServlet" method="post">
            username:<input type="text" name="username"/><br>
            password:<input type="password" name="password"/><br>
            <input type="submit" value="submit"/>
        </form>
    </body>
</html>

BServlet.java文件

package com.servlet.basic;

//导入必须的包
import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

//拓展继承HttpServlet类
public class BServlet extends HttpServlet {

    // 处理doGet方法
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 设置响应内容类型
        response.setContentType("text/html");

        //利用创建PrintWriter对象,将内容输出到页面上
        PrintWriter out = response.getWriter();

        String title = "Using GET Method to Read Form Data";
        String docType = "<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">";
        out.println(docType +
                "<html>" +
                    "<head>" +
                        "<title>" + title+ "</title>" +
                    "</head>" +
                    "<body>"+
                        "<h1 align=\"center\">" + title + "</h1>" + "<ul>"+
                        "<li><b>username</b>:" + request.getParameter("username")+
                        "<li><b>password</b>:" + request.getParameter("password")+"</ul>" +
                    "</body>" +
                "</html>");
    }

    //doPost方法
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

使用浏览器打开该HTML文件,username填写martin0319,password填写martin0319,然后提交,自动跳转到BServlet页面,页面显示效果如下:

2.2、获取复选框表单数据

2.2.1、使用Get方法获取数据

在WEB-ROOT下创建CheckBoxData.html,文件Action指向CServlet,并且method定义为get;

<!DOCTYPE html>
<html>
    <head>
        <title>FormData.html</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

    </head>
    <body>
        <form action="CServlet" method="get">
            <input type="checkbox" name="swimming"/> Swimming
            <input type="checkbox" name="running"/> Running
            <input type="checkbox" name="tennis"/> Table Tennis
            <input type="submit" value="Choose Sport" />
        </form>
    </body>
</html>

CServlet代码如下:

package com.servlet.basic;

//导入必须的包
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class CServlet extends HttpServlet {

    // 处理 GET 方法请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置响应内容类型
        response.setContentType("text/html");

        PrintWriter out = response.getWriter();
        String title = "Read The CheckBoxData";
        String docType = "<!doctype html public \"-//w3c//dtd html 4.0 "
                + "transitional//en\">";
        out.println(docType +
                "<html>" +
                    "<head>" +
                        "<title>" + title + "</title>"+
                    "</head>" +
                    "<body>"+
                        "<h1 align=\"center\">" + title + "</h1>" + "<ul>"+
                        "<li><b>Swimming:</b>:" + request.getParameter("swimming") + ""+
                        "<li><b>Running:</b>:" + request.getParameter("running")+ "" +
                        "<li><b>Table Tennis:</b>:"+ request.getParameter("tennis") + "" + "</ul>"+
                    "</body>" +
                "</html>");
    }

}

运行效果如下:

2.2.2、使用Post方法获取数据

修改在WEB-ROOT下CheckBoxData.html,文件Action指向CServlet,并且method定义为post;修改CServlet文件:

CheckBoxData.html修改如下:

<!DOCTYPE html>
<html>
    <head>
        <title>FormData.html</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

    </head>
    <body>
        <form action="CServlet" method="post">
            <input type="checkbox" name="swimming"/> Swimming
            <input type="checkbox" name="running"/> Running
            <input type="checkbox" name="tennis"/> Table Tennis
            <input type="submit" value="Choose Sport" />
        </form>
    </body>
</html>

CServlet.java修改如下:

package com.servlet.basic;

//导入必须的包
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class CServlet extends HttpServlet {

    // 处理 GET 方法请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置响应内容类型
        response.setContentType("text/html");

        PrintWriter out = response.getWriter();
        String title = "Read The CheckBoxData";
        String docType = "<!doctype html public \"-//w3c//dtd html 4.0 "
                + "transitional//en\">";
        out.println(docType +
                "<html>" +
                    "<head>" +
                        "<title>" + title + "</title>"+
                    "</head>" +
                    "<body>"+
                        "<h1 align=\"center\">" + title + "</h1>" + "<ul>"+
                        "<li><b>Swimming:</b>:" + request.getParameter("swimming") + ""+
                        "<li><b>Running:</b>:" + request.getParameter("running")+ "" +
                        "<li><b>Table Tennis:</b>:"+ request.getParameter("tennis") + "" + "</ul>"+
                    "</body>" +
                "</html>");
    }

    //处理 POST 方法请求的方法
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

运行效果如下:

时间: 2024-11-07 19:02:52

Servelt学习笔记之二——使用Servlet提取表单中的数据的相关文章

学习笔记(二)Eclipse设置 Servlet配置及初始化参数读取 及Servlet应用

1. 使用 JavaEE 版的 Eclipse 开发动态的 WEB 工程(JavaWEB 项目)1). 把开发选项切换到 JavaEE2). 可以在 Window -> Show View 中找到 Package Explorer, 并把其拖拽到开发区的左边3). 在 Servers 面板中新建 Tomcat 服务器. 一定要关联到 Tomcat 安装的根目录4). 新建一个 Dynamic Web Project. 其中 Target Runtime 需选择 Tomcat6.0 5). 开发

《Hibernate学习笔记十二》学生、课程、分数关系的设计与实现

<Hibernate学习笔记十二>学生.课程.分数关系的设计与实现 这个马士兵老师的Hibernate视频学习的一个题目,这里面要用到多对多.多对一的关联关系以及联合主键,因此觉得挺好的,自己写篇博文来记录下. 先考虑数据库表 1.学生表:为简单起见,只考虑了学生id和学生姓名,其中id为主键 2.课程表:为简单起见,只考虑了课程id和课程名称,其中id为主键 3.分数表 分数表有两种解决方案 3.1 第一种为:使用联合主键:student_id 和 course_id 3.2 第二种:不使用

Unix文件系统学习笔记之二: 文件描述符、inode和打开文件表

Unix文件系统学习笔记之二: 文件描述符.inode和打开文件表 系统盘上数据的布局 文件系统无非是关于数据在磁盘上的组织以及存储空间管理的,为此,首先需要知道磁盘上数据的总体布局方式.以Unix为例,最重要的一张表如下: Unix 进程管理中和用户文件.io 最相关的数据结构:usr 数据结构 The procstructure does not record information related to file access.  However the userstructure con

C++primer学习笔记(二)——Chapter 4

4.1  Fundamentals 1.Basic Concepts (1)操作符分为一元,二元或者三元操作符: (2)复杂的表达式中含有很多操作符时: 规则一:分为不同的级别,级别高的先运行: 规则二:相同级别的操作符有执行顺序的确定: (3)操作符可以改变操作数的类型 一般将级别低的转化成级别高的 (4)重载运算符 相同的运算符在对不同类型的对象进行操作的时候,会有不同的功能: (5)Lvalue和Rvalue 显而易见:Lvalue指的是Left value,Rvalue指的是Right

struts2学习笔记(二)—— 获取登录信息及计算在线人数

实现目的: 1.点击"Login"的超链接,进入登录页面 2.填写登录信息,提交表单,将用户信息保存进Session 3.显示用户名,并计算在线人数 4.点击"Logout"的超链接,在线人数减一,并使Session失效 Struts2实现: 1.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:/

《语义网基础教程》学习笔记(二)

二.RDF概述(参考http://zh.transwiki.org/cn/rdfprimer.htm) 1.本体: 一个本体是一个概念体系(conceptualization)的显式的形式化规范. 一般来说,一个本体形式地刻画一个论域.一个典型的本体由有限个术语及它们之间的关系组成. ★在万维网这个环境中,本体提供了对给定领域的一种共识.这种共识对于消除术语差别是必要的. 通过把各自的术语差异映射到一个公共的本体之间的直接映射,可以消除这些术语差异. 不管采用哪种方案,本体都支持语义可共用性(s

《iOS应用逆向工程》学习笔记(二)iOS系统目录结构(部分)

首先下载个iFile,可以用来直观地查看iOS系统的目录结构. 下面记录一些关键的iOS目录结构: /var:"variable"的简写,存放一些经常更改的文件,例如日志.用户数据.临时文件等.其中/var/mobile/Applications下存放了所有App Store App. /Applications:存放所有的系统App和来自Cydia的App,不包括App Store App.越狱的过程把/Applications变成了一个符号链接,实际指向/var/stash/App

现代C++学习笔记之二入门篇2,数据转换

static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换,但是,编译器在无法分辨此类转换在运行时是否是安全的. dynamic_cast: dynamic_cast在运行时检查基类指针和派生类指针之间的强制转换. dynamic_cast 是比 static_cast 更安全的强制类型转换,但运行时检查会带来一些开销. const_cast:    con

HTML5学习笔记(二)——表单1

表单一直是网页必不可少的一部分,一直以来,表单的作用被无限扩展,发展出了诸多新奇的用法,老版的HTML只支持很少的一部分常用表单,许多的新表单都需要借助CSS与JavaScript语言来进行构建,现在HTML5来了,她带来了新的表单,这些强大的表单项,可以省去一大块复杂的JavaScript代码,很值得去学习. 而且在新的表单里面,不再像以前每个表单都必须位于<form></form>之内,只要在<form></form>内定义一个id,然后在网页任何位置都