`

servlet和jsp核心编程(第2版)第四章客户请求的处理,表单数据学习笔记

阅读更多
第四章学习笔记 客户请求的处理,表单数据
警告
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的特殊字符:<,>,",& 首先<>在我们传给前端时,我们要把它替换为&lt;和&gt;类似的,如果我们要在html标签的属性值中使用双引号和&,这里属性值明确不能使用&,所以我们也要替换它为&quot;和&amp
、根据请求参数自动填充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){

}
}
}

真正我们使用时也可以不用编写类直接使用下面的方法:
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。
分享到:
评论

相关推荐

    JSP-Servlet学习笔记第2版.pdf

    2. JSP的生命周期:包括JSP页面的加载、初始化、处理客户请求、销毁等各个阶段,每个阶段涉及的生命周期方法如jspInit(), jspService()和jspDestroy()。 3. JSP内置对象:JSP页面中可以使用九个内置对象,包括...

    JSP&Servlet学习笔记.pdf

    由于这部分内容是电子书中的学习笔记,电子书的内容并未直接给出,因此只能根据电子书的标题“JSP&Servlet学习笔记”和描述来推测可能涉及的知识点,而没有具体的电子书内容可以分析。如需进一步学习,建议查阅相关...

    head_first_servlet&jsp学习笔记

    【Servlet&JSP基础知识】 ...以上是`head_first_servlet&jsp`学习笔记的主要知识点,涵盖了Servlet和JSP的基础、Web应用架构、MVC模式、会话管理和JSP编程等多个方面,为深入理解和实践Servlet与JSP开发奠定了基础。

    Jsp&Servlet学习笔记中的完整范例Gossip

    在"Jsp&Servlet完整范例Gossip"中,可能包含了各种应用场景,如用户登录、注册、数据查询、提交表单等,通过实际操作可以帮助初学者深入理解JSP和Servlet如何协同工作,以及Model2架构的实现方式。文件列表中的...

    jsp-servlet笔记源码

    4. **请求转发和重定向**,了解在Servlet中如何将请求转发给JSP,或者重定向到其他资源。 5. **会话跟踪**,如使用HttpSession对象存储用户状态信息。 6. **MVC模式**,理解如何通过Servlet控制业务逻辑,JSP处理...

    JSP动态网站开发实践教程(第2版)源代码

    《JSP动态网站开发实践教程(第2版)源代码》是学习JSP技术的宝贵资源,它提供了丰富的实例和实战经验,旨在帮助开发者深入理解JSP在构建动态网站中的应用。通过分析和实践这些源代码,我们可以掌握JSP的核心概念、...

    Jsp链接Mysql+Jsp注册表单(学习笔记).

    为了保持良好的编程习惯,通常会将数据库操作封装在JavaBeans或DAO(数据访问对象)类中,JSP仅负责展示和转发请求,遵循MVC(模型-视图-控制器)架构。 通过以上步骤,你已经了解了如何使用JSP连接MySQL并实现...

    JSP和servlet学习笔记

    在本文中,我们将深入探讨Java服务器端开发中的关键概念,主要包括JSP(JavaServer Pages)和Servlet,以及相关的编程技巧和工具使用。首先,我们来看一下MyEclipse这个常用的Java开发环境中的快捷键: 1. 内容提示...

    良葛格JspServlet学习笔记.pdf

    ### 良葛格JspServlet学习笔记 #### 一、引言 在现代Web开发领域,特别是Java EE平台中,JSP (JavaServer Pages) 和 Servlet 技术扮演着非常重要的角色。这两种技术共同构成了Java Web应用的基础,分别侧重于用户...

    Servlet学习笔记3

    ### Servlet学习笔记3:深入理解Servlet...综上所述,本学习笔记涵盖了Servlet技术的核心概念、Tomcat服务器配置、JNDI和数据源管理以及Java EE架构的概览,是Java Web开发者深入理解和掌握Servlet技术的重要参考资料。

    java Servlet学习笔记

    Java Servlet是Java编程语言中用于处理Web服务器与客户端交互的一种技术,主要应用于构建动态Web应用程序。Servlet是Java EE(企业版)的一部分,它允许开发者在服务器端创建强大的、可扩展的网络应用程序。以下是对...

    JSP学习笔记总结.doc

    **JSP学习笔记总结** **第 1 章 JSP 和 Web 页面的交互** 1.1 JSP(JavaServer Pages)是Java技术在Web开发中的应用,它允许开发者将静态HTML与动态Java代码结合起来,生成动态网页。通过在HTML页面中嵌入Java代码...

    servlet概述以及API中文版及学习笔记综合

    此外,Servlet提供了丰富的API,简化了处理HTTP请求和响应的过程,如解析表单数据、操作HTTP头、管理Cookie和会话等。Servlet的可移植性也优于CGI,因为它们基于Java标准,可以在不同的Web服务器上无缝迁移。 Java ...

    servlet + jsp 实现用户登录

    Servlet和JSP是Java Web开发中的核心组件,它们在服务器端处理HTTP请求并生成动态内容。 首先,让我们理解Servlet。Servlet是一个Java类,用于扩展服务器的功能,特别是Web服务器。在用户登录场景中,Servlet会接收...

    SQL.server(2000.2005)jsp,servlet 笔记

    SQL Server 2000和2005是微软公司推出的数据库管理软件,它们提供了高效、可靠的数据存储和处理能力。SQL Server 2000是其较早的版本,而SQL Server 2005则在前者的基础上进行了许多性能和功能的提升,例如增强的...

    JSP JDBC 学习笔记(基础)

    **JSP(Java Server Pages)和JDBC(Java Database Connectivity)是Java开发中用于构建动态网页和处理数据库交互的关键技术。本学习笔记将深入探讨这两个技术的基础知识,以帮助初学者掌握它们的基本概念和应用。**...

    Head First Servlets & JSP 学习笔记

    以上只是《Head First Servlets & JSP》一书中的部分核心知识点,实际内容还包括过滤器、监听器、MVC设计模式、JSTL等更广泛的主题,旨在帮助读者全面理解和掌握Servlet和JSP技术。通过深入学习,开发者能够构建高效...

    使用JSP处理用户注册和登陆

    总的来说,掌握使用JSP处理用户注册和登录的能力,不仅有助于构建功能完善的Web应用,还能加深对Web开发流程和服务器端编程的理解。在实际项目中,还需要考虑更多的安全措施,如加密密码、防止SQL注入、XSS攻击等,...

Global site tag (gtag.js) - Google Analytics