76范文网为您提供各类范文参考!
当前位置:76范文网 > 知识宝典 > 范文大全 > cookie

cookie

来源:76范文网 | 时间:2019-05-15 11:43:24 | 移动端:cookie

cookie 本文简介:

两种常见的表单数据存储处理方法1、对每一表单都编写相应的程序代码在JSP页面或JavaBean或Servlet中,使用request.getparameter()函数逐一提取表单提交的数据,或编写相应的JavaBean,使用setProperty方法将数据自动取到JavaBean中,然后生成SQL语

cookie 本文内容:

两种常见的表单数据存储处理方法

1、对每一表单都编写相应的程序代码

在JSP页面或JavaBean或Servlet中,使用request.
getparameter()函数逐一提取表单提交的数据,或编写相应的JavaBean,使用setProperty方法将数据自动取到
JavaBean中,然后生成SQL语句(insert,update,delete),最后执行executeupdate()函数完成数据表存储。

2、对每一数据表自动生成一个JavaBean程序代码

数据库系统必须支持用户能够读取表结构,并识别关键字段。利用面向对象快速开发工具,如PowerBuilder、Delphi等,自行开发一个
java代码自动生成程序。在该程序中读取数据库表的结构:字段名、数据类型、数据长度,自动生成一个JavaBean代码。在该代码中定义与表中字段对
应的同名变量,建立所有变量的setValue和getValue方法,建立insert、update、delete函数分别处理insert、
update、delete的SQL语句生成和执行。

在表单提交的数据处理页面中,编写如下代码,将表单数据存储到JavaBean中:

<jsp:useBean
id="table"
class="table1_bean"
/>

<jsp:setProperty
name="table"
property="*"
/>

(注:table1_bean为上述自动生成的对应某一个表的JavaBean)

然后调用table1_bean中insert、update、delete函数完成数据表存储,并返回执行结果。如:

<%boolean
success
=table.insert();
%>

第一种方法简单直观,但对每一表单都需要编写相应的数据处理程序。对稍微大一点的应用,表单数量可能很多,开发工作量很大,开发工作效率低。表结构变动如增加、减少字段时,需修改相应的数据处理程序。

第二种方法相对第一种简便得多,每一数据表的数据处理由对应的JavaBean实现,JavaBean自动生成,不需编写,表结构变动时只需重新生
成新的JavaBean,经java编译后覆盖原java类即可。但该方法需要开发JavaBean自动生成程序,表结构变动时JavaBean需要重新
生成和编译。

介绍一种简便通用的方法实现表单数据存储

在WEB应用开发中,很多表单在经过前台浏览器端简单的数据校验后,提交后台服务器,服务器对数据不用作任何处理直接将数据存储到一个数据表中。对
这种情况,我们可以只编写一个程序,对这些表单统一处理,将数据存储到相应的一个数据表中。该方法同样要求数据库系统支持表结构读取和关键字段识别。我们
采用JSP技术编写该程序,程序文件取名为DbdataStore.jsp。

1、调用格式

在网页中表单的Action调用方法如下:

<Form
Name=Frm1
Method=Post
Action="DBdataStore.jsp?
tablename=table1&OperType=…">

table1为数据将要存储的数据库表的表名,OperType操作类型分为三种:insert,update,delete。

表单中的<input
type=text
name=…>,<textarea
name=…><select
name=…>等中的name值应与数据表的字段名相同,DBdataStore.jsp中逐一提取表单提交的对应字段名的数据值,若表单中未定义输入,
得到的值为空值,则对该字段不作处理。

2、以oracle为例的视图定义

1)
建立表各列数据类型视图

CREATE
OR
REPLACE
VIEW
v_dbstru
AS
SELECT
table_name,column_name,data_type,data_length,data_precision,data_scale,column_id

FROM
all_tab_columns
WHERE
owner="user1";//user1为数据表的属主。

2)
建立表的关键列视图

CREATE
OR
REPLACE
VIEW
v_pkey_column
AS

SELECT
b.table_name,b.column_name,b.position

FROM
all_constraints
a,all_cons_columns
b

WHERE
a.owner=b.owner
AND
a.constraint_name=b.constraint_name
AND
a.owner="user1"
 AND
a.constraint_type="P";

3、主要程序代码

1)
程序初始化

String
tablename=request.getParameter("tablename");//提取表名

String
OperType=request.getParameter("OperType");//提取操作类型

String
sFieldValue="";//存放表单提交的字段数据值

String
fieldname="",Datatype=""
//存放字段名,字段数据类型

int
iFieldvalue=0;

String
updateSql="",whereSql="
where
",insSql1="",insSql2="",opSql="",strSql
="";

ResultSet
rs1=null,rs2=null;

insSql1="insert
into
"+tablename+"
(";

insSql2="values(";

2)生成sql语句关键字段部分

生成insert语句关键字段部分,如:insert
into
table1(id

values(100));

只使用关键字段生成update,delete语句where部分,如:where
id=100;

在操作类型为update时,网页form表单中不对关键字段的数据进行修改。
rs1=Stmt.executeQuery("SELECT
column_name
FROM
v_pkey_column
WHERE
table_name=""+tablename+""");
//取关键字段字段名
while(rs1.next()){

 fieldname=rs1.getString("column_name");
 rs2=Stmt.executeQuery("SELECT
data_type
FROM
v_dbstru
WHERE
 table_name=""+tablename+""

AND
column_name=""+fieldname+""");//取关键字段数据类型
 if(rs2.next()){
  Datatype=rs2.getString("data_type");
  sFieldValue=request.getParameter(fieldname.toLowerCase());
  //生成insert语句关键字段部分

  if(OperType.equals("insert")){

   insSql1+=fieldname+",";
   if((sFieldValue==null)
){//表单未提交关键字段数据值时,本文只按数字型处理,数据值按下一流水号计算。


rs2=
Stmt.
executeQuery("SELECT
max("+fieldname+")+1
FROM
"+tablename);
rs2.
next();iFieldvalue=rs2.getInt(1);insSql2+=Integer.toString(iFieldvalue)+",";
}else
if(Datatype.equals("DATE")){insSql2+=
"To_Date(""
+
sFieldValue
+
"","YYYY-MM-DD"),";
   }else
if(Datatype.equals("VARCHAR2")
||
Datatype.equals("CHAR")){
insSql2+="""
+
sFieldValue+"",";}
   else
/*NUMBER,FLOAT
*/
insSql2+=sFieldValue+",";}

   //生成update,delete语句where部分:where
fieldname=...
AND

   if(OperType.equals("update")
||
OperType.equals("delete")){


if(Datatype.equals("DATE")){


 whereSql+=fieldname+"=To_Date(""
+
sFieldValue
+
"","YYYY-MM-DD")
AND
";}else
if(Datatype.equals("VARCHAR2")
||
Datatype.equals("CHAR")){


 whereSql+=fieldname+"=""
+
sFieldValue+""
AND
";}else
/*NUMBER,FLOAT
*/
whereSql+=fieldname+"="+
sFieldValue+"
AND
";}
  }
 }
whereSql=whereSql.substring(0,whereSql.length()-4);

3)非关键字段部分sql语句生成

update语句,如:update
table1
set
column1=value1,…
where
id=100

insert语句,如:insert
into
table1(id,column1,…)values(100,value1,…)

updateSql="update
"+tablename+"
set
";
strSql="SELECT
column_name,data_type,data_length,data_precision,data_scale
FROM

v_dbstru
a
"+"where
table_name=""+tablename+""

AND
a.column_name
not
in
(SELECT

b.column_name
FROM
v_pkey_column
b
where
b.table_name=a.table_name)";
rs1=Stmt.executeQuery(strSql);//取非关键字段字段名和数据类型
while(rs1.next()){

 fieldname=rs1.getString("column_name");Datatype=rs1.getString("data_type");
   sFieldValue=request.getParameter(fieldname.toLowerCase());
//若表单未提交该字段的值,则忽略该字段的处理

 if((sFieldValue!=null)){

  //生成insert语句=insSql1+insSql2
即insert
into
tablename(…

values(…

  if(OperType.equals("insert")){
insSql1+=fieldname+",";
  if(Datatype.equals("DATE")){

   insSql2+=
"To_Date(""
+
sFieldValue
+
"","YYYY-MM-DD"),";
  }
else
if(Datatype.equals("VARCHAR2")
||
Datatype.equals("CHAR")){
   insSql2+="""
+
sFieldValue+"",";}else
/*NUMBER,FLOAT*/
insSql2+=
sFieldValue+",";}

  //生成update语句=updateSql+whereSql
即update
tablename
set
...
where

fieldname=...
if(OperType.equals("update")){

if(Datatype.equals("DATE")){
updateSql+=fieldname+"=To_Date(""
+
sFieldValue
+
"","YYYY-MM-DD"),";
}else
if(Datatype.equals("VARCHAR2")
||
Datatype.equals("CHAR")){

updateSql+=fieldname+"=""
+
sFieldValue,1}+"",";}else
/*NUMBER,FLOAT*/

updateSql+=fieldname+"="+sFieldValue+",";}
))

 rs1.close();

4)生成完整的sql语句并执行

if(OperType.equals("insert"))

 opSql=insSql1.substring(0,insSql1.length()-1)+")"+insSql2.substring(0,insSql2.length()-1)+")";
if(OperType.equals("update"))
 opSql=updateSql.substring(0,updateSql.length()-1)+"
"+whereSql;if(OperType.equals("delete"))
 opSql="delete
FROM
"+tablename+"
"+whereSql;
//已生成完整的sql语句opSql
try{sqlnrows=Stmt.executeUpdate(opSql);}

catch(SQLException
e){out.println("SQLException:
"+opSql);}

4、特点

该方法对所有这种直接存储的表单都统一使用本程序,具有通用性,不必对每个表单或每个数据表独立开发相应程序,开发工作量非常少,调用也非常简便。
同时,在表结构变动时,不用修改DBdataStore.jsp程序。本程序也可改写为Servelet,调用格式为<Form
Name=Frm1
Method=Post
Action="DBdataStoreServelet?tablename=table1&OperType=…">。

Cookie文件创建好后,自然还需要我们把它读出来,否则我们不是白费力气吗?接下来我们看看如何读出在用户硬盘上的Cookie.
??


???
……(中间略)
???


???


??????
Namevalue

???
<%

???
Cookie
cookies[]=request.getCookies();
???
Cookie
sCookie=null;
???
String
svalue=null;
???
String
sname=null;
???
for(int
i=0;i???
{

???
sCookie=cookies[i];
???
svalue=sCookie.getValue();
???
sname=sCookie.getName();
???
%>

???
<%=sname%><%=svalue%>
???
<%

???
}

???
%>

???
……(其他内容)
???


???

???
这一小段JSP文件可以读出用户硬盘上的所有有效的Cookie,也就是仍然在存活期内的Cookie文件。并用表格的形式列出每个Cookie的名字和内容。
???
我们来逐行分析一下这段代码:
???
Cookie
cookies[]=request.getCookies()
我们用request.getCookies()读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面。
???
接下来我们用一个循环语句遍历刚才建立的Cookie对象数组,我们用sCookie=cookies[i]取出数组中的一个Cookie对象,然后我们
用sCookie.getValue()和sCookie.getName()两个方法来取得这个Cookie的名字和内容。
???
通过将取出来的Cookie的名字和内容放在字符串变量中,我们就能对其进行各种操作了。在上面的例子里,可通过循环语句的遍历,将所有Cookie放在一张表格中进行显示。
?
写入Cookie
???
其实用JSP操作Cookie是非常简单的,我们来看下面一段JSP程序:
??


???
……(中间略)
???


???


???
<%

???
String
cookieName="Sender";
???
Cookie
cookie=new
Cookie(cookieName,
"Test_Content");
???
cookie.setMaxAge(10);
???
response.addCookie(cookie);
???
%>
???
……(其他内容)???

???

???
这样我们就设置了一个Cookie,很简单吧?
???
我们来仔细研究一下这段代码:
???
Cookie
cookie=new
Cookie(cookieName,
"Test_Content");
???
这一行建立了一个Cookie对象,初始化有两个参数,第一个参数cookieName定义了Cookie的名字,后一个参数,也是一个字符串,定义了Cookie的内容。也就是我们希望网页在用户的机器上标识的文件内容。
???
接下来一行:cookie.setMaxAge(10),调用了Cookie中的setMaxAge方法,设定Cookie在用户机器硬盘上的存活期为
10秒。一个Cookie在用户的硬盘里面存在的时间并不是无限期的,在建立Cookie对象的时候,我们必须制定Cookie的存活期,超过了这个存活
期后,Cookie文件就不再起作用,会被用户的浏览器自行删除。如果我们希望用户在下次访问这个页面的时候,Cookie文件仍然有效而且可以被网页读
出来的话,我们可以将Cookie的存活期设得稍微长一些。比如cookie.setMaxAge(365*24*60*60)可以让Cookie文件在
一年内有效。
?

cookie 本文关键词:cookie

cookie  来源:网络整理

  免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


cookie》由:76范文网互联网用户整理提供;
链接地址:http://www.yuan0.cn/a/89612.html
转载请保留,谢谢!
相关文章