03.Servlet表单处理

本文介绍了Servlet如何处理表单数据,重点讲解了HttpServletRequest接口及其生命周期,包括如何获取请求信息,如超链接传参、普通表单传参及带有文件上传的表单处理。同时,文章还展示了具体的处理示例。
摘要由CSDN通过智能技术生成

Servlet表单处理

  • HttpServletRequest

    该接口继承ServletRequest,由Servlet容器来实现,用来封装用户请求的数据。

  • 表单处理

    用户通过页面请求数据主要有两种方式,一种是超链接,另一种是表单。超链接我们可以理解为一种弱化的表单

  • RequestDispatcher

    请求转发。一个服务可能只完成一个请求的部分内容,那么其他的处理我们可以通过RequestDispatcher将请求转发给其他的Java Web组件。

  • HttpServletResponse

    该接口继承ServletResponse,同样由Servlet容器来实现,用来响应客户。

HttpServletRequest

HttpServletRequest是继承ServletRequest、并基于HTTP协议提供对用户请求信息进行统一封装的接口。一般由servlet容器的提供者实现。

HttpServletRequest的生命周期

  • 一个HttpServletRequest对象在用户向web服务器发送请求时,由servlet容器创建,并根据相关信息(请求头,请求主体)对其进行封装,然后传递给HttPServletRequest的使用者(通常是servlet)。

  • 一个HttpServletRequest对象只能存活于servlet容器中。

  • 在服务器响应客户后HttpServletRequest对象被销毁。

ServletRequest

常用方法介绍

方法 描述
String getCharacterEncoding() 返回此请求正文中使用的字符编码名称
setCharacterEncoding() 重写此请求正文中使用的字符编码名称,这个方法一般在我们保存请求数据之前调用,如果已经获取了Request对象里面的数据在调用此方法是没有意义的,多数情况我们用来处理提交表单中的中文数据(因为可能出现乱码)
String getContentType() 返回请求正文中的MIME类型(如:text/html),如果该类型未知,则返回null
ServletInputStream getInputStream() 以二进制数据形式获取请求正文
String getParameter(String name) 以String形式返回请求参数的值,如果该参数不存在,则返回null
String[] getParameterValues(String name) 返回包含给定请求参数拥有的所有值的String对象数组(因为表单中可能有多个元素的名字是一样的,如复选框)
RequestDispatcher getRequestDispatcher(String s) 返回一个RequestDispatcher对象,如果该路径以”/”开头,那么可以相对于当前上下文
int getContentLength() 返回请求正文的长度(以字节为单位),如果长度未知,则返回-1,对于HttpServlet,返回值与CGI变量CONTENT_LENGTH相同
Object getAttribute(String name) 以Object形式返回指定属性的值,如果不存在给定名称的属性,则返回null
setAttribute(String name, Object value) 以键值对的形式为给定的名称指定值
Enumeration< E > getAttributeNames() 返回此请求可用属性的名称的Enumeration。如果该请求中没有可用的属性,则返回一个空的Enumeration

表单处理

HttpServletRequest获取客户请求信息

在Servlet的doGet或doPost方法中,通过HttpServletRequest获取用户信息。一般处理超链接或者表单传递的信息。

表单处理

  • 超链接传参

  • 普通表单传参

  • 带有文件上传的表单(此方式一般文件不宜太大,例如图片、小的压缩文件)

  • 获取Request中的其他信息

处理示例

超链接传参使用” ? “传递,并可以使用” & “作为分隔符传递多个参数

HTML文件(index.html)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超链接或普通表单传参数</title>
</head>
<body>
    <!-- 
        如果我们不在processing前面加一个/(斜杠),则当我们点进去链接时,
        地址栏的URL地址为http://localhost:8080/ProcessingForms/processing
        如果我们在processing前面加上一个/(斜杠),即:"/processing",
        则当我们点进去链接时,地址栏的URL地址为http://localhost:8080/processing,可以看出这和我们当前的工程是没有任何关系的
        因为没有明确地指明servlet的地址。

        解决方法:

        1、不加斜杠,就直接相当于我们当前工程的context(上下文)
        2、把我们上下文的路径加进去,上下文路径在创建工程时在Web Module页面配置,默认是我们的工程名,
            加入进去就是"/ProcessingForms/processing"。
     -->
    <a href="/ProcessingForms/processing?name=小李&age=20">Servlet处理超链接</a>
    <!-- 传递参数使用问号,传递多个参数使用&作为分隔符,其中href与url-pattern有关 -->

    <hr/>

    <form action="processing" method="post">
    姓名:<input type="text" name="name"><br/><br/>
    年龄:<input type="text" name="age"><br/><br/>
    <input type="submit" value="提交">&nbsp;&nbsp;
    <input type="reset" value="重置">
    </form>

    <hr/>

    <!-- 有文件上传的表单需要设置enctype,如果不处理,获取文件数据时,将只得到文件名 -->
    <form action="upload_processing" method="post" enctype="multipart/form-data">
    姓名:<input type="text" name="name"><br/><br/>
    年龄:<input type="text" name="age">
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值