Servlet对表单数据的处理

一,单个请求参数的读取  调用HttpServletRequest的getParameter方法 ,返回与指定参数相应的值。参数区分大小写。

   参数没有相应的值则返回空String,    如果没有该参数则返回null。    对于多个同一参数名则返回首次出现的值。

二,全部请求参数的读取

 getParameterValues方法,返回指定参数所有相应的值,返回类型为字符串数组。

 getParameterNames和getParameterMap方法对参数名进行查找。返回的参数名不会按表单中的次序排列。

 

三,缺失或异常数据的处理

    1,参数值为null:获取参数相应的值则返回null;在调用方法获取参数相应的值的时候检查是否为null;

    2,参数相应的值是空字符串:trim方法移除空格后使用equals方法做比较。

    3,参数相应的值格式错误:不要依赖与客户端的值检查。客户可能会禁用脚本的执行。

    4,参数值缺失就使用默认值替换。

四,Servlet乱码解决方法:

 1,让请求和响应,页面和Servlet的输出的字符编码与预期一致。

  request.setCharacterEncoding("Java支持的字符集名")放在任何获取请求信息之前。

  response.setContentType(“text/hetml;charset=Java支持的字符集名”)放在任何使用PrintWriter对象之前;    

   2,请求类型为GET时会出现乱码:

  请求类型为GET时会出现乱码。为POST不会出现乱码。

  GET方式提交中文乱码问题解决办法:

   将数据提交给String构造器,用指定字符集转换数据。    例如String txt = new String(txt.getBytes("iso8859_1"),"GB2312");    

  3,下面是获取和设置在请求和响应中的字符编码和MIME类型的方法简介

    1,HttpServletRequest

         获取和设置请求正文中的MIME类型。

                 getContentType;    

                setContentType;       

        获取和设置在请求中使用的字符编码。   

                getCharacterEncoding;    

                setCharacterEncoding;

     2,HttpServletResponse

       获取和设置在响应中发送给客户端正文的MIME类型,

              getContentType

            setContentType  可包含对字符编码的设置。

       获取和设置在响应中发送给客户端的正文使用的字符编码。

          setCharacterEncoding 方法覆盖在请求中使用的字符编码。

五,对多字符集输入的处理

 1,按某个字符集进行读取参数,再转换为需要的字符集。或使用某些字符集提供的自动检测特性。

  使用request.getBytes提取原始字节数据。然后将该原始字节数据和期望字符集的名字提交给String构造函数来处理。转换成期望字符集的数据。

 2,使用一种支持从默认字符集进行转换和检测的字符集。 

 使用request.setCharacterEncoding(“Java支持的字符集名”);设置请求数据的字符集。使用需要的字符集获取请求数据。

   过滤请求参数中的特殊字符

      1,过滤原因 

              如果要读取请求参数,并显示在生成的页面中,则必须过滤那些特殊的HTML字符。虚假的HTML标签会产生输出缺失或格式错误。

      2.不过滤的后果  

                如果没有过滤字符串中的特殊HTML标签,会使页面成为跨站点脚本攻击的工具。

      3,过滤的方法,注意在请求类型为GET时做字符集类型转换

             读取请求参数,调用过滤方法进行过滤,使用 检查方法 检查请求中是否带有特殊HTML标签,   如果有,则提取字符串中的每一个字符过滤后拼接到一个新的SringBufer对象中去。   在循环中拼接字符的时候使用StringBuffer对象。避免开销。

六,用请求参数的值自动填充数据对象,使用jakarta commons package

        1,在JSP中我们可以方便的使用JavaBean对数据进行封装管理。那如何在Servlet中做到呢?

        Jsp的实质就是Servlet,每个JSP都会转换为Servlet输出,在请求期间运行的是Servlet。   由于Servlet一般用于处理业务逻辑,所以在Servlet中获取请求数据更重要。   而Servlet规范中却没有提供这样的功能,所以我们要使用jakarta commons package提供的工具类,使请求数据自动填充Bean等功能。  

       2,org.apache.commons.beanutils.BeanUtils工具类的populate(Javabean, Map对象)方法,将表单中的参数和JavaBean中的属性一一关联。

           参数为JavaBean和一个Map对象(通过request.getParameterMap()方法获得参数名Map)。   该方法将JavaBean中的属性和存储在Map中的表单参数名相关联,每一个属性关联一个参数名,只有相关联了的属性和参数才可以自动填充数据。

七,表单提交不完全的应对  

            用户没有完整填写表单域的时候需要使用默认值,而对于必须填写的表单域应该重新显示给用户填写,并标识必须填写的表单域。

   重新显示的方法:  

          1,由同一Servlet提供表单,处理数据并且提供最后结果。   在重新显示表单的时候省略ACTION属性,表单提交时会自动发送到表单自身的URL。

         2,由一个Servlet提供表单,由第二个Servlet来处理数据并提供结果。

         3,由一个Jsp页面手动的提供表单:由一个Servlet或Jsp页面来处理数据并提供结果。

         4,由一个JSP页面提供表单,从数据对象获取的值自动填写表单中相应的字段,由一个Servlet或Jsp页面来处理数据并提供结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值