当前位置: 首页 > 图文教程 > 网络编程 > JSP > Jsp中数据bean的直接赋值

JSP
我认为JSP有问题(上)
我认为JSP有问题(下)
jsp“抓”网页代码的程序
关于在bean里面打印html的利弊看法
bean里面如何打印到html页面
jdbc3中的RowSet 接口规范
Apusic Application Server1.0中jsp源代码泄漏漏洞
Unify的eWave ServletExec拒绝服务漏洞
通过提交超长的GET请求导致IBM HTTP Server远程溢出
在HTTP请求中添加特殊字符导致暴露JSP源代码文件
Resin 1.2 重要源代码暴露漏洞
多中WEB服务器的通用JSp源代码暴露漏洞
Tomcat 暴露JSP文件内容
IBM WebSphere Application Server 暴露JSP文件内容
JRun 2.3.x 范例文件暴露站点安全信息
BEA WebLogic 暴露源代码漏洞
IBM WebSphere Application Server 3.0.2 存在暴露源代码漏洞
Tomcat 3.1 存在暴露网站路径问题
Sun Java Web Server 能让攻击者远程执行任意命令
Netscape 修复 JAVA 安全漏洞

JSP 中的 Jsp中数据bean的直接赋值


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-04   浏览: 129 ::
收藏到网摘: n/a

一般最常使用的是将form表单中input值存入数据库, 如果数据项很多且类型复杂,使用通常的request.getParameter()
获取的是字符型,由于Jsp不同于PHP Perl其他脚本语言,Jsp对数据类型要求很严格,不能随意在使用中自由转换,
因此,使用 request.getParameter()后就需要进行手工转换数据类型,如果数据项目一多,很复杂,而且枯燥容易出错,

实际上在Jsp中也有自动转换数据类型的功能,使用useBean功能.

如 一个form表单如下:

<form action=save.jsp method=post>

产品名称:<input type=text name="productname">
产品数量:<input type=text name="qty">
产品价格:<input type=text name="price">
.....
<input type="submit">

</form>

我们要将这个表单中的数据存储到数据库profile中.很显然,这一工作,需要在save.jsp中完成.

在save.jsp中我们假设已经有一个编制好的ProfileDB 数据库bean,ProfileDB的大概代码是:

public ProfileDB{

private String productname="";
public void setProductname(String productname){ this.productname=productname}

private int qty=0;
public void setQty(int qty){ this.qty=qty}

private float price=0.0;
public void setPrice(float price){ this.price=price}

public void insert (){

...................

}

}

注意到profileDB中qty price都不是String类型,所以要将form中的qty price数据赋值给profileD的
qty和price,需要进行数据转换:

<jsp:useBean id="profile" scope="page" class="ProfileDB" />
<%
  int qty = Interger.parseInt(request.getParameter(“qty”));
  float price=....
%>
<jsp:setProperty name="profile" property="qty" value="<%= qty%>" />
.....

profile.insert();



这样是不是很繁琐?这样还有一个缺点,严格的讲,必须对转换语句有个catch语句,因为万一如果表单中没有qty
这一项,也就是 request.getParameter(“qty”)为null, 一旦执行起来,Jsp报错程序就会只给你一个Null
出错信息,没有严格指出是哪里出现null了,会让你头疼死,刚刚接触Jsp的人是最怕null报错的.



实际上Jsp中的useBean提供一个方法property="*" 让系统自动完成转换:

首先 必须在ProfileDB中有针对每个变量方法存储的方法:setXXXX, 如setProductname setQty
这里的XXXX(也就是productname qty price) 应该和上面表单程序中input的name是一致的,

save.jsp程序新代码:

<jsp:useBean id="profile" scope="page" class="ProfileDB" />
<jsp:setProperty name="profile" property="*" />


profile.insert();


.....

在save.jsp的新代码中我们注意到语句:<jsp:setProperty name="profile" property="*" />与之前的不同

使用 setProperty property="*"是将表单里提交的数据全部交给bean去处理,因为在bean里面能够方便的进
行各种复杂的逻辑处理, 这样, 直接运行profile.insert(), 就可以将表单中的数据直接存入数据库了.
是不是很简单?


尤其如果你的表单form中有很多数据选项,而且表单数据类型很复杂时,使用这样语句简捷方便.

从现在起,你就不再害怕表单中巨繁的数据存储了.