- 浏览: 85658 次
文章分类
最新评论
第四章学习笔记 客户请求的处理,表单数据
警告:
1.提供给getParameter和getParameterValues的值是大小写敏感的。也就是说我们在前端表单中的参数值和后台使用getParameter()以及后台的bean类的属性值一定要大小写相同。
2.不要指望getParameterNames会以任何特定的次序返回参数名。
核心方法:
1.在表单中一定要使用相对的Action URL(不是不加斜杠的Action URL,而是不含主机名的URL),不要使用包含主机名的绝对Action URL。这样可以增加可移植性。或者我们说不要把主机名加在url中。
2.在设计servlet要使之能够优雅的处理参数缺失(null或空字符串)或格式不正确等情况,在测试servlet时,既要用预期格式的数据,也要使用缺失或异常数据。
3.如果您需要读取请求参数,并将他们的值显示在生成的页面中,则必须过滤出那些特殊的HTML字符,不这样做可能会缺失一部分东西。或者某些格式错误。
4.如果您在循环中执行字符串的拼接操作,不要使用String,而要使用StringBuffer。
心得笔记:
一.如何在servlet获得表单数据。获得参数getParameter(参数名)、getParameterValues。获得表单参数名:getParameterNames、getParameterMap。获得原始表单数据,getReader、getInputStream
1.getParameterNames以Enumeration的形式返回这种列表,因此,您不应该指望,getParameterNames返回的参数会按照HTML表单中的次序。getParameterNames的替代方案是getParameterMap。
2.但当我们数据不是由HTML表单提交,a.而是来自于定制的客户程序,b.由表单提交,但是通过<input type ="FILE">将文件上传到服务器,这两种方式需要获取原始的输入。
3.默认情况下,request.getParameter使用服务器的当前字符集解释输入。要改变默认行为,需要使用ServletRequest的setCharacterEncoding方法。但如果我们在输入中使用了多种字符集,我们不能用普通的字符集名调用setCharacterEncoding。是因为setCharacterEncoding必须在访问任何请求参数之前调用。所以我们必须首先按照某个字符集读取参数,然后将它转换到另外的字符集或者使用某些字符集提供的自动检测特性。
如:
再如:
二.参数缺失或异常是默认值的应用:1.我们在分析请求参数时,需要检查下面这三种情况:a.参数的值是否为null,这可能是由于参数名发生了变化或者根本就没有这个参数。b.参数的值为空字符串,所以一般在我们具体使用一个参数前,我们应该先进行判断:
c.参数的格式出现了错误,尽快我们可以使用javascript,但是我们必须保证在服务器上也进行这类检查,因为我们可能会禁用Javascript。比如,我们要求用户名长度最少为多少位。但可能用户禁用了javascript,所以我们必须在服务器端增加这类的检查。
2.那我们如何处理参数缺失的情况呢:我们首先根据参数名取得参数,然后调用相应的函数判断这个参数值是否存在,不存在或为空字符串或者为default的话就把它替换为我们事先规定的值,如下:
三、过滤字符串中的HTML特殊字符:
1.这里的字符串指的是两方面的字符串,一种是请求参数中的字符串,不能轻易的包含这些危险的字符串,比如<script>。或者用户输入了html标签,那么生成的web页面就会包含虚假的html标签。另一种是应答的字符串,也就是显示给前端页面的字符串,我们不能把会造成错误的字符串传给前端。
2.HTML的特殊字符:<,>,",& 首先<>在我们传给前端时,我们要把它替换为<和>类似的,如果我们要在html标签的属性值中使用双引号和&,这里属性值明确不能使用&,所以我们也要替换它为"和&
四、根据请求参数自动填充java对象:表单bean
当前,在jsp中,使用javabean组件构架可以极大地简化读取请求参数、提取相应的值,并将结果存储在java对象中的过程。如果我们使用getParameter方法,那么我们要使用多个getParameter方法。
1.我们可以在jsp中,使用特殊的用法jsp:setProperty调用中的property ="*"一举完成bean的填写工作。
2.我们在复杂的情况下,最好组合使用servlet和jsp,由servlet完成编程任务二jsp页面负责表示任务,因而,在servlet中能够比jsp页面更容易读取请求参数十分重要,但servlet规范中却没有提供这种功能,但我们可以使用一个工具类,它使用Jakarta通用库中的使用工具类,依据输入的请求参数自动填充bean,要使用它,只需要将bean和请求对象一同传递给BeanUtilities.populateBean.这样我们就可以轻松的从bean中获得参数。
真正我们使用时也可以不用编写类直接使用下面的方法:
五、当参数缺失或异常时重新显示输入表单。
当用户没有填写某些表单域是,有时需要使用默认值,而有时没有合理的默认值可用,则应该将表单重新显示给用户,用户不应该需要再次输入已经提供的值,缺失的表单域应该突出标示出来。
1.四种方法:a.由同一个servlet提供表单、处理数据并提供最后的结果。b.由一个servlet提供表单,由第二个servlet处理数据并提供结果。c.由一个jsp页面“手动地”提供表单,由一个servlet或jsp页面处理数据并提供结果。d.由一个jsp页面提供表单,用从数据对象获取的值自动填写表单中相应的字段,由一个servlet或jsp页面处理这些数据并提供最终的结果。
总结:编写servlet的步骤,1.编写init,用来放置一次性的代码。2.覆盖service(),或是根据用户请求类型编写doXxx()方法。3.使用HTML验证器检查由您servlet所生成的页面的语法。HTML文档中包括<!DOCTYPE...>,简单的实用工具类,来简化这些构造。
4.必须在传送实际的文档之前设定内容的类型。
警告:
1.提供给getParameter和getParameterValues的值是大小写敏感的。也就是说我们在前端表单中的参数值和后台使用getParameter()以及后台的bean类的属性值一定要大小写相同。
2.不要指望getParameterNames会以任何特定的次序返回参数名。
核心方法:
1.在表单中一定要使用相对的Action URL(不是不加斜杠的Action URL,而是不含主机名的URL),不要使用包含主机名的绝对Action URL。这样可以增加可移植性。或者我们说不要把主机名加在url中。
2.在设计servlet要使之能够优雅的处理参数缺失(null或空字符串)或格式不正确等情况,在测试servlet时,既要用预期格式的数据,也要使用缺失或异常数据。
3.如果您需要读取请求参数,并将他们的值显示在生成的页面中,则必须过滤出那些特殊的HTML字符,不这样做可能会缺失一部分东西。或者某些格式错误。
4.如果您在循环中执行字符串的拼接操作,不要使用String,而要使用StringBuffer。
心得笔记:
一.如何在servlet获得表单数据。获得参数getParameter(参数名)、getParameterValues。获得表单参数名:getParameterNames、getParameterMap。获得原始表单数据,getReader、getInputStream
1.getParameterNames以Enumeration的形式返回这种列表,因此,您不应该指望,getParameterNames返回的参数会按照HTML表单中的次序。getParameterNames的替代方案是getParameterMap。
2.但当我们数据不是由HTML表单提交,a.而是来自于定制的客户程序,b.由表单提交,但是通过<input type ="FILE">将文件上传到服务器,这两种方式需要获取原始的输入。
3.默认情况下,request.getParameter使用服务器的当前字符集解释输入。要改变默认行为,需要使用ServletRequest的setCharacterEncoding方法。但如果我们在输入中使用了多种字符集,我们不能用普通的字符集名调用setCharacterEncoding。是因为setCharacterEncoding必须在访问任何请求参数之前调用。所以我们必须首先按照某个字符集读取参数,然后将它转换到另外的字符集或者使用某些字符集提供的自动检测特性。
如:
String firstNameWrongEncoding = request.getParameter("firstName"); String firstName = new String(firstNameWrongEncoding.getBytes(),"Shift_JIS");
再如:
request.setCharacterEncoding("JISAutoDetect");//需要使用一种支持从默认字符集进行检测和转换的字符集。其他的字符集可在[url]http://java.sun.com/j2se/1.4.1/docs/guide/intl/encoding.doc.html[/url]中找到。 String firstName = request.getParameter("firstName");
二.参数缺失或异常是默认值的应用:1.我们在分析请求参数时,需要检查下面这三种情况:a.参数的值是否为null,这可能是由于参数名发生了变化或者根本就没有这个参数。b.参数的值为空字符串,所以一般在我们具体使用一个参数前,我们应该先进行判断:
String param = request.getParameter("someName"); if((param==null)||(param.trim().equals(""))){ doSomethingForMissingValues(...); }else{ doSomethingWithParameter(param); }注意这里如果input 标签的value属性如果存在,那也要判断参数是否为param.equals("default"); 这个default代表input 标签的value属性为default。也就是我们就没有修改,它在页面初始时就显示default。而字符串为空就代表用户更改了其原来显示的默认值,但是又没有填入自己的值。
c.参数的格式出现了错误,尽快我们可以使用javascript,但是我们必须保证在服务器上也进行这类检查,因为我们可能会禁用Javascript。比如,我们要求用户名长度最少为多少位。但可能用户禁用了javascript,所以我们必须在服务器端增加这类的检查。
2.那我们如何处理参数缺失的情况呢:我们首先根据参数名取得参数,然后调用相应的函数判断这个参数值是否存在,不存在或为空字符串或者为default的话就把它替换为我们事先规定的值,如下:
private String replaceIfMissingOrDefault(String orig,String replacement){ if((orig == null)||(orig.trim().equals("")||orig.equals("default")){ return replacement; } else{ return (orig+",") } }
三、过滤字符串中的HTML特殊字符:
1.这里的字符串指的是两方面的字符串,一种是请求参数中的字符串,不能轻易的包含这些危险的字符串,比如<script>。或者用户输入了html标签,那么生成的web页面就会包含虚假的html标签。另一种是应答的字符串,也就是显示给前端页面的字符串,我们不能把会造成错误的字符串传给前端。
2.HTML的特殊字符:<,>,",& 首先<>在我们传给前端时,我们要把它替换为<和>类似的,如果我们要在html标签的属性值中使用双引号和&,这里属性值明确不能使用&,所以我们也要替换它为"和&
四、根据请求参数自动填充java对象:表单bean
当前,在jsp中,使用javabean组件构架可以极大地简化读取请求参数、提取相应的值,并将结果存储在java对象中的过程。如果我们使用getParameter方法,那么我们要使用多个getParameter方法。
1.我们可以在jsp中,使用特殊的用法jsp:setProperty调用中的property ="*"一举完成bean的填写工作。
2.我们在复杂的情况下,最好组合使用servlet和jsp,由servlet完成编程任务二jsp页面负责表示任务,因而,在servlet中能够比jsp页面更容易读取请求参数十分重要,但servlet规范中却没有提供这种功能,但我们可以使用一个工具类,它使用Jakarta通用库中的使用工具类,依据输入的请求参数自动填充bean,要使用它,只需要将bean和请求对象一同传递给BeanUtilities.populateBean.这样我们就可以轻松的从bean中获得参数。
引用
import org.apache.commons.beanutils.BeanUtils;
public class BeanUtilites{
public static void populateBean(Object formBean,HttpServletRequest request){
populateBean(formBean,request.getParameterMap());
}
public static void populateBean(Object bean,Map propertyMap){
try{
BeanUtils.populate(bean,propertyMap);
}catch(Exception e){
}
}
}
public class BeanUtilites{
public static void populateBean(Object formBean,HttpServletRequest request){
populateBean(formBean,request.getParameterMap());
}
public static void populateBean(Object bean,Map propertyMap){
try{
BeanUtils.populate(bean,propertyMap);
}catch(Exception e){
}
}
}
真正我们使用时也可以不用编写类直接使用下面的方法:
BidInfo info = new BidInfo(); try{ BeanUtils.populate(info, request.getParameterMap()); } catch(Exception e){ }
五、当参数缺失或异常时重新显示输入表单。
当用户没有填写某些表单域是,有时需要使用默认值,而有时没有合理的默认值可用,则应该将表单重新显示给用户,用户不应该需要再次输入已经提供的值,缺失的表单域应该突出标示出来。
1.四种方法:a.由同一个servlet提供表单、处理数据并提供最后的结果。b.由一个servlet提供表单,由第二个servlet处理数据并提供结果。c.由一个jsp页面“手动地”提供表单,由一个servlet或jsp页面处理数据并提供结果。d.由一个jsp页面提供表单,用从数据对象获取的值自动填写表单中相应的字段,由一个servlet或jsp页面处理这些数据并提供最终的结果。
总结:编写servlet的步骤,1.编写init,用来放置一次性的代码。2.覆盖service(),或是根据用户请求类型编写doXxx()方法。3.使用HTML验证器检查由您servlet所生成的页面的语法。HTML文档中包括<!DOCTYPE...>,简单的实用工具类,来简化这些构造。
4.必须在传送实际的文档之前设定内容的类型。
response.setContentType("text/html");当然也要设置响应代码5.使用哪种字符解释输入,默认情况下,request.getParameter使用服务器的当前字符集解释输入。要改变默认行为,需要使用ServletRequest的setCharacterEncoding。6.检查参数是否缺失或是异常。缺失就替换为默认值,异常也要检查,因为不保证客户端的javascript检查不被用户禁用。如果参数缺失则要重新返回给用户表单,并填写好用户已经填写的东西。7.过滤字符串中的HTML特殊字符,用户可能会输入html标签,所以我们不能直接输出,要把它替换为转义字符。当然我们也要检查输入,不能包含可能危险内容的东西。8.根据请求参数自动填充java对象:表单bean,在jsp中通过特殊的用法jsp:setProperty调用中的property ="*"一举完成bean的填写工作。在servlet使用Jakarta通用库中的使用工具类,依据输入的请求参数自动填充bean。
发表评论
-
servlet和jsp核心编程(第2版)第十六章 简化对Java代码的访问:jsp2.0表达式语言学习笔记
2012-08-23 21:49 730第十六章:简化对Java代 ... -
servlet和jsp核心编程(第2版)第十五章servlet和JSP的集成,模型-视图-控制器构架
2012-08-23 14:59 738第十五章:servlet和JSP的集成,模型-视图-控制器构架 ... -
servlet和jsp核心编程(第2版)第十四章 JavaBean组件在JSP文档中的应用 学习笔记
2012-08-21 11:55 702第十四章 JavaBean组件在JSP文档中的应用 一、bea ... -
servlet和jsp核心编程(第2版)第十三章 在JSP页面中包含文件和applet学习笔记
2012-08-20 15:53 862第十三章 在JSP页面中包 ... -
servlet和jsp核心编程(第2版)第十二章page指令学习笔记
2012-08-19 17:00 755第十二章 控制所生成的servlet的结构:JSP page指 ... -
servlet和jsp核心编程(第2版)第十一章jsp脚本元素的调用学习笔记
2012-08-18 21:09 815第十一章 用JSP脚本元素 ... -
servlet和jsp核心编程(第2版)第十章jsp技术概述学习笔记
2012-08-18 10:37 687第十章jsp技术概述 学习笔记: 一servlet和jsp的区 ... -
servlet和jsp核心编程(第2版)第九章会话跟踪学习笔记
2012-08-17 17:30 893第九章 会话跟踪 核心 ... -
servlet和jsp核心编程(第2版)第八章cookie管理学习笔记
2012-08-08 12:27 841第八章 cookie管理 核心方法: 1.在创建cookie对 ... -
servlet和jsp核心编程(第2版)第七章服务器响应的生成:HTTP响应报头学习笔记
2012-08-06 17:45 728第七章:服务器响应的 ... -
servlet和jsp核心编程(第2版)第六章服务器响应的生成:HTTP状态代码学习笔记
2012-08-05 10:52 736第六章:服务器响应的生成:HTTP状态代码 核心方法: 1.在 ... -
servlet和jsp核心编程(第2版)第五章客户请求的处理:HTTP请求报头学习笔记
2012-08-02 21:36 701第五章客户请求的处理:HTTP请求报头 核心方法: 1.在使用 ... -
servlet和jsp核心编程(第2版)第三章servlet基础学习笔记
2012-07-29 10:43 706第三章:servlet基础 核心方法: 1.使用HTML验证器 ...
相关推荐
Servlet与JSP核心编程(第2卷 第2版)
Servlet与JSP核心编程第二版 PDF文件 高清,内容通俗易懂.
Servlet与JSP核心编程第二版5Servlet与JSP核心编程第二版5Servlet与JSP核心编程第二版5
Servlet与JSP核心编程(第二版),你是不是要学最新版本(J2EE1.4)的Servlet和 SP?这本书能让你如虎添翼。你将能很好地掌握Servlet和JSP
Servlet与JSP核心编程:综合介绍Servlet与JSP
Servlet 与 JSP 核心编程(第2版)(含源代码版) Servlet 与 JSP 核心编程(第2版)(含源代码版)
《Servlet与JSP核心编程(第2卷 第2版)》在第l卷的基础上,广泛涉及自定义标签库、过滤器、声明式安全、JSTL和Struts等主题,并沿袭深受读者喜爱的写作风格,通过完整、有效、资料丰富的程序来演绎目前最流行的技术和...
Servlet与JSP核心编程第二版代码
Servlet与JSP核心编程(第2版).pdf
Servlet与JSP核心编程(第2版),与大家分享JSP 开发技术
本书由Marty Hall,Larry Brown著 张学良译 清华大学出版社出版 原书有47M由于上传文件大小限制分为3部分,本人不是黑人,仅仅在最后一个部分才收取4分资源分
《Servlet与JSP核心编程》由浅入深,全面而深入地介绍了servlet和jsp技术。本书重点介绍核心技术,同时对相关的内容,如web服务器的配置、安装和应用,数据库的安装和配置等都做了详细明了的介绍。本书的例子简练...
Servlet与JSP核心编程第二版(含书签)
《Servlet与JSP核心编程》(第2版)叙述详尽,条理清晰。对于初学者来说是一本不可多得的入门书籍,经验丰富的Servelet和JSP开发人员也可以通过阅读《Servlet与JSP核心编程》(第2版)得到巩固和提高。
《Servlet与JSP核心编程(第2卷 第2版)》
servlet与JSP核心编程,这本书我看了,自己做的目录,是高清非扫描版
《Servlet与JSP核心编程》由浅入深,全面而深入地介绍了servlet和jsp技术。本书重点介绍核心技术,同时对相关的内容,如web服务器的配置、安装和应用,数据库的安装和配置等都做了详细明了的介绍。本书的例子简练...
第4章 客户请求的处理:表单数据 4.1 表单数据的作用 4.2 在servlet中读取表单数据 4.3 示例:读取3个参数 4.4 示例:读取所有参数 4.5 参数缺失或异常时默认值的应用 4.6 过滤字符串中的html特殊字符 ...
Servlet与JSP核心编程(第2版第1卷、第2卷带书签),java web编程必备基础知识。2本书放一起,方面大家下载学习。