一 : JSP项目源代码导入
1.自己网上下载的JSP项目源代码如何导入MyEclipse ?
? 右键--import
? 直接在里面新建一个项目(取你自己想要的名字),然后把你下载的直接打开copy里面的
全部内容。在粘贴到你建的项目.他会提示重复的是否覆盖.你选择"全部"就可以了. ? 首选新建一个和你jsp项目代码的名字一摸一样,然后将你下载的项目文件夹下面的文
件全部复制到你新建的项目文件夹下面然后在Eclipse里面右键点你的项目点refresh更新,提示需要覆盖的时候点事就可以了。
一般的如果有什么src,webroot等目录的就是project,可以直接导入进入就行了,如果没有的话,就直接放到tomcat中的webapp中就可以了。如果你要放到eclipse里,由于你没有src所以不能直接使用import导入工具空间,只能导入文件系统了
2.一个JSP程序,里面有 WEB-INF 很多.jsp文件 该怎么运行?myeclipse好像运行不了? ? jsp放到web-infh中不能通过路径直接访问的。你应该可以通过action或者serlvet来访
问的。请先确定你的是源码文件还是发布后的文件。
源码文件中应该有 .classpath .project等文件。发布后的文件应该放到tomcat 文件夹下的 webapps中。一般WEB-INF有jsp多是用框架写的。
? jsp放到web-inf下虽然安全性较高,但不能直接在url里面访问,要用servlet中的
request.getRequestDispatcher("/WEB-INF/a.jsp").这样去访问,如果放到tomcat6的文件夹下那应该直接把jsp拷贝到tomcat的webapp目录下。
3.jsp的项目文件存放是不是有一定的规定?
? 部署项目的时候必须要有一个文件夹包含WEB-INF和META-INF,其中WEB-INF中必须包含
classes(是src中包含的JavaBean的编译文件),在它里面一般有2个文件夹 一个 classes 文件夹 用来存放 生成的.class文件。src 是eclipse 生成的用来存放源文件。
? 还有lib文件夹(包含一些需要的包比如说jstl,jar 等)还有Web.xml文件,至少要有这
样的结构在Tomcat或者其他服务器下你才能正常部署!!Eclipse工具会自动给创建这样结构的文件夹。
? web-inf 文件是 jsp web 应有必须有的文件夹。如果是单纯的jsp页面,web-inf并不需
要,但是如果有servlet的话那就要了,这个文件夹主要存放配置文件及类库文件。src和web-inf这2个文件夹是MyEclipse默认的设定。一般src下面放源码,然后webroot里面放web工程真正要运行的文件。例如.jsp .xml .class等等,这样在MyEclipse自动部署的时候会将WebRoot里面所有的东西放到tomcat/webapps下面,方便进行web开发。
? 每次新new一个web工程 eclipse会在对应目录下面生成一个.classpath .project文件
他们就是这个工程的配置文件, eclipse每次加载工程的时候就会读取这些文件,如果你想修改文件的存放目录,那么就可以在.classpath文件里面作一下修改。
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="source"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con"
path="com.genuitec.eclipse.j2eedt.core.J2EE14_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/hibernate_lib"/> <classpathentry kind="output" path="MyProject/WEB-INF/classes"/>
</classpath>
其中kind="src" 就是指源文件的存放目录
<classpathentry kind="output" 指编译后文件存放的目录,做上面修改以后你可以在MyEclipse的这个工程下面建一个source文件夹 里面放程序源码,再建一个MyProject文件夹 ,把WebRoot的东西拖到里面 ,这样就实现自定义的效果了。
二 : JSP常用代码
一些ASP初学者常用的代码
发布会员: 白星海 来源: 中国源码下载站 加入时间: 2003-7-27 17:18:49 人气: 1701
---------------------------------------------------------------------------------------
1.获得系统时间:
<%=now()%>
2.取得来访用的IP:
<%=request.serverVariables("remote_host")%>
3.获得系统,浏览器版本:
<script>
window.document.write("版本:"+navigator.appName+navigator.appVersion+" browser.")
</script>
4.去除IE混动条:
<body scroll="no">
<body style="overflow-y:hidden">
5.进入网站,跳出广告:
<script language="javascript">
<!--
<!-- 注意更改文件所在路径-->
window.open(''http://www.XXXXXX.com'','''',''height=200,width=300,top=0,left=30'');
// -->
</script>
6.随机数:
<%randomize%>
<%=(int(rnd()*n)+1)%>
N为可改变数
7.向上混动代码:
<marquee direction="up" scrolldelay="200" style="font-size: 9pt; color: #FF0000;
line-height: 150%; font-style:italic; font-weight:bold" scrollamount="2" width="206"
height="207" bgcolor="#FFFF00">hhhhhhhhhhhhhhhhhhh</marquee>
8.自动关闭网页:
<script LANGUAGE="javascript">
<!--
setTimeout(''window.close();'', 10000); //60秒后关闭
// -->
</script>
<p align="center">本页10秒后自动关闭,请注意刷新页面</p>
9.随机背景音乐:
<%randomize%>
<bgsound src="mids/<%=(int(rnd()*60)+1)%>.mid" loop="-1">
可以修改数字,限制调用个数,我这里是60个.
10.自动刷新本页面:
<script>
<!--
var limit="0:10"
if (document.images){
var parselimit=limit.split(":")
parselimit=parselimit[0]*60+parselimit[1]*1
}
function beginrefresh(){
if (!document.images)
return
if (parselimit==1)
window.location.reload()
else{
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit%60
if (curmin!=0)
curtime=curmin+"分"+cursec+"秒后重刷本页!"
else
curtime=cursec+"秒后重刷本页!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}
window.onload=beginrefresh
file://-->
</script>
11.ACCESS数据库连接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
'更改数据库名字
db="data/dvBBS5.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
'如果你的服务器采用较老版本Access驱动,请用下面连接方法
'connstr="driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)
conn.Open connstr
function CloseDatabase
Conn.close
Set conn = Nothing
End Function
%>
12.SQL数据库连接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
connstr="driver={SQL Server};server=HUDENQ-N11T33NB;uid=sa;pwd=xsfeihu;database=dvbbs"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connstr
function CloseDatabase
Conn.close
Set conn = Nothing
End Function
%>
13.用键盘打开网页代码:
<script
language="javascript">
function ctlent(eventobject)
{
if((event.ctrlKey && window.event.keyCode==13)||(event.altKey && window.event.keyCode==83))
{
window.open('网址','','')
}
}
</script>
这里是Ctrl+Enter和Alt+S的代码 自己查下键盘的ASCII码再换就行
14.让层不被控件复盖代码:
<div z-Index:2><object ***></object></div> # 前面
<div z-Index:1><object ***></object></div> # 后面
<div id="Layer2" style="position:absolute; top:40;width:400px; height:95px;z-index:2"><table height=100% width=100% bgcolor="#ff0000"><tr><td height=100% width=100%></td></tr></table><iframe width=0 height=0></iframe></div>
<div id="Layer1" style="position:absolute; top:50;width:200px; height:115px;z-index:1"><iframe height=100% width=100%></iframe></div>
15.动网FLASH广告代码:
<object classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="468" height="60"><param name=movie value="images/yj16d.swf"><param name=quality value=high><embed src="images/dvbanner.swf" quality=high pluginspage="http://www.61k.comshockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash";;; type="application/x-shockwave-flash" width="468" height="60"></embed></object>
16.VBS弹出窗口小代码:
<script language=vbscript>
msgbox"你还没有注册或登陆论坛","0","精品论坛"
location.href = "login.asp"
</script>
16.使用FSO修改文件特定内容的函数
function FSOchange(filename,Target,String)
Dim objFSO,objCountFile,FiletempData
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)
FiletempData = objCountFile.ReadAll
objCountFile.Close
FiletempData=Replace(FiletempData,Target,String)
Set objCountFile=objFSO.CreateTextFile(Server.MapPath(filename),True)
objCountFile.Write FiletempData
objCountFile.Close
Set objCountFile=Nothing
Set objFSO = Nothing
End Function
17.使用FSO读取文件内容的函数
function FSOFileRead(filename)
Dim objFSO,objCountFile,FiletempData
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)
FSOFileRead = objCountFile.ReadAll
objCountFile.Close
Set objCountFile=Nothing
Set objFSO = Nothing
End Function
18.使用FSO读取文件某一行的函数
function FSOlinedit(filename,lineNum)
if linenum < 1 then exit function
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
FSOlinedit = temparray(lineNum-1)
end if
end if
end function
19.使用FSO写文件某一行的函数
function FSOlinewrite(filename,lineNum,Linecontent)
if linenum < 1 then exit function
dim fso,f,temparray,tempCnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
temparray(lineNum-1) = lineContent
end if
tempcnt = join(temparray,chr(13)&chr(10))
set f = fso.createtextfile(server.mappath(filename),true)
f.write tempcnt
end if
f.close
set f = nothing
end function
20.使用FSO添加文件新行的函数
function FSOappline(filename,Linecontent)
dim fso,f
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),8,1)
f.write chr(13)&chr(10)&Linecontent
f.close
set f = nothing
end function
21.读文件最后一行的函数
function FSOlastline(filename)
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
FSOlastline = temparray(ubound(temparray))
end if
end function
利用FSO取得BMP,JPG,PNG,GIF文件信息(大小,宽、高等)
<%
'::: BMP, GIF, JPG and PNG :::
'::: This function gets a specified number of bytes from any :::
'::: file, starting at the offset (base 1) :::
'::: :::
'::: Passed: :::
'::: flnm => Filespec of file to read :::
'::: offset => Offset at which to start reading :::
'::: bytes => How many bytes to read :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function GetBytes(flnm, offset, bytes)
Dim objFSO
Dim objFTemp
Dim objTextStream
Dim lngSize
on error resume next
Set objFSO = CreateObject("Scripting.FileSystemObject")
' First, we get the filesize
Set objFTemp = objFSO.GetFile(flnm)
lngSize = objFTemp.Size
set objFTemp = nothing
fsoForReading = 1
Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)
if offset > 0 then
strBuff = objTextStream.Read(offset - 1)
end if
if bytes = -1 then ' Get All!
GetBytes = objTextStream.Read(lngSize) 'ReadAll
else
GetBytes = objTextStream.Read(bytes)
end if
objTextStream.Close
set objTextStream = nothing
set objFSO = nothing
end function
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: Functions to convert two bytes to a numeric value (long) :::
'::: (both little-endian and big-endian) :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function lngConvert(strTemp)
lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(s
trTemp, 1)) * 256)))
end function
function lngConvert2(strTemp)
lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))
end function
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: This function does most of the real work. It will attempt :::
'::: to read any file, regardless of the extension, and will :::
'::: identify if it is a graphical image. :::
'::: :::
'::: Passed: :::
'::: flnm => Filespec of file to read :::
'::: width => width of image :::
'::: height => height of image :::
'::: depth => color depth (in number of colors) :::
'::: strImageType=> type of image (e.g. GIF, BMP, etc.) :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function gfxSpex(flnm, width, height, depth, strImageType)
dim strPNG
dim strGIF
dim strBMP
dim strType
strType = ""
strImageType = "(unknown)"
gfxSpex = False
strPNG = chr(137) & chr(80) & chr(78)
strGIF = "GIF"
strBMP = chr(66) & chr(77)
strType = GetBytes(flnm, 0, 3)
if strType = strGIF then ' is GIF
strImageType = "GIF"
Width = lngConvert(GetBytes(flnm, 7, 2))
Height = lngConvert(GetBytes(flnm, 9, 2))
Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)
gfxSpex = True
elseif left(strType, 2) = strBMP then ' is BMP
strImageType = "BMP"
Width = lngConvert(GetBytes(flnm, 19, 2))
Height = lngConvert(GetBytes(flnm, 23, 2))
Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))
gfxSpex = True
elseif strType = strPNG then ' Is PNG
strImageType = "PNG"
Width = lngConvert2(GetBytes(flnm, 19, 2))
Height = lngConvert2(GetBytes(flnm, 23, 2))
Depth = getBytes(flnm, 25, 2)
select case asc(right(Depth,1))
case 0
Depth = 2 ^ (asc(left(Depth, 1)))
gfxSpex = True
case 2
Depth = 2 ^ (asc(left(Depth, 1)) * 3)
gfxSpex = True
case 3
Depth = 2 ^ (asc(left(Depth, 1))) '8
gfxSpex = True
case 4
Depth = 2 ^ (asc(left(Depth, 1)) * 2)
gfxSpex = True
case 6
Depth = 2 ^ (asc(left(Depth, 1)) * 4)
gfxSpex = True
case else
Depth = -1
end select
else
strBuff = GetBytes(flnm, 0, -1) ' Get all bytes from file
lngSize = len(strBuff)
flgFound = 0
strTarget = chr(255) & chr(216) & chr(255)
flgFound = instr(strBuff, strTarget)
if flgFound = 0 then
exit function
end if
strImageType = "JPG"
lngPos = flgFound + 2
ExitLoop = false
do while ExitLoop = False and lngPos < lngSize
do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSize
lngPos = lngPos + 1
loop
if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 then
lngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))
lngPos = lngPos + lngMarkerSize + 1
else
ExitLoop = True
end if
loop
'
if ExitLoop = False then
Width = -1
Height = -1
Depth = -1
else
Height = lngConvert2(mid(strBuff, lngPos + 4, 2))
Width = lngConvert2(mid(strBuff, lngPos + 6, 2))
Depth = 2 ^ (asc(mid(strBuff, lngPos + 8, 1)) * 8)
gfxSpex = True
end if
end if
end function
'::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::
'::: Test Harness :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
' To test, we'll just try to show all files with a .GIF extension in the root of C:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF = objFSO.GetFolder("c:\")
Set objFC = objF.Files
response.write "<table border=""0"" cellpadding=""5"">"
For Each f1 in objFC
if instr(ucase(f1.Name), ".GIF") then
response.write "<tr><td>" & f1.name & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"
if gfxSpex(f1.Path, w, h, c, strType) = true then
response.write w & " x " & h & " " & c & " colors"
else
response.write " "
end if
response.write "</td></tr>"
end if
Next
response.write "</table>"
set objFC = nothing
set objF = nothing
set objFSO = nothing
%>
24.点击返回上页代码:
<form>
<p><input TYPE="button" value="返回上一步" onCLICK="history.back(-1)"></p>
</form>
24.点击刷新代码:
<form>
<p><input TYPE="button" value="刷新按钮一" onCLICK="ReloadButton()"></p>
</form>
<script language="javascript"><!--
function ReloadButton(){location.href="allbutton.htm";}
// --></script>
24.点击刷新代码2:
<form>
<p><input TYPE="button" value="刷新按钮二" onClick="history.go(0)"> </p>
</form>
<form>
<p><input TYPE="button" value="打开一个网站" onCLICK="HomeButton()"></p>
</form>
<script language="javascript"><!--
function HomeButton(){location.href="http://nettrain.126.com";;;}
// --></script>
25.弹出警告框代码:
<form>
<p><input TYPE="button" value="弹出警告框" onCLICK="AlertButton()"></p>
</form>
<script language="javascript"><!--
function AlertButton(){window.alert("要多多光临呀!");}
// --></script>
26.状态栏信息
<form>
<p><input TYPE="button" value="状态栏信息" onCLICK="StatusButton()"></p>
</form>
<script language="javascript"><!--
function StatusButton(){window.status="要多多光临呀!";}
// --></script>
27.背景色变换
<form>
<p><input TYPE="button" value="背景色变换" onClick="BgButton()"></p>
</form>
<script>function BgButton(){
if (document.bgColor=='#00ffff')
{document.bgColor='#ffffff';}
else{document.bgColor='#00ffff';}
}
</script>
28.点击打开新窗口
<form>
<p><input TYPE="button" value="打开新窗口" onCLICK="NewWindow()"></p>
</form>
<script language="javascript"><!--
function NewWindow(){window.open("http://www.61k.com;;,"","height=240,width=340,status=no,location=no,toolbar=no,directories=no,menubar=no");}
// --></script></body>
29.分页代码:
<%''本程序文件名为:Pages.asp%>
<%''包含ADO常量表文件adovbs.inc,可从"\Program Files\Common Files\System\ADO"目录下拷贝%>
<!--#Include File="adovbs.inc"-->
<%''*建立数据库连接,这里是Oracle8.05数据库
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "Provider=msdaora.1;Data Source=YourSrcName;User ID=
YourUserID;Password=YourPassword;"
Set rs=Server.CreateObject("ADODB.Recordset") ''创建Recordset对象
rs.CursorLocation=adUseClient ''设定记录集指针属性
''*设定一页内的记录总数,可根据需要进行调整
rs.PageSize=10
''*设置查询语句
StrSQL="Select ID,姓名,住址,电话 from 通讯录 Order By ID"
rs.Open StrSQL,conn,adOpenStatic,adLockReadOnly,adCmdText
%>
<HTML>
<HEAD>
<title>分页示例</title>
<script language=javascript>
//点击"[第一页]"时响应:
function PageFirst()
{
document.MyForm.CurrentPage.selectedIndex=0;
document.MyForm.CurrentPage.onchange();
}
//点击"[上一页]"时响应:
function PagePrior()
{
document.MyForm.CurrentPage.selectedIndex--;
document.MyForm.CurrentPage.onchange();
}
//点击"[下一页]"时响应:
function PageNext()
{
document.MyForm.CurrentPage.selectedIndex++;
document.MyForm.CurrentPage.onchange();
}
//点击"[最后一页]"时响应:
function PageLast()
{
document.MyForm.CurrentPage.selectedIndex=document.MyForm.CurrentPage.length-1;
document.MyForm.CurrentPage.onchange();
}
//选择"第?页"时响应:
function PageCurrent()
{ //Pages.asp是本程序的文件名
document.MyForm.action='Pages.asp?Page='+(document.MyForm.CurrentPage.selectedIndex+1)
document.MyForm.submit();
}
</Script>
</HEAD>
<BODY bgcolor="#ffffcc" link="#008000" vlink="#008000" alink="#FF0000"">
<%IF rs.Eof THEN
Response.Write("<font size=2 color=#000080>[数据库中没有记录!]</font>")
ELSE
''指定当前页码
If Request("CurrentPage")="" Then
rs.AbsolutePage=1
Else
rs.AbsolutePage=CLng(Request("CurrentPage"))
End If
''创建表单MyForm,方法为Get
Response.Write("<form method=Get name=MyForm>")
Response.Write("<p align=center><font size=2 color=#008000>")
''设置翻页超链接
if rs.PageCount=1 then
Response.Write("[第一页] [上一页] [下一页] [最后一页] ")
else
if rs.AbsolutePage=1 then
Response.Write("[第一页] [上一页] ")
Response.Write("[<a href=java script:PageNext()>下一页</a>] ")
Response.Write("[<a href=java script:PageLast()>最后一页</a>] ")
else
if rs.AbsolutePage=rs.PageCount then
Response.Write("[<a href=java script:PageFirst()>第一页</a>] ")
Response.Write("[<a href=java script:PagePrior()>上一页</a>] ")
Response.Write("[下一页] [最后一页] ")
else
Response.Write("[<a href=java script:PageFirst()>第一页</a>] ")
Response.Write("[<a href=java script:PagePrior()>上一页</a>] ")
Response.Write("[<a href=java script:PageNext()>下一页</a>] ")
Response.Write("[<a href=java script:PageLast()>最后一页</a>] ")
end if
end if
end if
''创建下拉列表框,用于选择浏览页码
Response.Write("第<select size=1 name=CurrentPage onchange=PageCurrent()>")
For i=1 to rs.PageCount
if rs.AbsolutePage=i then
Response.Write("<option selected>"&i&"</option>") ''当前页码
else
Response.Write
("<option>"&i&"</option>")
end if
Next
Response.Write("</select>页/共"&rs.PageCount&"页 共"&rs.RecordCount&"条记录</font><p>")
Response.Write("</form>")
''创建表格,用于显示
Response.Write("<table align=center cellspacing=1 cellpadding=1 border=1")
Response.Write(" bordercolor=#99CCFF bordercolordark=#b0e0e6 bordercolorlight=#000066>")
Response.Write("<tr bgcolor=#ccccff bordercolor=#000066>")
Set Columns=rs.Fields
''显示表头
For i=0 to Columns.Count-1
Response.Write("<td align=center width=200 height=13>")
Response.Write("<font size=2><b>"&Columns(i).name&"</b></font></td>")
Next
Response.Write("</tr>")
''显示内容
For i=1 to rs.PageSize
Response.Write("<tr bgcolor=#99ccff bordercolor=#000066>")
For j=0 to Columns.Count-1
Response.Write("<td><font size=2>"&Columns(j)&"</font></td>")
Next
Response.Write("</tr>")
rs.movenext
if rs.EOF then exit for
Next
Response.Write("</table>")
END IF
%>
</BODY>
</HTML>
三 : jsp基础教程清华版源代码
61阅读请您转载分享:
四 : JSP常用代码
一些ASP初学者常用的代码 发布会员: 白星海 来源: 中国源码下载站 加入时间: 2003-7-27 17:18:49 人气: 1701--------------------------------------------------------------------------------------- 1.获得系统时间:<%=now()%>2.取得来访用的IP:<%=request.serverVariables("remote_host")%>3.获得系统,浏览器版本:<script>window.document.write("版本:"+navigator.appName+navigator.appVersion+" browser.")</script>4.去除IE混动条:<body scroll="no"> <body style="overflow-y:hidden">5.进入网站,跳出广告:<script language="javascript"><!-- <!-- 注意更改文件所在路径-->window.open(''http://www.XXXXXX.com'','''',''height=200,width=300,top=0,left=30'');// --></script>6.随机数:<%randomize%><%=(int(rnd()*n)+1)%>N为可改变数7.向上混动代码:<marquee direction="up" scrolldelay="200" style="font-size: 9pt; color: #FF0000;line-height: 150%; font-style:italic; font-weight:bold" scrollamount="2" width="206"height="207" bgcolor="#FFFF00">hhhhhhhhhhhhhhhhhhh</marquee>8.自动关闭网页:<script LANGUAGE="javascript"><!--setTimeout(''window.close();'', 10000); //60秒后关闭// --></script><p align="center">本页10秒后自动关闭,请注意刷新页面</p>9.随机背景音乐:<%randomize%><bgsound src="mids/<%=(int(rnd()*60)+1)%>.mid" loop="-1"> 可以修改数字,限制调用个数,我这里是60个.10.自动刷新本页面:<script> <!-- var limit="0:10" if (document.images){ var parselimit=limit.split(":") parselimit=parselimit[0]*60+parselimit[1]*1 } function beginrefresh(){ if (!document.images) return if (parselimit==1) window.location.reload() else{ parselimit-=1 curmin=Math.floor(parselimit/60) cursec=parselimit%60 if (curmin!=0) curtime=curmin+"分"+cursec+"秒后重刷本页!" else curtime=cursec+"秒后重刷本页!" window.status=curtime setTimeout("beginrefresh()",1000) } } window.onload=beginrefresh file://--> </script>11.ACCESS数据库连接:<%option explicitdim startime,endtime,conn,connstr,dbstartime=timer()'更改数据库名字db="data/dvBBS5.mdb"Set conn = Server.CreateObject("ADODB.Connection")connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)'如果你的服务器采用较老版本Access驱动,请用下面连接方法'connstr="driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)conn.Open connstrfunction CloseDatabaseConn.closeSet conn = NothingEnd Function%>12.SQL数据库连接:<%option explicitdim startime,endtime,conn,connstr,dbstartime=timer()connstr="driver={SQL Server};server=HUDENQ-N11T33NB;uid=sa;pwd=xsfeihu;database=dvbbs" Set conn = Server.CreateObject("ADODB.Connection")conn.Open connstrfunction CloseDatabaseConn.closeSet conn = NothingEnd Function%>13.用键盘打开网页代码:<script
jsp源代码 JSP常用代码
language="javascript">function ctlent(eventobject){if((event.ctrlKey && window.event.keyCode==13)||(event.altKey && window.event.keyCode==83)){window.open('网址','','')}}</script> 这里是Ctrl+Enter和Alt+S的代码 自己查下键盘的ASCII码再换就行14.让层不被控件复盖代码:<div z-Index:2><object ***></object></div> # 前面 <div z-Index:1><object ***></object></div> # 后面 <div id="Layer2" style="position:absolute; top:40;width:400px; height:95px;z-index:2"><table height=100% width=100% bgcolor="#ff0000"><tr><td height=100% width=100%></td></tr></table><iframe width=0 height=0></iframe></div><div id="Layer1" style="position:absolute; top:50;width:200px; height:115px;z-index:1"><iframe height=100% width=100%></iframe></div>15.动网FLASH广告代码:<object classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="468" height="60"><param name=movie value="images/yj16d.swf"><param name=quality value=high><embed src="images/dvbanner.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash";;; type="application/x-shockwave-flash" width="468" height="60"></embed></object>16.VBS弹出窗口小代码:<script language=vbscript>msgbox"你还没有注册或登陆论坛","0","精品论坛"location.href = "login.asp"</script>16.使用FSO修改文件特定内容的函数function FSOchange(filename,Target,String)Dim objFSO,objCountFile,FiletempDataSet objFSO = Server.CreateObject("Scripting.FileSystemObject")Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)FiletempData = objCountFile.ReadAllobjCountFile.CloseFiletempData=Replace(FiletempData,Target,String)Set objCountFile=objFSO.CreateTextFile(Server.MapPath(filename),True)objCountFile.Write FiletempData objCountFile.CloseSet objCountFile=NothingSet objFSO = NothingEnd Function17.使用FSO读取文件内容的函数function FSOFileRead(filename)Dim objFSO,objCountFile,FiletempDataSet objFSO = Server.CreateObject("Scripting.FileSystemObject")Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)FSOFileRead = objCountFile.ReadAllobjCountFile.CloseSet objCountFile=NothingSet objFSO = NothingEnd Function18.使用FSO读取文件某一行的函数function FSOlinedit(filename,lineNum)if linenum < 1 then exit functiondim fso,f,temparray,tempcntset fso = server.CreateObject("scripting.filesystemobject")if not fso.fileExists(server.mappath(filename)) then exit functionset f = fso.opentextfile(server.mappath(filename),1)if not f.AtEndofStream thentempcnt = f.readallf.closeset f = nothingtemparray = split(tempcnt,chr(13)&chr(10))if lineNum>ubound(temparray)+1 thenexit functionelseFSOlinedit = temparray(lineNum-1)end ifend ifend function19.使用FSO写文件某一行的函数
扩展:jsp常用标签 / jsp常用指令 / jsp的常用指令
jsp源代码 JSP常用代码
function FSOlinewrite(filename,lineNum,Linecontent)if linenum < 1 then exit functiondim fso,f,temparray,tempCntset fso = server.CreateObject("scripting.filesystemobject")if not fso.fileExists(server.mappath(filename)) then exit functionset f = fso.opentextfile(server.mappath(filename),1)if not f.AtEndofStream thentempcnt = f.readallf.closetemparray = split(tempcnt,chr(13)&chr(10))if lineNum>ubound(temparray)+1 thenexit functionelsetemparray(lineNum-1) = lineContentend iftempcnt = join(temparray,chr(13)&chr(10))set f = fso.createtextfile(server.mappath(filename),true)f.write tempcntend iff.closeset f = nothingend function20.使用FSO添加文件新行的函数function FSOappline(filename,Linecontent)dim fso,fset fso = server.CreateObject("scripting.filesystemobject")if not fso.fileExists(server.mappath(filename)) then exit functionset f = fso.opentextfile(server.mappath(filename),8,1)f.write chr(13)&chr(10)&Linecontentf.closeset f = nothingend function21.读文件最后一行的函数function FSOlastline(filename)dim fso,f,temparray,tempcntset fso = server.CreateObject("scripting.filesystemobject")if not fso.fileExists(server.mappath(filename)) then exit functionset f = fso.opentextfile(server.mappath(filename),1)if not f.AtEndofStream thentempcnt = f.readallf.closeset f = nothingtemparray = split(tempcnt,chr(13)&chr(10))FSOlastline = temparray(ubound(temparray))end ifend function利用FSO取得BMP,JPG,PNG,GIF文件信息(大小,宽、高等)<%'::: BMP, GIF, JPG and PNG ::: '::: This function gets a specified number of bytes from any :::'::: file, starting at the offset (base 1) :::'::: :::'::: Passed: :::'::: flnm => Filespec of file to read :::'::: offset => Offset at which to start reading :::'::: bytes => How many bytes to read :::'::: :::':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::function GetBytes(flnm, offset, bytes)Dim objFSODim objFTempDim objTextStreamDim lngSizeon error resume nextSet objFSO = CreateObject("Scripting.FileSystemObject") ' First, we get the filesizeSet objFTemp = objFSO.GetFile(flnm)lngSize = objFTemp.Sizeset objFTemp = nothingfsoForReading = 1Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)if offset > 0 thenstrBuff = objTextStream.Read(offset - 1)end ifif bytes = -1 then ' Get All!GetBytes = objTextStream.Read(lngSize) 'ReadAllelseGetBytes = objTextStream.Read(bytes)end ifobjTextStream.Closeset objTextStream = nothingset objFSO = nothingend function ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'::: :::'::: Functions to convert two bytes to a numeric value (long) :::'::: (both little-endian and big-endian) :::'::: :::':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::function lngConvert(strTemp)lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(s
jsp源代码 JSP常用代码
trTemp, 1)) * 256)))end functionfunction lngConvert2(strTemp)lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))end function ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::'::: :::'::: This function does most of the real work. It will attempt :::'::: to read any file, regardless of the extension, and will :::'::: identify if it is a graphical image. :::'::: :::'::: Passed: :::'::: flnm => Filespec of file to read :::'::: width => width of image :::'::: height => height of image :::'::: depth => color depth (in number of colors) :::'::: strImageType=> type of image (e.g. GIF, BMP, etc.) :::'::: :::':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::function gfxSpex(flnm, width, height, depth, strImageType)dim strPNG dim strGIFdim strBMPdim strTypestrType = ""strImageType = "(unknown)"gfxSpex = FalsestrPNG = chr(137) & chr(80) & chr(78)strGIF = "GIF"strBMP = chr(66) & chr(77)strType = GetBytes(flnm, 0, 3)if strType = strGIF then ' is GIFstrImageType = "GIF"Width = lngConvert(GetBytes(flnm, 7, 2))Height = lngConvert(GetBytes(flnm, 9, 2))Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)gfxSpex = Trueelseif left(strType, 2) = strBMP then ' is BMPstrImageType = "BMP"Width = lngConvert(GetBytes(flnm, 19, 2))Height = lngConvert(GetBytes(flnm, 23, 2))Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))gfxSpex = Trueelseif strType = strPNG then ' Is PNGstrImageType = "PNG"Width = lngConvert2(GetBytes(flnm, 19, 2))Height = lngConvert2(GetBytes(flnm, 23, 2))Depth = getBytes(flnm, 25, 2)select case asc(right(Depth,1))case 0Depth = 2 ^ (asc(left(Depth, 1)))gfxSpex = Truecase 2Depth = 2 ^ (asc(left(Depth, 1)) * 3)gfxSpex = Truecase 3Depth = 2 ^ (asc(left(Depth, 1))) '8gfxSpex = Truecase 4Depth = 2 ^ (asc(left(Depth, 1)) * 2)gfxSpex = Truecase 6Depth = 2 ^ (asc(left(Depth, 1)) * 4)gfxSpex = Truecase elseDepth = -1end select elsestrBuff = GetBytes(flnm, 0, -1) ' Get all bytes from filelngSize = len(strBuff)flgFound = 0strTarget = chr(255) & chr(216) & chr(255)flgFound = instr(strBuff, strTarget)if flgFound = 0 thenexit functionend ifstrImageType = "JPG"lngPos = flgFound + 2ExitLoop = falsedo while ExitLoop = False and lngPos < lngSize do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSizelngPos = lngPos + 1loopif asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 thenlngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))lngPos = lngPos + lngMarkerSize + 1elseExitLoop = Trueend ifloop'if ExitLoop = False thenWidth = -1Height = -1Depth = -1elseHeight = lngConvert2(mid(strBuff, lngPos + 4, 2))Width = lngConvert2(mid(strBuff, lngPos + 6, 2))Depth = 2 ^ (asc(mid(strBuff, lngPos + 8, 1)) * 8)gfxSpex = Trueend if end ifend function '::::::::::::::::::::::::::::::
扩展:jsp常用标签 / jsp常用指令 / jsp的常用指令
jsp源代码 JSP常用代码
:::::::::::::::::::::::::::::::::::::::'::: Test Harness :::'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ' To test, we'll just try to show all files with a .GIF extension in the root of C:Set objFSO = CreateObject("Scripting.FileSystemObject")Set objF = objFSO.GetFolder("c:\")Set objFC = objF.Filesresponse.write "<table border=""0"" cellpadding=""5"">"For Each f1 in objFCif instr(ucase(f1.Name), ".GIF") thenresponse.write "<tr><td>" & f1.name & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"if gfxSpex(f1.Path, w, h, c, strType) = true thenresponse.write w & " x " & h & " " & c & " colors"elseresponse.write " "end ifresponse.write "</td></tr>"end ifNextresponse.write "</table>"set objFC = nothingset objF = nothingset objFSO = nothing %>24.点击返回上页代码:<form><p><input TYPE="button" value="返回上一步" onCLICK="history.back(-1)"></p></form>24.点击刷新代码:<form><p><input TYPE="button" value="刷新按钮一" onCLICK="ReloadButton()"></p></form><script language="javascript"><!--function ReloadButton(){location.href="allbutton.htm";}// --></script> 24.点击刷新代码2:<form><p><input TYPE="button" value="刷新按钮二" onClick="history.go(0)"> </p></form> <form><p><input TYPE="button" value="打开一个网站" onCLICK="HomeButton()"></p></form><script language="javascript"><!--function HomeButton(){location.href="http://nettrain.126.com";;;}// --></script> 25.弹出警告框代码:<form><p><input TYPE="button" value="弹出警告框" onCLICK="AlertButton()"></p></form><script language="javascript"><!--function AlertButton(){window.alert("要多多光临呀!");}// --></script> 26.状态栏信息<form><p><input TYPE="button" value="状态栏信息" onCLICK="StatusButton()"></p></form><script language="javascript"><!--function StatusButton(){window.status="要多多光临呀!";}// --></script> 27.背景色变换<form><p><input TYPE="button" value="背景色变换" onClick="BgButton()"></p></form><script>function BgButton(){if (document.bgColor=='#00ffff'){document.bgColor='#ffffff';}else{document.bgColor='#00ffff';}}</script> 28.点击打开新窗口<form><p><input TYPE="button" value="打开新窗口" onCLICK="NewWindow()"></p></form><script language="javascript"><!--function NewWindow(){window.open("http://www.mcmx.com";;,"","height=240,width=340,status=no,location=no,toolbar=no,directories=no,menubar=no");}// --></script></body>29.分页代码:<%''本程序文件名为:Pages.asp%><%''包含ADO常量表文件adovbs.inc,可从"\Program Files\Common Files\System\ADO"目录下拷贝%><!--#Include File="adovbs.inc"--><%''*建立数据库连接,这里是Oracle8.05数据库Set conn=Server.CreateObject("ADODB.Connection") conn.Open "Provider=msdaora.1;Data Source=YourSrcName;User ID=
jsp源代码 JSP常用代码
YourUserID;Password=YourPassword;" Set rs=Server.CreateObject("ADODB.Recordset") ''创建Recordset对象rs.CursorLocation=adUseClient ''设定记录集指针属性''*设定一页内的记录总数,可根据需要进行调整 rs.PageSize=10 ''*设置查询语句 StrSQL="Select ID,姓名,住址,电话 from 通讯录 Order By ID" rs.Open StrSQL,conn,adOpenStatic,adLockReadOnly,adCmdText%><HTML><HEAD><title>分页示例</title><script language=javascript>//点击"[第一页]"时响应:function PageFirst(){ document.MyForm.CurrentPage.selectedIndex=0;document.MyForm.CurrentPage.onchange();}//点击"[上一页]"时响应:function PagePrior(){ document.MyForm.CurrentPage.selectedIndex--;document.MyForm.CurrentPage.onchange();}//点击"[下一页]"时响应:function PageNext(){ document.MyForm.CurrentPage.selectedIndex++;document.MyForm.CurrentPage.onchange(); }//点击"[最后一页]"时响应:function PageLast(){ document.MyForm.CurrentPage.selectedIndex=document.MyForm.CurrentPage.length-1;document.MyForm.CurrentPage.onchange();}//选择"第?页"时响应:function PageCurrent(){ //Pages.asp是本程序的文件名document.MyForm.action='Pages.asp?Page='+(document.MyForm.CurrentPage.selectedIndex+1)document.MyForm.submit();} </Script></HEAD><BODY bgcolor="#ffffcc" link="#008000" vlink="#008000" alink="#FF0000""> <%IF rs.Eof THENResponse.Write("<font size=2 color=#000080>[数据库中没有记录!]</font>")ELSE ''指定当前页码If Request("CurrentPage")="" Thenrs.AbsolutePage=1Elsers.AbsolutePage=CLng(Request("CurrentPage"))End If ''创建表单MyForm,方法为GetResponse.Write("<form method=Get name=MyForm>") Response.Write("<p align=center><font size=2 color=#008000>")''设置翻页超链接if rs.PageCount=1 then Response.Write("[第一页] [上一页] [下一页] [最后一页] ")else if rs.AbsolutePage=1 thenResponse.Write("[第一页] [上一页] ")Response.Write("[<a href=java script:PageNext()>下一页</a>] ") Response.Write("[<a href=java script:PageLast()>最后一页</a>] ") else if rs.AbsolutePage=rs.PageCount thenResponse.Write("[<a href=java script:PageFirst()>第一页</a>] ") Response.Write("[<a href=java script:PagePrior()>上一页</a>] ") Response.Write("[下一页] [最后一页] ")elseResponse.Write("[<a href=java script:PageFirst()>第一页</a>] ") Response.Write("[<a href=java script:PagePrior()>上一页</a>] ") Response.Write("[<a href=java script:PageNext()>下一页</a>] ") Response.Write("[<a href=java script:PageLast()>最后一页</a>] ") end ifend ifend if ''创建下拉列表框,用于选择浏览页码Response.Write("第<select size=1 name=CurrentPage onchange=PageCurrent()>") For i=1 to rs.PageCount if rs.AbsolutePage=i thenResponse.Write("<option selected>"&i&"</option>") ''当前页码elseResponse.Write
扩展:jsp常用标签 / jsp常用指令 / jsp的常用指令
jsp源代码 JSP常用代码
("<option>"&i&"</option>")end if Next Response.Write("</select>页/共"&rs.PageCount&"页 共"&rs.RecordCount&"条记录</font><p>") Response.Write("</form>") ''创建表格,用于显示Response.Write("<table align=center cellspacing=1 cellpadding=1 border=1") Response.Write(" bordercolor=#99CCFF bordercolordark=#b0e0e6 bordercolorlight=#000066>") Response.Write("<tr bgcolor=#ccccff bordercolor=#000066>") Set Columns=rs.Fields ''显示表头For i=0 to Columns.Count-1Response.Write("<td align=center width=200 height=13>")Response.Write("<font size=2><b>"&Columns(i).name&"</b></font></td>") NextResponse.Write("</tr>")''显示内容For i=1 to rs.PageSize Response.Write("<tr bgcolor=#99ccff bordercolor=#000066>") For j=0 to Columns.Count-1 Response.Write("<td><font size=2>"&Columns(j)&"</font></td>") NextResponse.Write("</tr>") rs.movenext if rs.EOF then exit for Next Response.Write("</table>") END IF%></BODY></HTML>
扩展:jsp常用标签 / jsp常用指令 / jsp的常用指令
五 : JSP网上书店开发完整实例(含完整源代码)
完整的简单jsp网上书店详细实例
计算机web编程jsp毕业论文、考试复习资料必备
其中包括的详细需求、业务分析、数据库、源代码
我们使用JSP和Java Bean来构建一个网上书店。(www.61k.com)介绍的例子可以分成两大部分,第一部分是普通程序,用于客户在网上选购图书,第二部分是管理程序,用于在服务器端处理客户的定单。客户端程序由以下几个部分构成: default.jsp:会员登录界面(首页);
checklogon.jsp:检测登录代码和密码是否一致,根据由JavaBean返回的结果显示不同的信息。
BuyerBean:会员的合法性检验所用的Bean;
booklist.jsp:给登录会员显示当前书店中可供选择的图书;
addcart.jsp:将所选的图书加入购物车;
shoppingcart.jsp:查看购物车的内容;
本例的数据库采用Access(.MDB数据库),对数据库的访问采用便于理解的JDBC-ODBC方式,在使用本例前先在本地数据库建立一个ODBC数据源:bookstore。
382
jsp源码 JSP网上书店开发完整实例(含完整源代码)
设置步骤如下:
(1)在开始->设置->控制面版(Win98、NT4.0)中选取“数据源(ODBC)”;在Win 2000 Professional和Server中分别位于“开始->设置->控制面版->管理工具”和“开始->程序->管理工具”下。(www.61k.com)
(2)启动“数据源(ODBC)”配置程序,界面如图15-1所示。
图15-1 ODBC数据源管理界面
(3)在图15-1中“系统DSN”选项下单击“添加”按钮,来添加一个系统的数据源(DSN),则出现如图15-2所示数据源驱动程序选择界面:
383
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-2 数据源驱动程序选择界面
(4)在图15-2中选择“Microsoft Access Driver (*.mdb)”单击“完成”加载Access数据库的驱动,则出现如图15-3所示数据库ODBC安装界面:
图15-3 数据库ODBC安装界面
(5)在图15-3中单击“选择(S)…”按钮,启动一个类似资源管理器的界面来选择数据库,如图15-4所示,在图15-4所示的界面中选择bookstore.mdb。[www.61k.com] 384
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-4 数据库选择界面
15.1 会员登录
做一个网上书店,在顾客开始购书之前,必须要记录用户的一些信息以便用户在不同的分类、不同的页面购书时,最后能够去收款台统一结帐,而且网上书店同时有许多人在选购图书,也要求对不同的顾客进行区分,我们可以要求顾客在购书之前进行注册成为会员,以后只用会员代码和密码即可登录。[www.61k.com]
为了便于说明现在的电子商务网站,由JSP做页面表现,由Java Bean做应用逻辑的结构,在本例中将会员登录程序分成两大部分:一、Java Bean用于对数据库的操作,验证用户名和密码是否正确;二、JSP页面部分,用于供用户会员代码和密码以及显示验证结果。
15.1.1 会员登录Java Bean
我们网上书店中的会员信息的库结构如图15-5所示:
385
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-5 会员信息库
其中memberID 是主键,用于区分不同的会员,新会员注册时只能使用没有被使用的用户代码。[www.61k.com)
在验证时我们只要使用验证用户的memberID和其pwd是否一致即可判断该用户是否合法,如果合法则其登录次数加1。
下面是用户验证部分的Java Bean的代码
清单15-1 BuyerBean.Java
/* *BuyerBean.Java 1.10.2001
*Copyright ? 2000, 2001 by cuug llp.
*本Bean中有两个set方法和两个get 方法:
*setMemberID()— 对BuyerBean中的memberID属性进行赋值;
*setPwd()—对BuyerBean中的 pwd 属性进行赋值;
*getLogontimes()— 取该会员登录的次数
*getMenberName()获得该会员的真实姓名,用于显示欢迎信息。
*main()方法用于将BEAN作为一个 Application进行测试时使用,正式发布时可以删除。
**/
package cuug;
import Java.sql.*;
public class BuyerBean {
private String memberID = null ; //会员ID
private String memberName = null; //会员姓名 private String pwd = null; //密码 private int logontimes = -1; //登录的次数 private static String strDBDriver = ―sun.jdbc.odbc.JdbcOdbcDriver‖; //JDBC驱动 386
jsp源码 JSP网上书店开发完整实例(含完整源代码)
private static String strDBUrl = ―jdbc:odbc:bookstore‖; //数据源 , private Connection conn =null; //连接 private ResultSet rs = null; //结果集 public BuyerBean (){ //加载JDBC-ODBC驱动 try { Class.forName(strDBDriver ); } //捕获异常 catch(Java.lang.ClassNotFoundException e){ System.err.println(―BuyerBean():‖ + e.getMessage()); } } //获得登录次数,登录的会员的名字也在该方法调用时获得 public int getLogontimes(){ String strSql = null; try{ conn = DriverManager.getConnection(strDBUrl); Statement stmt = conn.createStatement();
strSql = ―Select logonTimes,membername from buyerInfo where memberID = ?‖ + memberID + ―‘ and pwd =‘‖ + pwd + ―‘‖;
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
rs = stmt.executeQuery(strSql);
while (rs.next()){
// 登录的次数
logontimes = rs.getInt(―logonTimes‖); //会员姓名
memberName = rs.getString(―membername‖); } rs.close(); //如果是合法会员则将其登录次数加1 if (logontimes != -1 ) { strSql = ―Update buyerInfo set logonTimes = logonTimes +1 where memberID = ?‖ + memberID + ―‘‖; stmt.executeUpdate(strSql); } stmt.close(); 387
jsp源码 JSP网上书店开发完整实例(含完整源代码)
conn.close(); } //捕获异常 catch(SQLException e){ System.err.println(―BuyerBean.getLogontimes():‖ + e.getMessage()); } return logontimes ; } //设置memberID属性; public void setMemberID(String ID){ this.memberID = ID; } //设置pwd 属性 public void setPwd(String password){ this.pwd = password; } //获得该会员的真实姓名,必须在取该会员登录的次数之后才能被赋予正确的值 public String getMemberName(){ return memberName; } //测试Bean中的各个方法是否能够正常工作 public static void main(String args[]){ BuyerBean buyer = new BuyerBean(); buyer.setMemberID(―abcd‖); buyer.setPwd(―1234‖); System.out.println(buyer.getLogontimes()); System.out.println(buyer.getMemberName());
}
}
在BuyerBean中用了package cuug; 在发布到WEB SERVER时,可以用JAR(JDK中带的打包工具)把编译后的BuyerBean.class 打包成JAR文件在服务器的环境变量classpath中给予指定,或者在服务器classpath环境变量指定的目录下建一个cuug文件夹,把BuyerBean.class放到cuug目录下。[www.61k.com]
15.1.2 会员登录htm与JSP
会员登录要由两个部分来完成,第一个页面用于会员输入其ID和密码,当然首页还可以加一些广告等的其它信息,在本例中略过。
388
jsp源码 JSP网上书店开发完整实例(含完整源代码)
清单15-2 default.htm
<contentType=‖text/html;charset=gb2312‖>
<HTML>
<!—
Copyright ? 1999 cuug,liu.
?
<HEAD>
<TITLE>CUUG ON LINE BOOK STORE – MEMBER LOGIN</TITLE>
</HEAD>
<BODY bgcolor=‖white‖>
<H1 align=‖center‖>CUUG 网上书店</H1>
<H2 align=‖center‖>会员登录页</H2>
<P> </P>
<P> </P>
<CENTER>
<FORM METHOD=POST ACTION=‖checklogon.jsp‖>
<BR>
<font size=5 color=‖green‖>
请输入会员代号和密码: <br>
会员代码:<input TYPE=‖text‖ name=memberID > <BR>
密 码:<input TYPE=‖password‖ name=pwd > <BR>
<br> <INPUT TYPE=submit name=submit Value=‖登录‖>
</font>
</FORM>
</CENTER>
</BODY>
</HTML>
在本例中提供了一个文本框供用户输入会员代号和登录密码,其运行结果如图15-6所示,当会员输入其代码和密码后调用checklogon.jsp 来验证该网络用户是否是合法会员。[www.61k.com]
389
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-6 会员登录页
在checklogon.jsp 中接收从default.htm中由用户所填的会员代码和密码,把它传给BuyerBean,由BuyerBean判断该用户的会员代码和密码的正确性,若正确显示欢迎信息;若不正确,则提供一个重新登录的链接。[www.61k.com)
Checklogon.jsp的源代码如下:
清单15-3 checklogon.jsp
<!DOCTYPE HTML PUBLIC ―-//W3C//DTD HTML 4.0 Transitional//EN‖>
<%@ page language=‖Java‖ contentType=‖text/html;charset=GB2312‖%>
<jsp:useBean class=‖cuug.BuyerBean‖ id=‖buyer‖ scope=‖page‖></jsp:useBean>
<HTML>
<HEAD>
<META name=‖CHECKLOGON‖ >
<TITLE>
CUUG ON LINE BOOK STORE – MEMBER LOGIN
</TITLE>
</HEAD>
<BODY BGCOLOR=‖#FFFFFF‖>
<H1 align=‖center‖>CUUG 网上书店</H1>
<%
String memberID = request.getParameter(―memberID‖);
String pwd = request.getParameter(―pwd‖);
buyer.setMemberID(memberID);
buyer.setPwd(pwd);
%>
<% int logonTimes = buyer.getLogontimes() ;
if (logonTimes > 0){
390
jsp源码 JSP网上书店开发完整实例(含完整源代码)
session.putValue("memberID",memberID);
%>
<H2 align=‖center‖><%= buyer.getMemberName() %>欢迎你第
<%= logonTimes +1%>次来到CUUG网上书店</H2>
<H2 align=‖center‖><A href=‖booklist.jsp‖>进入书店</A></H2> <%
}
else{
%>
<H2 align=‖center‖>对不起,<%= memberID %>你的用户名和密码不一致</H2> <H2 align=‖center‖><A href=‖default.htm‖>重新登录</A></H2>
<%
}
%>
</BODY>
</HTML>
登录正确时的结果如图15-7所示,错误时的结果如图15-8所示。[www.61k.com]
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
图15-7 用户登录正确(会员abcd的真实姓名是cuug001)
391
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-8 用户登录错误
15.2 选书
会员登录之后,合法的用户将可以看到本书店中可供选择的图书,并且将他感兴趣的书放入“购物车”,在去“收银台”结帐之前,该用户可以放弃购买其购物车中的任何一本书。(www.61k.com]在此处我们用BookBean来获取图书的信息,在Booklist.jsp中显示这些书。
在会员选书部分,我们仍用Java Bean来操作数据库,用jsp来做页面表现。
15.2.1 选书Java Bean
图书信息的表结构如图15-9所示,为了便于说明,在本例中price也设置成了String型,在实际应用中应该设置成货币或浮点型:
图15-9 图书信息的表结构
其中,bookISBN是主键,区分不同的图书。Java Bean要根据不同的图书的bookISBN来获得其相应的书名、作者、出版社、价格、简介等信息。同时Java Bean还要有列出书店中所有图书的信息的功能。
清单15-4 BookBean..Java
392
jsp源码 JSP网上书店开发完整实例(含完整源代码)
/* *BuyerBean.Java 1.10.2001
*Copyright ? 2000, 2001 by cuug ,llp.
*本Bean中的各个方法的功能介绍如下:
*setBookISBN():设置图书的编号,同时根据编号更新相应的书名、作者、出版社、价格*和简介
*getBookList()— 取得书库中全部书的书名、出版社、价格、作者等信息;
*getBookISBN()— 取得当前图书的编号 ;
*getBookName()—取得当前图书的书名;
*getBookAuthor()—取得当前图书的作者;
*getPublisher()—取得当前图书的出版社信息;
*getPrice()—取得当前图书的价格; * getIntroduce()取得当前图书的简介信息。(www.61k.com] *main()方法用于将BEAN作为一个 Application进行测试时使用,正式发布时可以删除。
**/
package cuug;
import Java.sql.*;
public class BookBean {
private String bookISBN = null;
private String bookName = null;
//图书编号 //书名 //作者 //出版社 //简介 //价格 private String bookAuthor = null; private String publisher = null; private String introduce = null; private String price = null; private static String strDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; private static String strDBUrl = "jdbc:odbc:bookstore"; private Connection conn =null; private ResultSet rs = null; public BookBean(){ //加载驱动 try { Class.forName(strDBDriver ); } catch(Java.lang.ClassNotFoundException e){ System.err.println("BookBean ():" + e.getMessage()); 393
jsp源码 JSP网上书店开发完整实例(含完整源代码)
} } //取当前书库中全部图书信息 public ResultSet getBookList(){ String strSql = null; try{ //建立与数据库的连接 conn = DriverManager.getConnection(strDBUrl); Statement stmt = conn.createStatement(); strSql = "Select bookISBN,bookName,bookAuthor,publisher,price from bookInfo "; rs = stmt.executeQuery(strSql); } //捕获异常 catch(SQLException e){ System.err.println("BookBean.getBookList():" + e.getMessage()); } return rs ; } //根据图书的编号给图书的其他信息赋值 private void getBookInfo(String ISBN){ String strSql = null; bookName = null; bookAuthor = null; publisher = null; introduce = null; price = null; try{ //建立和数据库的连接 conn = DriverManager.getConnection(strDBUrl); Statement stmt = conn.createStatement(); strSql = "Select * from bookInfo where bookISBN = '" + ISBN + "'"; rs = stmt.executeQuery(strSql); while (rs.next()){ bookName = rs.getString("bookName"); bookAuthor = rs.getString("bookAuthor"); publisher = rs.getString("publisher"); introduce = rs.getString("introduce"); price = rs.getString("price"); 394
jsp源码 JSP网上书店开发完整实例(含完整源代码)
}
}
//捕获异常
catch(SQLException e){
System.err.println("BookBean.getBookList():" + e.getMessage()); }
}
//给图书的编号赋值,同时调用函数给图书的其他信息赋值 public void setBookISBN (String ISBN){
this.bookISBN = ISBN;
getBookInfo(bookISBN);
}
//取图书编号
public String getBookISBN (){
return bookISBN ;
}
//取书名
public String getBookName(){
return bookName ;
}
//取作者信息
public String getBookAuthor(){
return bookAuthor;
}
//取出版社信息
public String getPublisher(){
return publisher;
}
//取图书简介
public String getIntroduce(){
return introduce ;
}
//取图书价格
public String getPrice(){
return price;
}
//将Bean作为一个application进行测试用
public static void main(String args[]){
395
jsp源码 JSP网上书店开发完整实例(含完整源代码)
} } BookBean book = new BookBean (); book.setBookISBN("7-5053-5316-4"); System.out.println(book.getBookName()); System.out.println(book.getBookAuthor()); System.out.println(book.getPublisher()); System.out.println(book.getIntroduce()); System.out.println(book.getPrice()); try{ ResultSet tmpRS = book.getBookList(); while (tmpRS.next()){ System.out.println(tmpRS.getString("bookname")); } tmpRS.close(); } //捕获异常 catch(Exception e){ System.err.println("main()" + e.getMessage()); }
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
15.2.2 选书JSP
会员正确登录之后,即可进入书店进行选书,我们已经在checklogon.jsp中将会员的代码(memberID)放入系统的session中,为了保证用户只能从主页面登录进入书店,我们在给会员显示可供选择的图书之前,先检查session中是否有memberID的合法值,如果没有则提示用户先去登录。(www.61k.com)
清单15-5 booklist.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page language="Java" import="Java.sql.*" contentType="text/html;charset = gb2312"%>
<jsp:useBean class="cuug.BookBean" id="book" scope="page"></jsp:useBean>
<HTML>
<HEAD>
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>
CUUG Book Store On Line -member:<%= session.getValue("memberID") %>
396
jsp源码 JSP网上书店开发完整实例(含完整源代码)
</TITLE>
<SCRIPT language="JavaScript">
<!--
function openwin(str)
{ window.open("addcart.jsp?isbn="+str,
"shoppingcart","width=300,height=200,resizable=1,scrollbars=2");
return;
}
//-->
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1 align="center">CUUG 网上书店</H1>
<%
if (session.getValue("memberID") == null||"".equals(session.getValue("memberID"))){ %>
<H2 align="center">请先登录,然后再选书</H2>
<H2 align="center"><A href="default.htm">登录</A></H2>
<%
}
else{
%>
<table width="100%" border="1" cellspacing="0" bordercolor="#9999FF"> <tr>
<td><font color="#3333FF">书名</font></td>
<td><font color="#3333FF">作者</font></td>
<td><font color="#3333FF">出版社</font></td>
<td><font color="#3333FF">定价</font></td>
<td> </td>
</tr>
<%
ResultSet rs = book.getBookList();
while(rs.next()){
String ISBN = rs.getString("bookISBN");
%>
<tr>
<td><a href="bookinfo.jsp?isbn=
<%= ISBN%>"><%= rs.getString("bookName")%></A></td>
397
jsp源码 JSP网上书店开发完整实例(含完整源代码)
<td><%= rs.getString("bookAuthor")%></td>
<td><%= rs.getString("publisher")%></td>
<td><%= rs.getString("price")%></td>
<td><a href='Javascript:openwin("<%= ISBN %>")'>加入购物车</a></td> </tr>
<%
}
%>
</table>
<table align="center" border="0">
<tbody>
<tr>
<td><a
</font></a></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<%
}
%>
</BODY>
</HTML>
已经登录过的会员和没有登录过的会员进入该页面是的结构分别如图15-10和图15-11所示:正确登录的会员的会员代码在浏览器的标题栏显示为:member:“会员代码”。(www.61k.com) href="shoppingcart.jsp"><font color="#0000FF">查看购物车398
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-10 会员abcd正确登录
图15-11 会员未登录直接来选书
在本例中利用JavaScript语句定义了一个函数来将所调用另外的一个jsp来处理把书加入购物车的操作:
<SCRIPT language="JavaScript">
<!--
function openwin(str)
{ window.open("addcart.jsp?isbn="+str,
"shoppingcart","width=300,height=200,resizable=1,scrollbars=2");
return;
}
399
jsp源码 JSP网上书店开发完整实例(含完整源代码)
//-->
</SCRIPT>
该函数用于打开addcart.jsp并切将图书编号作为参数传给addcart.jsp。[www.61k.com]
addcart.jsp利用Cookie来保存所选购的图书信息,Cookie相当于一个购物车。为了与其他的Cookie变量区分,每个写入Cookie的图书编码前面都加上“ISBN”作为标志,向购物车中加入图书的代码如下:]
清单15-6 addcart.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page language="Java" contentType="text/html;charset=GB2312"%>
<%
/*Cookie信息处理*/
/*增加Cookie*/
if (request.getParameter("isbn")!=null)
{ Cookie cookie=new Cookie("ISBN"+request.getParameter("isbn"),"1");
cookie.setMaxAge(30*24*60*60);//设定Cookie有效期限30日
response.addCookie(cookie);
}
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
%>
<html>
<head>
<script language="Javascript">
function Timer(){setTimeout("self.close()",10000)}
</script>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>购物车——CUUG 网上订书系统</title>
</head>
<BODY onload="Timer()">
<table width=100%>
<tr><td align=center>图书已经成功放入购物车!</td></tr>
<tr><td align=center><A href="shoppingcart.jsp" target=resourcewindow>
<font class=font1 color=darkblue>
查看购物车SHOPPING CART</font></A></u></font></td></tr>
<tr><td align=center><a href="order.jsp" target=resourcewindow>
<font class=font1 color=darkblue>
提交定单 ORDER</font></a></u></font></td></tr>
<tr><td align=center>
<input type="button" value="继续购买" name="B3"
LANGUAGE="Javascript" onclick="window.close()"
400
jsp源码 JSP网上书店开发完整实例(含完整源代码)
style="border: #006699 solid 1px;background:#ccCCcc"></td>
</tr>
<tr><td align=center>
(此窗口将为您在10秒内自动关闭,您的商品已经安全地保存在购物车中。[www.61k.com)) </td></tr>
</table>
</BODY>
</html>
在addcart.jsp中利用JavaScript定义了一个函数Timer(),由它来控制该窗口的显示时间(<BODY onload="Timer()">)。继续购买部分也是由JavaScript定义的函数来控制关闭本窗口。其运行结果如图15-12所示。
图15-12 加入购物车
无论从图15-12还是图15-13所示的界面中,都提供了一个查看购物车的超链接,查看购物车的程序如下所示,它从Cookie中取出图书的编号,并将它传给BookBean,由BookBean来获得图书的详细资料。查看购物车的JSP代码shoppingcart.jsp代码如下:
清单15-7 shoppingcart.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page language="Java" contentType="text/html;charset=gb2312"%>
<jsp:useBean class="cuug.BookBean" id="bookinfo" scope="page"></jsp:useBean> <%
/*禁止使用浏览器Cache*/
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires",0);
%>
<HTML>
<HEAD>
401
jsp源码 JSP网上书店开发完整实例(含完整源代码)
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>
查看购物车 -member:<%= session.getValue("memberID") %>
</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1 align="center">CUUG 网上书店购物车</H1>
<FORM>
<TABLE border="1" width="100%" cellspacing="0" bordercolor="#9999FF"> <TR>
<TD width="82"><font color="#0000FF">ISBN</font></TD>
<TD width="258"><font color="#0000FF">书名</font></TD>
<TD width="62"><font color="#0000FF">单价</font></TD>
<TD width="36"><font color="#0000FF">数量</font></TD>
<TD width="43"><font color="#0000FF"> </font></TD>
</TR>
<%
/*读取购物车信息*/
Cookie[] cookies=request.getCookies(); for (int i=0;i<cookies.length;i++) { String isbn=cookies[i].getName(); String num=cookies[i].getValue(); if (isbn.startsWith("ISBN")&&isbn.length()==17) {
bookinfo.setBookISBN(isbn.substring(4,17));
%>
<TR>
<TD width="82"><%=bookinfo.getBookISBN()%></TD>
<TD width="258"><A href="bookinfo.jsp?isbn=<%=bookinfo.getBookISBN()%>">
<%= bookinfo.getBookName()%></A></TD>
<TD width="62"><%= bookinfo.getPrice()%></TD>
<TD width="36">
<INPUT size="5" type="text" maxlength="5" value="<%=num%>"
name="num" readonly>
</TD>
<TD width="43"><A href="delbook.jsp?isbn=<%= bookinfo.getBookISBN()%>">
删除</A></TD>
402
jsp源码 JSP网上书店开发完整实例(含完整源代码)
</TR>
<%
}
%>
</TABLE>
<BR>
<TABLE border="0" width="100%">
<TBODY>
<TR>
<TD width="19%"><A href="booklist.jsp">返回首页</A></TD>
<TD width="24%"><a href="emptycart.jsp">清空购物车</a></TD>
<TD width="27%">修改数量</TD>
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
<TD width="30%"><a href="order.jsp">填写/提交订单</a></TD>
</TR>
</TBODY>
</TABLE>
</FORM>
</BODY>
</HTML>
查看购物车的结果如图15-13所示:
}
图15-13 查看购物车内容 在查看购物车内容时提供了一个删除图书的功能,其目的是从购物车删除不想购买的图书,其源代码如下:
403
jsp源码 JSP网上书店开发完整实例(含完整源代码)
清单15-8 delbook.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page language="Java" contentType="text/html;charset=GB2312"%>
<%
/*Cookie信息处理*/
/*清除Cookie*/
if (request.getParameter("isbn")!=null)
{
Cookie cookie=new Cookie("ISBN"+request.getParameter("isbn"),"0"); cookie.setMaxAge(0);//设定Cookie立即失效
response.addCookie(cookie);
}
%>
<!--jsp:forward page="shoppingcart.jsp" /-->
<html>
<head>
<meta http-equiv="refresh" content="0;URL=shoppingcart.jsp">
</head>
<body >
删除图书 ......
</body> </html>
本例中利用jsp:forward动作在删除图书动作完成之后,将页面继续转向购物车页面。(www.61k.com)
即图15-14只显示一瞬间,浏览器的内容由成为购物车内容的页面。
图15-14 删除图书的页面
404
jsp源码 JSP网上书店开发完整实例(含完整源代码)
如果一个会员选了很多书,逐个删除比较麻烦。[www.61k.com]为了方便会员放弃选购的所有图书,重新开始选书,本例提供了清空购物车程序(emptycart.jsp),用于清空购物车,其原理与删除图书相同,只是把全部的Cookie中图书的有关的内容都清空了。其代码如下:
清单15-9 emptycart.jsp
<%@ page language="Java" contentType="text/html;charset=GB2312"%>
<%
/*清空Cookie(购物车)信息*/
Cookie[] cookies=request.getCookies();
for (int i=0;i<cookies.length;i++)
{
String isbn=cookies[i].getName();
if (isbn.startsWith("ISBN")&&isbn.length()==17)
{
Cookie c=new Cookie(isbn,"0");
c.setMaxAge(0);//设定Cookie立即失效
response.addCookie(c);
}
}
%>
<!--jsp:forward page="shoppingcart.jsp" /-->
<html>
<head>
<meta http-equiv="refresh" content="0;URL=shoppingcart.jsp">
</head>
<body >
清空购物车......
</body>
</html>
405
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-15 清空购物车的页面
从图书选择页面和购物车页面,点图书名称,都可以查看图书的详细信息,查看图书详细信息的jsp仍用BookBean来获取图书的详细信息,只是在该页中可以看到更加详细的信息:
清单15-10 bookinfo.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page language="Java" contentType="text/html;charset=gb2312"%>
<jsp:useBean class="cuug.BookBean" id="bookinfo" scope="page"></jsp:useBean> <HTML>
<HEAD>
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>
图书信息
</TITLE>
<SCRIPT language="JavaScript">
<!--
function openwin(str)
{ window.open("addcart.jsp?isbn="+str,
"shoppingcart","width=300,height=200,resizable=1,scrollbars=2");
return;
}
//-->
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<FORM>
406
jsp源码 JSP网上书店开发完整实例(含完整源代码)
<%
/*读取购物车信息*/
if (request.getParameter("isbn")!=null)
{
String isbn = request.getParameter("isbn");
bookinfo.setBookISBN(isbn);
%>
<TABLE border="0" width="100%">
<TBODY>
<TR>
<TD width="116"><font color="#6600FF">ISBN</font></TD> <TD width="349"><font color="#6600FF">
<%= bookinfo.getBookISBN()%></font></TD>
</TR>
<TR>
<TD width="116"><font color="#6600FF">书名</font></TD> <TD width="349"><font color="#6600FF">
<%= bookinfo.getBookName()%></font></TD>
</TR>
<TR>
<TD width="116"><font color="#6600FF">出版社</font></TD> <TD width="349"><font color="#6600FF">
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
<%= bookinfo.getPublisher()%></font></TD>
</TR>
<TR>
<TD width="116"><font color="#6600FF">作者/译者</font></TD> <TD width="349"><font color="#6600FF">
<%= bookinfo.getBookAuthor()%></font></TD>
</TR>
<TR>
<TD width="116"><font color="#6600FF">图书价格</font></TD> <TD width="349"><font color="#6600FF">
<%= bookinfo.getPrice()%></font></TD>
</TR>
<TR>
<TD height="18" colspan="3">
<div align="center"><font color="#6600FF">内容简介</font></div> </TD>
407
jsp源码 JSP网上书店开发完整实例(含完整源代码)
</TR>
<TR>
<TD height="18" colspan="3">
<div align="right"> <br>
<TEXTAREA rows="10" cols="60" readonly name="content">
<%= bookinfo.getIntroduce()%></TEXTAREA>
</div>
</TD>
</TR>
</TBODY>
</TABLE>
<%
}
else
{ out.println("没有该图书数据");
}
%>
</FORM>
<TABLE align="center" border="0">
<TBODY>
<TR>
<TD><a href='Javascript:openwin("<%=request.getParameter("isbn")%>")'>加入购物车</a></TD>
<TD><A href="shoppingcart.jsp">查看购物车</A></TD>
<TD><A href="booklist.jsp">返回首页</A></TD>
<TD></TD>
</TR>
</TBODY>
</TABLE>
</BODY>
</HTML>
其运行结果如图15-16所示。[www.61k.com]
408
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-16 图书详细信息
15.3 定单提交及查询
用户一旦确定购物车中所选的图书都是其所要购买的,就要到去提交其定单,以便书店按照相应的方式进行处理。[www.61k.com)而且,为方便用户是否已经提交定单,及定单的状态,本例提供了定单查询功能。在此处我们用OrderBean来将定单提交到数据库中,在order.jsp中显示并提交定单信息,queryorder.jsp来查询定单。
在会员选书部分,我们仍用Java Bean来操作数据库,用jsp来做页面表现。
15.3.1 定单提交Java Bean
为了减少数据冗余,定单信息由两张表来记录其信息:orderInfo,记录定单的有关公用信息,orderdetail,记录该定单包含哪些书籍及数量,表结构分别如下:
图15-17 定单信息表结构
409
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-18 定单详细
所有的对数据库的操作都由JavaBean来完成,其代码如下: 清单15-11 OrderBean.Java
package cuug;
import Java.sql.*;
public class OrderBean {
private static String strDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; private static String strDBUrl = "jdbc:odbc:bookstore";
private Connection conn =null;
private ResultSet rs = null;
private Java.lang.String bookinfo = null;
private Java.lang.String oderprice = null;
private Java.lang.String orderDate = null;
private Java.lang.String orderID = null;
private Java.lang.String orderRem = null;
private Java.lang.String receiverAddress = null;
private Java.lang.String receiverName = null;
private Java.lang.String receiverZip = null;
private Java.lang.String userID = null;
public OrderBean(){
try {
Class.forName(strDBDriver );
} catch(Java.lang.ClassNotFoundException e){ System.err.println("OrderBean ():" + e.getMessage()); }
}
public static void main(String args[]){
410
jsp源码 JSP网上书店开发完整实例(含完整源代码)
}
/**
* 返回定单的总价。(www.61k.com]
* @return Java.lang.String
*/
public Java.lang.String getOderprice() { return oderprice;
}
/**
*返回定单的日期 。
* @return Java.lang.String
*/
public Java.lang.String getOrderDate() {
orderDate = new Java.util.Date().toString(); return orderDate;
}
/**
* 返回定单的ID号。
* @return Java.lang.String
*/
public Java.lang.String getOrderID() { return orderID;
}
/**
* 返回定单的备注信息。
* @return Java.lang.String
*/
public Java.lang.String getOrderRem() { return orderRem;
}
/**
411
jsp源码 JSP网上书店开发完整实例(含完整源代码)
* 返回接收者的地址
* @return Java.lang.String
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
*/
public Java.lang.String getReceiverAddress() {
}
return receiverAddress;
/**
* 返回接收者的姓名。[www.61k.com]
* @return Java.lang.String
*/
public Java.lang.String getReceiverName() {
return receiverName;
}
/**
* 返回接收者的邮政编码。
* @return Java.lang.String
*/
public Java.lang.String getReceiverZip() {
return receiverZip;
}
/**
* 获得用户ID。
* @return Java.lang.String
*/
public Java.lang.String getUserID() {
}
return userID;
/**
* 给图书信息赋值。
* @param newBooks Java.util.Properties
*/
public void setBookinfo(Java.lang.String newBookinfo) { bookinfo = newBookinfo;
createNewOrder();
412
jsp源码 JSP网上书店开发完整实例(含完整源代码)
int fromIndex = 0;
int tmpIndex = 0;
int tmpEnd = 0;
String strSql = null;
try{
conn = DriverManager.getConnection(strDBUrl);
Statement stmt = conn.createStatement();
while(bookinfo.indexof(';',fromIndex) != -1 ){
tmpEnd = bookinfo.indexOf(';',fromIndex);
tmpIndex = bookinfo.lastIndexof('=',tmpEnd);
strSql = "insert into orderdetail (orderID ,bookISBN ,bookcount)" + " values( '" getOrderID()
+ "', '" + bookinfo.substring(fromIndex ,tmpIndex) + "', "
+ bookinfo.substring(tmpIndex+1 ,tmpEnd) + " )" ; stmt.executeUpdate(strSql);
fromIndex = tmpEnd + 1;
}
stmt.close();
conn.close();
}
catch(SQLException e){
System.err.println("BuyerBean.getLogontimes():" + e.getMessage()); }
}
/**
*给定单的总价赋值。(www.61k.com]
* @param newOderprice Java.lang.String
*/
public void setOderprice(Java.lang.String newOderprice) {
oderprice = newOderprice;
}
/**
* 给定单的备注赋值。
* @param newOrderRem Java.lang.String
*/
public void setOrderRem(Java.lang.String newOrderRem) {
413
jsp源码 JSP网上书店开发完整实例(含完整源代码)
orderRem = newOrderRem;
}
/**
* 给接收者的地址赋值。(www.61k.com]
* @param newReceiverAddress Java.lang.String
*/
public void setReceiverAddress(Java.lang.String newReceiverAddress) { receiverAddress = newReceiverAddress;
}
/**
* 给接收者的姓名赋值。
* @param newReceiverName Java.lang.String
*/
public void setReceiverName(Java.lang.String newReceiverName) { receiverName = newReceiverName;
}
/**
* 给接收者的邮政编码代码赋值。
* @param newReceiverZip Java.lang.String
*/
public void setReceiverZip(Java.lang.String newReceiverZip) { receiverZip = newReceiverZip;
}
/**
* 给用户代码赋值。
* @param newUserID Java.lang.String
*/
public void setUserID(Java.lang.String newUserID) {
}
userID = newUserID;
/**
* 创建一个新定单
*/
private void createNewOrder() {
414
jsp源码 JSP网上书店开发完整实例(含完整源代码)
String strSql = null; try{ conn = DriverManager.getConnection(strDBUrl); Statement stmt = conn.createStatement(); strSql = "insert into orderInfo (userID,receiverName, receiverAddress,receiverZip,orderRem,orderPrice,Orderdate)" + " values( '" getUserID() + "', '" + getReceiverName() + "', '" + getReceiverAddress() + "', '" + getReceiverZip() + "', '" + getOrderRem() + "', " + getOrderPrice() + " ,'" getOrderDate() + "')" ; stmt.executeUpdate(strSql); strSql = "select max(OrderID) from orderInfo where userID = '" getUserID()
+ "' and receiverName = '" + getReceiverName()
+ "' and receiverAddress = '" + getReceiverAddress()
+"' and receiverZip = '" + getReceiverZip()
+"' and orderRem = '" + getOrderRem()
+ "' and orderPrice = " + getOrderPrice()
+" and Orderdate = '" getOrderDate() + "'" ;
orderID = 0;
rs = stmt.executeQuery(strSql);
while (rs.next()){
orderID = rs.getString("OrderID");
}
rs.close();
stmt.close();
conn.close();
}
catch(SQLException e){
System.err.println("BuyerBean.getLogontimes():" + e.getMessage());
}
}
}
在本Bean中,如果一张定单中有多种书籍,可以以“BOOKISBN = BOOKCOUNT;BOOKISBN = BOOKCOUNT;”的形式组成字符串,来向JAVABEAN中的bookinfo赋值。[www.61k.com)在赋值后,Bean内部完成创建定单,并将各个图书信息拆分,提交定单的详细信息。
415
jsp源码 JSP网上书店开发完整实例(含完整源代码)
15.3.2 定单提交JSP
用jsp页面来显示用户所选的图书的信息,并提供一个提交按纽,为便于程序的管理,我们将显示和处理结果放在一个JSP中,其代码如下:
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
清单15-12 order.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ page language="Java" contentType="text/html;charset=GB2312"%>
<jsp:useBean class="cuug.BookBean" id="bookinfo" scope="page"></jsp:useBean> <jsp:useBean class="cuug.OrderBean" id="orderBean" scope="page"></jsp:useBean> <%
/*禁止使用浏览器Cache,网页立即失效*/
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires",0);
%>
<HTML>
<HEAD>
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>
填写订单
</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<%
if ("send".equals(request.getParameter("send")))
{
orderBean.setUserID(session.getValue("memberID"));
String str=request.getParameter("receivername");
orderBean.setReceiverName(str==null?"":str);
str=request.getParameter("orderprice");
orderBean.Oderprice(Java.lang.Float.valueOf(str==null?"0":str).floatValue());
str=request.getParameter("address");
orderBean.setReceiverAddress(str==null?"":str);
str=request.getParameter("postcode");
orderBean.setReceiverZip(str==null?"":str);
str=request.getParameter("bookinfo");
orderBean.setBookinfo(str==null?"":str);
str=request.getParameter("memo");
416
jsp源码 JSP网上书店开发完整实例(含完整源代码)
orderBean.setMemo(str==null?"":str);
int orderID=orderBean.getOrderID();
if (orderID>0)
{ /*清空Cookie(购物车)信息*/
Cookie[] cookies=request.getCookies();
for (int i=0;i<cookies.length;i++)
{ String isbn=cookies[i].getName();
if (isbn.startsWith("ISBN")&&isbn.length()==17)
{ Cookie c=new Cookie(isbn,"0");
c.setMaxAge(0);//设定Cookie立即失效
response.addCookie(c);
}
}
%>
<p align="center">订购成功!</p>
<p align="center"> 订单号:<%=orderID%></p>
<p align="center"><a href="booklist.jsp">返回首页</a></p>
<%
}
else
{
out.print("订购失败\n");
}
}
else
{ float price=0;
String bookInfo="";
%>
<FORM method="post" name="frm">
<TABLE border="1" width="100%" cellspacing="0" bordercolor="#9999FF"> <TR>
<TD width="90">ISBN</TD>
<TD width="269">书名</TD>
<TD width="50">单价</TD>
417
jsp源码 JSP网上书店开发完整实例(含完整源代码)
<TD width="75">数量</TD>
<TD width="48">价格 </TD>
</TR>
<% /*读取购物车信息*/
Cookie[] cookies=request.getCookies();
for (int i=0;i<cookies.length;i++)
{ String isbn=cookies[i].getName();
String num=cookies[i].getValue(); if (isbn.startsWith("ISBN")&&isbn.length()==17) {
bookinfo.setBookISBN(isbn.substring(4,17));
Float bookPrice = new Float(bookinfo.getPrice());
%>
<TR>
<TD width="90"><%= bookinfo.getBookISBN()%></TD>
<TD width="269"><A href="bookinfo.jsp?isbn=<%= bookinfo.getBookISBN()%>"><%= bookinfo.getBookName()%></A></TD>
<TD width="50"><%= bookPrice%></TD>
<TD width="75">
<INPUT size="5" type="text" maxlength="5" value="<%= num%>" name="num" readonly></TD>
<TD width="48"><%= bookPrice.floatValue() * Java.lang.Integer.parseInt(num)%></TD>
</TR>
<%
} price += bookPrice.floatValue()*Java.lang.Integer.parseInt(num); bookInfo += bookinfo.getBookISBN()+"="+num+";";
}
%>
</TABLE>
<p> </p>
<table width="100%" border="0">
<tr>
<td width="34%"> </td>
418
jsp源码 JSP网上书店开发完整实例(含完整源代码)
<td width="41%">
<div align="center"><a href="shoppingcart.jsp">修改图书订单</a></div> </td>
<td width="25%"> </td>
</tr>
</table>
<p><font color="#0000FF">如以上信息无误,请填写以下信息并按提交按钮提交订单,完成网上订书:</font></p>
<table width="100%" border="0">
<tr>
<td width="17%"><font color="#0000FF">收书人姓名</font></td>
<td width="83%">
<input type="text" name="receivername" size="10" maxlength="10"> </td>
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
</tr>
<tr>
<td width="17%"><font color="#0000FF">订单总金额</font></td>
<td width="83%">
<input type="text" name="orderprice" size="10" value="<%=price%>" readonly> </td>
</tr>
<tr>
<td width="17%"><font color="#0000FF">发送地址</font></td>
<td width="83%">
<input type="text" name="address" size="60" maxlength="60">
</td>
</tr>
<tr>
<td width="17%"><font color="#0000FF">邮编</font></td>
<td width="83%">
<input type="text" name="postcode" size="6" maxlength="6">
</td>
</tr>
<tr>
<td width="17%"><font color="#0000FF">备注</font></td>
<td width="83%">
<textarea name="memo" cols="60" rows="6"></textarea>
</td>
419
jsp源码 JSP网上书店开发完整实例(含完整源代码)
</tr>
<tr>
<td width="17%"><font color="#0000FF"></font></td>
<td width="83%">
<input type="submit" name="Submit" value="提交订单">
<input type="hidden" name="send" value="send">
<input type="hidden" name="bookInfo" value="<%= bookInfo%>">
</td>
</tr>
</table>
</FORM>
<%
}
%>
</BODY>
</HTML>
在本JSP中将图书信息按照“BOOKISBN = BOOKCOUNT;BOOKISBN = BOOKCOUNT;”的形式组成字符串,用来向JAVABEAN中的bookinfo赋值,并根据JSP的处理结果进行响应的处理:如果定单被正确处理则,显示定单号并清空cookie(购物车)信息,如果定单未被正确提交,则显示出错信息。[www.61k.com]运行结果如图15-19所示,定单正确提交后的结果如图15-20所示,定单未被正确提交的结果如图15-21所示。
图15-19 定单提交信息
420
jsp源码 JSP网上书店开发完整实例(含完整源代码)
图15-20 定单正确提交
图15-21 定单未正确提交
小结:
本文提供的是一个简单的网上书店的例子,本文提供的例子中尚有许多可以改进的地方。[www.61k.com]例如,文中数据库表orderinfo中提供了handled字段,在对定单进行处理发出书之后,可对该字段进行设置,将其值设成非0值,另增加一个供用户对定单进行查询的JSP页面。对定单的处理程序可用JSP,也可以用传统MIS来实现。希望读者对本例进行进一步的完善。
421
扩展:深夜书店2免费完整版 / yii2 rbac 完整实例 / vue实例完整项目源码
本文标题:jsp源代码-JSP项目源代码导入61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1