1.
什么是
JSP
:
JSP
简单来说就是在一个网页中利用
<%%>
来嵌套
JAVA
程序片。例如:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY >
<%
out.println("
这是一个
JSP
页面。
");
%>
</BODY>
<HTML>
2. JSP
运行机制:
JSP
把静态页面交割客户的浏览器负责显示,动态部分(
java
程序片)由服务器运行,把结果交给浏览器显示,每个用户分配一个线程。
在执行
JSP
文件时,服务器应用程序会自动将
JSP
文件转换为
Servlet
文件(即
java
文件),然后加以编译成为可执行的
Class
(字节码文件),所以
JSP
在第一次执行的时候没有直接用
Servlet
快,但
JSP
几乎可以实现
Servlet
的所有功能,其优点是比
Servlet
更易维护,利用
JSP+JavaBean
的模式完全可以实现动态和静态的分离,大大提高程序可读性,而且一般网站第一运行往往是在测试阶段,之后当客户访问时已经是转换完的
Servlet
文件了,因此
JSP
比
Servlet
更具优点,另外
JSP
也可以很容易的和
Servlet
结合。
3. JSP
语法:
3.1 JSP
的结构:
一个
JSP
文件一般是由五部分组成:
<!--[if !supportLists]-->(1) <!--[endif]-->普通的HTML标记符。
<!--[if !supportLists]-->(2) <!--[endif]-->JSP标签。
<!--[if !supportLists]-->(3) <!--[endif]-->变量和方法声明。
<!--[if !supportLists]-->(4) <!--[endif]-->Java程序片。
<!--[if !supportLists]-->(5) <!--[endif]-->Java表达式。
其中后三条被成为
JSP
的脚本部分。
3.2 JSP
的语法:
3.2.1
变量的声明:
(
1
)在“
<%!
和
%>
”之间声明变量或方法。其中变量和方法可以是
Java
中的任何变量。其作用范围是整个
JSP
文件。当多个用户访问这个页面时,他们将共享这些变量,任何对变量的修改都会直接影响到其他用户。这些变量只有服务器关闭时才会释放。
例如这个例子就是利用此方法声明的变量,实现了访问网页计数功能:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY BGCOLOR=cyan><FONT size=1>
<%!int i=0;
%>
<%i++;
%>
<P>
您是第
<%=i%>
个访问本站的客户。
</BODY>
</HTML>
另外,如果用这个方法来声明方法,则其中方法是在整个
JSP
页面有效,但在该方法中声明的变量为局部的,只在该法中有效调用完毕时即释放。而用户往往会调用方法来修改某个变量或直接修改变量,所以,在应用这种方法声明变量时当你要试图修改某个数据,尽量加上关键字
synchronized
以实现同步锁定,防止同时修改变量。
利用该方法声明的类,也是在
JSP
页面内有效,可以在其范围内使用该类的对象,具体方法和前面的一样。
(
2
)在“
<%
和
%>
”之间声明变量和方法。为局部变量和方法,可以简单的理解为非共享变量,即每个客户都有自己的变量,他们的操作不会影响到其他人,程序执行完内存自动释放。大多的
Java
程序片是放在这里的。
(
3
)笔者的简易,尽量不要在
JSP
中过多使用前两种方式来进行动态操作,应该尽量使用
JavaBean
来操作,尽量做到静态页面和动态页面相分离,这也是为什么要用
JSP
替代
Servlet
的优点。
3.2.2
JSP
中的注释:
(1) HTML
注释:
”<!--
和
-->”
之间的为注释。
(2)JSP
注释:在
”<%--
和
--%>”
之间的为注释。
3.2.3
JSP
中的指令标签:
3.2.3
.1 page
指令标签
(1)page
指令用来指定整个页面的一些属性和这些属性的值。
指令格式
: <%@ page
属性
1=”
属性
1
的值
”
属性
2=”
属性
2
的值
”…%>
例如:
<%@ page contentType="text/html; charset=gb2312" %>
可以指定页面显示汉语。
(2) import
指令可以指定多个值,为导入
JAVA
类库。
例如:
<%@ import="java.sql.*",”java.awt.*” %>
(3) language
属性
:
默认为
JAVA
,目前也只支持
JAVA
例如:
<%@ page language=”java”%>
(4) contentType
属性:用来指定
JSP
页面的编码,默认属性为
”text/html;
charset=ISO-8859-1”
(5) session
用于设置是否要使用内置的
session
对象。默认为
true
。
(6) buffer
内置输出流对象负责将服务器的某些信息或运行结果发送到客户端显示可以不设置,默认为
8kb
。
(7)
指定
out
的缓冲区被填满时,缓冲区是否自动判断。默认为
true
。
(8) isThreadSafe
属性用来设置页面是否可多线程访问。默认为
true
。
(9) info
属性为
JSP
页面准备一个字符串,属性值为字符串。
例:
<%@ page info=”we are students”%>
可用
getServletInfo()
;获得。
一个综合应用:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
其中
errorPage
是发生错误后应该转到的异常处理的页面
3.2.3
.2 include
指令标签
(1)<%@ include file=”filename”%>
要注意在引用的文件中含有类似
page
的
contentType
属性设置,则此文件不要设置,否则会报错。
(2)
可作为动作标签
,
其格式为
:<jsp:include page=”fileName”/>
功能:可动态包含一个文件,即在执行时才对这个文件进行包含,并且可以随时修改包含文件,改后相应结果即发生变化,而静态的引用只能重新编译。
3.2.3
.3
其他标签
:
(1) param
标签:以“名字-值”对应的形式为其他标签提供附加信息。这个标签与
jsp:include
、
jsp:forward
、
jsp:plugin
标签一起使用。
格式为:
<jsp:param name=”
名字
”, value=”
指定给
param
的值
”>
该标签主要功能是和
include
标签连用,可以达到给加载文件传递参数的作用。
例:
tom.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<% String str=request.getParameter("computer"); //
获取值。
int n=Integer.parseInt(str);
int sum=0;
for(int i=1;i<=n;i++)
{ sum=sum+i;
}
%>
<P>
从
1
到
<%=n%>
的连续和是:
<BR>
<%=sum%>
</BODY>
</HTML>
Mc1035.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<P>
动态加载文件并传递参数效果:
<jsp:include page="tom.jsp">
<jsp:param name="computer" value="300" />
</jsp:include>
</BODY>
</HTML>
这样在引用
tom.jsp
的同时就把参数
computer
的值传了过去,要注意名称要与
tom.jsp
里的
request.getParameter("computer");
的一直。
(2)plugin
动作标签
:
用来保证客户可以执行
applet
小程序。该标签只是
JSP
页面加载
Java plugin
,该插件负责客户下载,并使用该插件来运行
Java applet
。
例:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<jsp:plugin type="applet" code="B.class" jreversion="1.2" width="200" height="260" >
<jsp:fallback>
Plugin tag OBJECT or EMBED not supported by browser.
</jsp:fallback>
</jsp:plugin>
</body></html>
当客户访问上述
JSP
页面时,将导致登陆
Sun
公司下载
Java plugin
。并执行
B.class
。
笔者认为现在很少有人用
applet
程序了,大多用
JS
3.2.3
.4 useBean
动作标签
这个标签是笔者认为最重要的标签,所以放在了最后。
首先介绍
Java Bean
的特点:
可以实现代码服用,易编写,易维护,易使用,可以在任何有
JVM
的机器上使用而不许重新编译。
1.
编写
JavaBean
的规则:
(1)
如果类的成员变量的名字是
xxx
,那么为了更改或获取成员变量的值在类中可以定义两个方法:
getXxx()
来获取属性和
setXxx
()来设置属性,要注意大小写。
(2)
对于
boolean
类型的成员变量,允许使用
is
来代替
get
和
set
。
(3)
类中的方法属性必须是
Public
的。
(4)
类中如果有构造方法,那么这个构造方法也是
public
的,并且是无参数的。
例:一个简单
bean
Circle.java
:
import java.io.*;
public class Circle
{ int radius;
public Circle()
{ radius=1;
}
public int getRadius()
{ return radius;
}
public void setRadius(int newRadius)
{radius=newRadius;
}
public double circleArea()
{return Math.PI*radius*radius;
}
public double circlLength()
{return 2.0*Math.PI*radius;
}
}
2.
使用
beans
使用
beans
时就要用到
useBean
标签了,其格式为:
<jsp:useBean id=-“
给
bean
起的名字
”class=”
创建
beans
的类
”scope=”bean
有效范围
”>
</jsp:useBean>
其中
scope
的属性值需要注意一下:
Scope
取
page
:则即当客户使用
bean
时为每个客户占用不同的空间,简单说
bean
是不共享的,用户不能互相干涉。当用户离开该访问页时无效。
Scope
取
session
:即该
bean
是共享的,所有用户访问时将对同一个
bean
操作,会互相干涉。当客户关闭浏览器时无效。
Scope
取
request
:只当用户访问时有效,且不是共享的。当客户请求时作出相信,相应完后无效。
Scope
取
application
:共享
bean
,当服务器关闭时该
bean
无效。
最后,若要使用
bean
还必须导入其类,可用命令:
<@page import=”className”>
例:
Circle
为一个类文件名。
useBeans.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="Circle"%>
<HTML>
<BODY bgcolor=cyan><Font size=1>
<jsp:useBean id="girl" class="Circle" scope="page" >
</jsp:useBean>
<%--
通过上述
JSP
标签,客户获得了一个作用域是
page
,名字是
girl
的
beans --%>
<% //
设置圆的半径:
girl.setRadius(100);
%>
<P>
圆的半径是:
<%=girl.getRadius()%>
<P>
圆的周长是:
<%=girl.circlLength()%>
<P>
圆的面积是:
<%=girl.circleArea()%>
</BODY>
</HTML>
3
获取和修改
beans
的属性
getProperty
和
setProperty
可完成该命令。
格式分别为:
<jsp:getProperty name=”bean
的名字
” property=”beans
的属性
” />
<jsp:setProperty name=”bean
的名字
” property=”beans
的属性
” />
一个综合的例子
:
student.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="Student"%>
<HTML>
<BODY bgcolor=cyan><Font size=1>
<jsp:useBean id="zhang" class="Student" scope="page" >
</jsp:useBean>
<jsp:setProperty name= "zhang" property="name" value="
张小三
" />
<P>
名字是:
<jsp:getProperty name= "zhang" property="name" />
<jsp:setProperty name= "zhang" property="number" value="1999001" />
<P>
学号是:
<jsp:getProperty name= "zhang" property="number" />
<% double height=1.70;
%>
<jsp:setProperty name= "zhang" property="height" value="<%=height+0.05%>" />
<P>
身高是:
<jsp:getProperty name= "zhang" property="height" />
米
<jsp:setProperty name= "zhang" property="weight" value="67.65" />
<P>
体重是:
<jsp:getProperty name= "zhang" property="weight" />
公斤
</FONT>
</BODY>
</HTML>
4.JSP
内置对象
4.1 request
对象
该对象封装了用户提交的信息,主要时表单,表单格式和
HTML
的一样,用法:
(1) Request.getParameter(String s);
其中
s
为变量名。
注意
JSP
的编码问题,大多数可用如下指令实现:
String str=request.getParameter
(“
game
”);
Byte b[]=str.getBytes(“ISO-8859-1”);
Str=new String(b);
(2) getProtocol()
获取客户向服务器提交信息所使用的通信协议。
(3) getServletPath()
获取客户请求的
JSP
页面文件的目录
(4) getContentLength()
获取提交的整个信息长度。
(5) geMethod()
获取客户提交信息的方式,如
post
(6) getHeader(String s)
获取
HTTP
头文件中有参数
s
指定的头名字的值
(7) getHeaderNames()
获取头名字的一个枚举。
(8) getHeaders(String s)
获取头文件中指定头名字的全部值的一个枚举。
(9) getRemotoAddr()
获取客户
IP
地址。
(10)getRemoteHost()
获取客户机的名称(如果获取不到,就获取
IP
地址)
(11)getServerName()
获取服务器的名称
(12)getServerPort()
获取服务器端口号
(13)getParameterNames()
获取客户提交的信息体部分中
name
参数值的之歌枚举
.
Example3_4.jsp:
<HTML>
<BODY bgcolor=cyan><FONT size=1>
<%@ page contentType="text/html;charset=GB2312" %>
<FORM action="tree2.jsp" method=post name=form>
<INPUT type="text" name="boy">
<INPUT TYPE="submit" value="enter" name="submit">
</FORM>
</FONT>
</BODY>
</HTML>
tree2.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.util.*" %>
<MHML>
<BODY bgcolor=cyan>
<Font size=1 >
<BR>
客户使用的协议是
:
<% String protocol=request.getProtocol();
out.println(protocol);
%>
<BR>
获取接受客户提交信息的页面:
<% String path=request.getServletPath();
out.println(path);
%>
<BR>
接受客户提交信息的长度:
<% int length=request.getContentLength();
out.println(length);
%>
<BR>
客户提交信息的方式:
<% String method=request.getMethod();
out.println(method);
%>
<BR>
获取
HTTP
头文件中
User-Agent
的值::
<% String header1=request.getHeader("User-Agent");
out.println(header1);
%>
<BR>
获取
HTTP
头文件中
accept
的值:
<% String header2=request.getHeader("accept");
out.println(header2);
%>
<BR>
获取
HTTP
头文件中
Host
的值:
<% String header3=request.getHeader("Host");
out.println(header3);
%>
<BR>
获取
HTTP
头文件中
accept-encoding
的值:
<% String header4=request.getHeader("accept-encoding");
out.println(header4);
%>
<BR>
获取客户的
IP
地址:
<% String IP=request.getRemoteAddr();
out.println(IP);
%>
<BR>
获取客户机的名称:
<% String clientName=request.getRemoteHost();
out.println(clientName);
%>
<BR>
获取服务器的名称:
<% String serverName=request.getServerName();
out.println(serverName);
%>
<BR>
获取服务器的端口号:
<% int serverPort=request.getServerPort();
out.println(serverPort);
%>
<BR>
获取客户端提交的所有参数的名字:
<% Enumeration enum=request.getParameterNames();
while(enum.hasMoreElements())
{String s=(String)enum.nextElement();
out.println(s);
}
%>
<BR>
获取头名字的一个枚举:
<% Enumeration enum_headed=request.getHeaderNames();
while(enum_headed.hasMoreElements())
{String s=(String)enum_headed.nextElement();
out.println(s);
}
%>
<BR>
获取头文件中指定头名字的全部值的一个枚举:
<% Enumeration enum_headedValues=request.getHeaders("cookie");
while(enum_headedValues.hasMoreElements())
{String s=(String)enum_headedValues.nextElement();
out.println(s);
}
%>
<BR>
<P>
文本框
text
提交的信息:
<%String str=request.getParameter("boy");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
%>
<BR>
<%=str%>
<BR>
按钮的名字:
<%String buttonName=request.getParameter("submit");
byte c[]=buttonName.getBytes("ISO-8859-1");
buttonName=new String(c);
%>
<BR>
<%=buttonName%>
</Font>
</BODY>
</HTML>
4.2 response
对象
我认为最主要的属性的是重定向
:
response.encodeRedirectURL(“
页面
”);
由于篇幅关系,其他的就不介绍了。
4.3 session
对象
(1)public void setAttribute(String key,Object obj)
Session
对象类似与散列表,可以俺
key
添加值
(2)public Object getAttibute(String key)
获取
session
对象对应
key
的值
(3)public Enumeration getAttributeNames()
获取枚举对象遍历
session
,可以用
nextElements
()方法。
(4)public long getCreationTime
()
Session
对象调用该方法可以获取创建的时间
(5)public long getLastAccessedTime()
获取当前
session
对象最后一次被操作的时间
(6)public int get MaxInactiveIterval()
获取当前
session
的生存时间。
(7)public void setMaxInactiveIterval(int n)
设置
session
对象的生存时间。
(8)public void removeAttribute(String key)
从当前
session
中删除关键字时
key
的对象
(9)public String getId
()
获取对象的编号
(10)invalidate
使
session
无效
4.4 application
对象
(1)public void setAttribute(String key,Object obj)
application
对象类似与散列表,可以俺
key
添加值
(2)public Object getAttibute(String key)
获取
application
对象对应
key
的值
(3)public Enumeration getAttributeNames()
获取枚举对象遍历
application
,可以用
nextElements
()方法。
(4)public void removeAttribute(String key)
从当前
application
中删除关键字时
key
的对象
(5)public String getServletInfo()
获取
Servlet
编译器的当前版本的信息。
4.5 out
对象
out
对象使一个数错流,用来向客户输出信息,格式如下:
out.print(Obj);
输出任意对象,不换行。
out.println(Obj);
输出对象换行
out.newLine();
输出一个换行符
out.flush();
输出缓冲区里的内容
out.close();
关闭流
5 JSP
里的文件操作和数据库操作
这里就不再细说了,只提示一下,因为
jsp
的操作其实和
java
的一样,只要把程序放在
beans
里,获
<%%>
里就可以了,如果有不懂的可以参考俺以前发的帖子,里面有详细的介绍,是
java
的,其实都一样,我的网址为
http://blog.csdn.net/mc1035/
下面再给个综合的例子供大家参考:
<!--[if !supportLists]-->(1) <!--[endif]-->文件上传的例子:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<P>
选择要上传的文件:
<BR>
<FORM action="accept.jsp" method="post" ENCTYPE="multipart/form-data">
<INPUT type=FILE name="boy" size="38">
<BR>
<INPUT type="submit" name ="g" value="
提交
">
</BODY>
</HTML>
accept.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import ="java.io.*" %>
<HTML>
<BODY>
<%try{ InputStream in=request.getInputStream();
File f=new File("F:/2000","B.txt");
FileOutputStream o=new FileOutputStream(f);
byte b[]=new byte[1000];
int n;
while((n=in.read(b))!=-1)
{o.write(b,0,n);
}
o.close();
in.close();
}
catch(IOException ee){}
out.print("
文件已上传
");
%>
</BODY>
</HTML>
<!--[if !supportLists]-->(2) <!--[endif]-->文件下载的例子
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<P>
点击超链接下载
Zip
文档
book.Zip
<BR> <A href="loadFile.jsp">
下载
book.zip
</Body>
</HTML>
loadFile.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.io.*" %>
<HTML>
<BODY>
<% //
获得响应客户的输出流:
OutputStream o=response.getOutputStream();
//
输出文件用的字节数组
,
每次发送
500
个字节到输出流:
byte b[]=new byte[500];
//
下载的文件:
File fileLoad=new File("f:/2000","book.zip");
//
客户使用保存文件的对话框:
response.setHeader("Content-disposition","attachment;filename="+"book.zip");
//
通知客户文件的
MIME
类型:
response.setContentType("application/x-tar");
//
通知客户文件的长度:
long fileLength=fileLoad.length();
String length=String.valueOf(fileLength);
response.setHeader("Content_Length",length);
//
读取文件
book.zip,
并发送给客户下载
:
FileInputStream in=new FileInputStream(fileLoad);
int n=0;
while((n=in.read(b))!=-1)
{ o.write(b,0,n);
}
%>
</BODY>
</HTML>
<!--[if !supportLists]-->(3) <!--[endif]-->标准化考试
标准化考试系统源代码
ttt.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import ="java.io.*" %>
<%@ page import ="java.util.*" %>
<%!
String answer=null;//
存放答案用的字符串。
//
对字符串进行回压流处理的方法:
public String getString(String content)
{ try{ StringReader in=new StringReader(content) ;//
指向字符串的字符流。
PushbackReader push=new PushbackReader(in); //
回压流
StringBuffer stringbuffer=new StringBuffer(); //
缓冲字符串对象。
int c;
char b[]=new char[1];
while ( (c=push.read(b,0,1))!=-1)//
读取
1
个字符放入字符数组
b
。
{ String s=new String(b);
if(s.equals("<")) //
回压的条件
{ push.unread('&');
push.read(b,0,1); //push
读出被回压的字符字节
,
放入数组
b.
stringbuffer.append(new String(b));
push.unread('L');
push.read(b,0,1); //push
读出被回压的字符字节
,
放入数组
b.
stringbuffer.append(new String(b));
push.unread('T');
push.read(b,0,1); //push
读出被回压的字符字节
,
放入数组
b.
stringbuffer.append(new String(b));
}
else if(s.equals(">")) //
回压的条件
{ push.unread('&');
push.read(b,0,1); //push
读出被回压的字符字节
,
放入数组
b.
stringbuffer.append(new String(b));
push.unread('G');
push.read(b,0,1); //push
读出被回压的字符字节
,
放入数组
b.
stringbuffer.append(new String(b));
push.unread('T');
push.read(b,0,1); //push
读出被回压的字符字节
,
放入数组
b.
stringbuffer.append(new String(b));
}
else if(s.equals("\n"))
{ stringbuffer.append("<BR>");
}
else
{ stringbuffer.append(s);
}
}
push.close();
in.close();
return new String(stringbuffer); //
返回处理后的字符串。
}
catch(IOException e)
{return content=new String("
不能读取内容
");
}
}
%>
<% String s=request.getParameter("g"); //
获取客户提交的信息(是否重新读取文件)
if(s==null)
{s="";
}
byte b[]=s.getBytes("ISO-8859-1");
s=new String(b);
File f=null;
FileReader in=null;
BufferedReader buffer=null;
Integer number=new Integer(0); //
初始题号。
Integer score=new Integer(0);//
初始分数。
if(session.getCreationTime()-session.getLastAccessedTime()==0) //
当第一次请求该页面时,建立和文件的输入流连接。
{ f=new File("f:/2000","English.txt");
in=new FileReader(f);
buffer=new BufferedReader(in);
//
读入文件的第
1
行:答案
answer=buffer.readLine().trim();;
//
将上述
f
、
in
、
buffer
对象保存到用户的
session
对象中:
session.setAttribute("file",f);
session.setAttribute("in",in);
session.setAttribute("buffer",buffer);
//
再将初始题号保存到
session
对象中:
session.setAttribute("number",number);
//
再将用户的初始得分保存到
session
对象中:
session.setAttribute("score",score);
}
if(s.equals("
重新练习
")) //
当请求重新读取文件时,建立和文件的输入流连接。
{ f=new File("f:/2000","English.txt");
in=new FileReader(f);
buffer=new BufferedReader(in);
//
读入文件的第
1
行:答案
answer=buffer.readLine().trim();
//
将上述
f
、
in
、
buffer
对象保存到用户的
session
对象中:
session.setAttribute("file",f);
session.setAttribute("in",in);
session.setAttribute("buffer",buffer);
//
再将初始题号保存到
session
对象中:
session.setAttribute("number",number);
//
再将用户的初始得分保存到
session
对象中:
session.setAttribute("score",score);
}
//
读取试题:
try{ String str=null;
f=(File)session.getAttribute("file");
in=(FileReader)session.getAttribute("in");
buffer=(BufferedReader)session.getAttribute("buffer");
while((str=buffer.readLine())!=null)
{ //
为了能显示原始的
HTML
文件或
JSP
文件需使用回压流技术。
str=getString(str);
if(str.startsWith("**")) //
每个试题的结束标志。
{break;
}
out.print("<BR>"+str);
}
}
catch(IOException e)
{ out.print(""+e);
}
%>
<%String code=response.encodeURL("ttt.jsp");
%>
<HTML>
<BODY><Font size=1>
<P><BR>
请选择答案:
<FORM action="<%=code%>" method="post" name=form>
<Input type=radio name="r" value="A">A
<Input type=radio name="r" value="B">B
<Input type=radio name="r" value="C">C
<Input type=radio name="r" value="D">D
<Input type=submit name="submit" value="
提交答案
">
</FORM>
<% //
当用户提交表单时,获取提交的答案:
//
判断用户是否提交了答案表单:
String select=request.getParameter("submit"); //
获取客户提交的答案选择表单
if(select==null)
{select="";
}
byte c[]=select.getBytes("ISO-8859-1");
select=new String(c);
if(select.equals("
提交答案
"))
{ String userAnswer=request.getParameter("r");
if(userAnswer==null)
{ userAnswer="#";
}
//
将提交的答案与正确答案进行比较:
//
首先获取题号:
Integer num=(Integer)session.getAttribute("number");
int tihao=num.intValue();
//
获取相应题号的标准答案:
char correctAnswer='\0';
try{ correctAnswer=answer.charAt(tihao);
}
catch(StringIndexOutOfBoundsException ee)
{ tihao=0;
}
//
然后再将题号重新存入
session
对象:
tihao=tihao+1;
Integer newNumber=new Integer(tihao);
session.setAttribute("number",newNumber);
//
将用户提交的答案与标准答案比较
char user=userAnswer.charAt(0);
if(user==correctAnswer)
{ //
给用户增加分值:
Integer newScore=(Integer)session.getAttribute("score");
int fenshu=newScore.intValue();
fenshu=fenshu+1;
newScore=new Integer(fenshu);
session.setAttribute("score",newScore);
out.print("
您答对了,您现在的得分是:
");
out.print(""+fenshu);
}
else
{ out.print("
您没有答对,继续努力!
");
out.print("
您现在的得分是:
"+session.getAttribute("score"));
}
}
%>
<P><BR>
点击按钮重新练习:
<FORM action="" method="post" name=form>
<Input type=submit name="g" value="
重新练习
">
</FORM>
</FONT>
</BODY>
</HTML>
(
4
)分页显示记录
showByPage.jsp
:(效果如图
5.28
所示)
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<%! int pageSize=3; //
每页显示的记录数。
int pageCount=0; //
分页后的总页数。
%>
<%--
客户通过表单提交欲要显示的页码数
--%>
<FORM action="" method=get >
输入页码数
<Input Type=text name=showPage size=4 >
<Input Type=submit name=g value=
提交
>
</FORM>
<% Connection con;
Statement sql;
ResultSet rs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try { con=DriverManager.getConnection("jdbc:odbc:sun","sa","");
sql=
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
//
返回可滚动的结果集:
rs=sql.executeQuery("SELECT * FROM students");
//
将游标移动到最后一行:
rs.last();
//
获取最后一行的行号:
int lastRow=rs.getRow();
//
计算分页后的总页数:
pageCount=(lastRow%pageSize==0)?(lastRow/pageSize):(lastRow/pageSize+1);
//
当前显示的初始页数:
int showPage=1;
//
告知客户总页数:
%>
<P>
共有
<%=pageCount%>
页
<BR>
每页显示
<%=pageSize%>
条记录
.
<% //
获取客户想要显示的页数:
String integer=request.getParameter("showPage");
if(integer==null)
{ integer="1";
}
try {showPage=Integer.parseInt(integer);
}
catch(NumberFormatException e)
{showPage=1;
}
if(showPage<=1)
{showPage=1;
}
if(showPage>=pageCount)
{showPage=pageCount;
}
%>
<BR>
目前显示第
<%=showPage%>
页
<% //
如果要显示第
showPage
页,那么游标应移到
posion
的值是:
int posion=(showPage-1)*pageSize+1;
rs.absolute(posion); //
设置游标的位置
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"
学号
");
out.print("<TH width=100>"+"
姓名
");
out.print("<TH width=50>"+"
数学成绩
");
out.print("<TH width=50>"+"
英语成绩
");
out.print("<TH width=50>"+"
物理成绩
");
out.print("</TR>");
for (int i=1;i<=pageSize;i++)
{ out.print("<TR>");
out.print("<TD >"+rs.getString(1)+"</TD>");
out.print("<TD >"+rs.getString(2)+"</TD>");
out.print("<TD >"+rs.getInt("
数学成绩
")+"</TD>");
out.print("<TD >"+rs.getInt("
英语成绩
")+"</TD>");
out.print("<TD >"+rs.getInt("
物理成绩
")+"</TD>");
out.print("</TR>") ;
rs.next();
}
out.print("</Table>");
con.close();
}
catch(SQLException e1) {}
%>
</BODY>
</HTML>
(5) l
连接
Oracle
数据库
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<% Connection con=null;
Statement sql=null;
ResultSet rs=null;
try{Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException e){}
try
{ con=
DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.35:1521:Lea","scott","tiger");
sql=con.createStatement();
rs=sql.executeQuery("select * from emp");
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"EMPNO");
out.print("<TH width=50>"+"Ename");
out.print("</TR>");
while(rs.next())
{ out.print("<TR>");
int n=rs.getInt(1);
out.print("<TD >"+n+"</TD>");
String e=rs.getString(2);
out.print("<TD >"+e+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
con.close();
}
catch(SQLException e1) {out.print(""+e1);}
%>
</BODY>
</HTML>
(
6
)查询电子表格
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<% Connection con;
Statement sql;
ResultSet rs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try { con=DriverManager.getConnection("jdbc:odbc:star","","");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM
品名
");
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"
品名
");
out.print("<TH width=50>"+"
单位
");
out.print("<TH width=50>"+"
单价
");
out.print("</TR>");
while(rs.next())
{ out.print("<TR>");
String name=rs.getString(1);
out.print("<TD >"+name+"</TD>");
String unit=rs.getString(2);
out.print("<TD >"+unit+"</TD>");
String unitprice=rs.getString(3);
out.print("<TD >"+unitprice+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
con.close();
}
catch(SQLException e1) {}
%>
</BODY>
</HTML>
(
7
)使用同步连接
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<%! //
声明一个共享的连接对象:
Connection con=null;
%>
<% Statement sql=null;
ResultSet rs=null;
//
第一个客户负责建立连接对象:
if(con==null)
{ try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{out.print(e);
}
try {con=DriverManager.getConnection("jdbc:odbc:moon","sa","");
sql=con.createStatement();
rs =sql.executeQuery("SELECT * FROM students");
out.print("i am first");
}
catch(SQLException e)
{out.print(e);
}
}
//
其它客户通过同步块使用这个连接:
else
{ synchronized(con)
{ try { sql=con.createStatement();
rs =sql.executeQuery("SELECT * FROM students");
out.print("i am not first");
}
catch(SQLException e)
{out.print(e);
}
}
}
try
{ out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"
学号
");
out.print("<TH width=100>"+"
姓名
");
out.print("<TH width=50>"+"
数学成绩
");
out.print("<TH width=50>"+"
英语成绩
");
out.print("<TH width=50>"+"
物理成绩
");
out.print("</TR>");
while(rs.next())
{ out.print("<TR>");
String number=rs.getString(1);
out.print("<TD >"+number+"</TD>");
String name=rs.getString(2);
out.print("<TD >"+name+"</TD>");
int math=rs.getInt("
数学成绩
");
out.print("<TD >"+math+"</TD>");
int english=rs.getInt("
英语成绩
");
out.print("<TD >"+english+"</TD>");
int physics=rs.getInt("
物理成绩
");
out.print("<TD >"+physics+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
}
catch(SQLException e1) {}
%>
</BODY>
</HTML>
(
8
)投票系统
vote.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY>
<% StringBuffer nameList=new StringBuffer();
Connection con;
Statement sql;
ResultSet rs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try{ con=DriverManager.getConnection("jdbc:odbc:vote","","");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM people");
nameList.append("<FORM action=startvote.jsp Method=post>");
nameList.append("<Table Border>");
nameList.append("<Table Border>");
nameList.append("<TR>");
nameList.append("<TH width=100>"+"
姓名
");
nameList.append("<TH width=50>"+"
投票选择
");
nameList.append("</TR>");
while(rs.next())
{ nameList.append("<TR>");
String name=rs.getString(1);
nameList.append("<TD >"+name+"</TD>");
String s="<Input type=radio name=name value="+name+" >";
nameList.append("<TD >"+s+"</TD>");
nameList.append("</TR>") ;
}
nameList.append("</Table>");
nameList.append("<Input Type=submit value=
提交
>");
nameList.append("</FORM ");
con.close();
out.print(nameList);
}
catch(SQLException e1) {}
%>
</BODY>
</HTML>
startvote.jsp
(效果如图
5.40
、
5.41
所示):
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<html>
<body>
<%! //
记录总票数的变量:
int total=0;
//
操作总票数的同步方法:
synchronized void countTotal()
{ total++;
}
%>
<% boolean vote=true;//
决定用户是否有权投票的变量。
//
得到被选择的候选人名字:
String name="";
name=request.getParameter("name");
if(name==null)
{name="?";
}
byte a[]=name.getBytes("ISO-8859-1");
name =new String(a);
//
得到投票人的
IP
地址:
String IP=(String)request.getRemoteAddr();
//
加载桥接器:
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
Connection con=null;
Statement sql=null;
ResultSet rs=null;
//
首先查询
IP
表,判断该用户的
IP
地址是否已经投过票:
try { con=DriverManager.getConnection("jdbc:odbc:vote","","");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROM IP WHERE IP = "+"'"+IP+"'");
int row=0;
while(rs.next())
{ row++;
}
if(row>=1)
{ vote=false; //
不允许投票。
}
}
catch(SQLException e)
{ }
if(name.equals("?"))
{ out.print("
您没有投票
,
没有权利看选举结果
");
}
else
{
if(vote)
{ out.print("
您投了一票
");
//
将总票数加
1
:
countTotal();
//
通过连接数据库,给该候选人增加一票
,
//
同时将自己的
IP
地址写入数据库
。
try
{ rs=sql.executeQuery("SELECT * FROM people WHERE name = "+"'"+name+"'");
rs.next();
int count=rs.getInt("count");
count++;
String condition=
"UPDATE people SET count = "+count+" WHERE name="+"'"+name+"'" ;
//
执行更新操作
(
投票计数
)
:
sql.executeUpdate(condition);
//
将
IP
地址写入
IP
表:
String to=
"INSERT INTO IP VALUES"+"("+"'"+IP+"'"+")";
sql.executeUpdate(to);
}
catch(SQLException e)
{ out.print(""+e);
}
//
显示投票后的表中的记录:
try{ rs=sql.executeQuery("SELECT * FROM people");
out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"
姓名
");
out.print("<TH width=50>"+"
得票数
");
out.print("<TH width=50>"+"
总票数
:"+total);
out.print("</TR>");
while(rs.next())
{ out.print("<TR>");
out.print("<TD >"+rs.getString(1)+"</TD>");
int count=rs.getInt("count");
out.print("<TD >"+count+"</TD>");
double b=(count*100)/total; //
得票的百分比。
out.print("<TD >"+b+"%"+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
con.close();
}
catch(SQLException e)
{ }
}
else
{out.print("
您已经投过票了
");
}
}
%>
</BODY>
</HTML>
(9)
成绩录入查询系统
main.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY BGcolor=yellow>
<CENTER>
<FONT SIZE=2>
<P>
成绩录入查询系统
<BR>
<BR><A HREF="login.jsp">
录入人员登录
</A>
<BR><A HREF="inputMessage.jsp">
录入学生的基本信息
</A>
<BR><A HREF="inputResult.jsp">
录入学生成绩
</A>
<BR><A HREF="modifySecret.jsp">
修改密码
</A>
<BR><A HREF="inquire.jsp">
查询成绩
</A>
</FONT>
</CENTER>
</BODY>
</HTML>
登录页面
login.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY bgcolor=pink ><Font size=1>
<P>
成绩输入人员登录
<FORM action="login.jsp" Method="post">
<BR>
输入帐号:
<BR><Input type=text name="account">
<BR>
输入密码:
<BR><Input type=password name="secret">
<BR><Input type=submit name="g" value="
提交
">
</FORM>
<% //
获取提交的帐号:
String account=request.getParameter("account");
if(account==null)
{account="";
}
byte b[]=account.getBytes("ISO-8859-1");
account=new String(b);
//
获取提交的密码:
String secret=request.getParameter("secret");
if(secret==null)
{secret="";
}
byte c[]=secret.getBytes("ISO-8859-1");
secret=new String(c);
//
查询数据库信息,验证身份:
Connection con=null;
Statement sql=null;
ResultSet rs=null;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException event){}
try
{con=DriverManager.getConnection("jdbc:odbc:manage","","");
sql=con.createStatement();
String condition="SELECT * FROM verify WHERE
帐号
= "+"'"+account+"'";
rs =sql.executeQuery(condition);
while(rs.next())
{ String n=rs.getString("
帐号
");
String s=rs.getString("
密码
");
if(account.equals(n)&&secret.equals(s))
{ //
将帐号和密码存入
session
对象,以备在输入界面:
inputMessage.jsp
中使用:
session.setAttribute("account",account);
session.setAttribute("secret",secret);
//
为了防止客户浏览器限制了
Cooker
的使用,需对连接进行重定向处理:
String s1=response.encodeRedirectURL("inputMessage.jsp");
String s2=response.encodeRedirectURL("inputResult.jsp");
//
连接到基本信息输入页面:
response.sendRedirect(s1);
}
}
if(!(session.isNew()))
{ out.print("<BR>
您输入的帐号或密码不正确
"+account+":"+secret);
}
}
catch(SQLException e1) {}
%>
<BR><A HREF="main.jsp">
返回主页
</A>
</FONT>
</BODY>
</HTML>
基本信息输入页面(效果如图
5.45
所示)
inputMessage.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY bgcolor=pink ><Font size=1>
<P>
在该页面输入若干个学生的基本信息,
<BR>
或直接连接到成绩输入页面。
<%!//
处理字符串的一个常用方法:
public String getString(String s)
{ if(s==null) s="";
try {byte a[]=s.getBytes("ISO-8859-1");
s=new String(a);
}
catch(Exception e)
{
}
return s;
}
%>
<% //
为了防止客户浏览器限制了
Cooker
的使用,需对连接进行重定向处理:
String s1=response.encodeRedirectURL("inputMessage.jsp");
String s2=response.encodeRedirectURL("inputResult.jsp");
%>
<% //
为了防止客户直接进入该页面,首先从
session
对象获取密码和帐号信息:
String account="",secret="";
if(session.isNew())
{//
如果直接进入该页面就再连接到登录页面:
response.sendRedirect("login.jsp");
}
else
{ account=(String)session.getAttribute("account");
secret=(String)session.getAttribute("secret");
secret=getString(secret);
account=getString(account);
}
//
连接到数据库验证帐号和密码:
Connection con=null;
Statement sql=null;
ResultSet rs=null;
boolean boo=false;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException event){}
try
{con=DriverManager.getConnection("jdbc:odbc:manage","","");
sql=con.createStatement();
String condition="SELECT * FROM verify WHERE
帐号
= "+"'"+account+"'";
rs =sql.executeQuery(condition);
while(rs.next())
{ String n=rs.getString("
帐号
");
String s=rs.getString("
密码
");
if(account.equals(n)&&secret.equals(s))
{boo=true; break;
}
}
}
catch(SQLException e1) {}
//
如果帐号密码正确,就显示输入学生基本信息的表单界面:
if(boo)
{out.print("<FORM action= "+s1+" method=post>");
out.print("<P>
输入学生的基本信息:
");
out.print("<BR>
学号:
");
out.print("<Input type=text name=number1>");
out.print("<BR>
姓名:
");
out.print("<Input type=text name=name>");
out.print("<BR>
专业:
");
out.print("<Input type=text name=zhuanye>");
out.print("<BR>
年级:
");
out.print("<Input type=text name=grade>");
out.print("<BR> <Input type=submit value=
提交
>");
out.print("</FORM>");
}
else
{response.sendRedirect("login.jsp");
}
%>
<% //
获取基本信息存入数据库中的
"
基本信息
"
表中:
String number1=request.getParameter("number1"),
name =request.getParameter("name"),
zhuanye=request.getParameter("zhuanye"),
grade =request.getParameter("grade");
if(number1==null)
{number1="????????";
}
number1=getString(number1);
number1=number1.trim();
name =getString(name);
zhuanye=getString(zhuanye);
grade =getString(grade);
String basicmessage=
"INSERT INTO
基本信息
VALUES"+"("+"'"+number1+"','"+name+" ',' "+
zhuanye+" ',' "+grade+" ' "+")";
if(!(number1.startsWith("?")))
{ //
首先查找基本信息表中是否已存在该学生的信息:
rs=sql.executeQuery("SELECT * FROM
基本信息
WHERE
学号
="+" '"+number1+"' " );
//
如果该学号的学生已经存在,就转入成绩输入页面:
boolean line=rs.next();
//
通过
line
判断结果集是否有记录
if(line==true)
{ out.print("
该考号已经存在,请再录入其它学生的基本信息
");
out.print("<BR>
也可以点击按钮:进入成绩录入页面
");
//
显示该生的基本信息:
out.print("<BR>
学号
"+rs.getString(1)) ;
out.print("<BR>
姓名
"+rs.getString(2)) ;
out.print("<BR>
专业
"+rs.getString(3)) ;
out.print("<BR>
年级
"+rs.getString(4)) ;
}
//
如果该学号的学生不存在,就将信息写入基本信息表,再转入成绩输入页面:
else
{sql.executeUpdate(basicmessage);
out.print("<BR>
该学生的信息已录入成功,请再录入其它学生的基本信息
");
out.print("<BR>
也可以点击按钮:进入成绩录入页面
");
}
}
else
{out.print("
必须输入学号,学号不可以用
?
开头
");
}
con.close();
%>
<FORM action=<%=s2%>>
<P>
点击按钮连接到学生成绩输入页面:
<BR><Input type="submit" value="
连接到学生成绩输入页面
">
<BR><A HREF="main.jsp">
返回主页
</A>
</BODY>
</HTML>
成绩录入页面
inputResult.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY bgcolor=yellow ><Font size=1>
<%!//
处理字符串的一个常用方法:
public String getString(String s)
{ if(s==null) s="";
try {byte a[]=s.getBytes("ISO-8859-1");
s=new String(a);
}
catch(Exception e)
{ }
return s;
}
%>
<% String s1=response.encodeRedirectURL("inputMessage.jsp");
String s2=response.encodeRedirectURL("inputResult.jsp");
%>
<% //
为了防止客户直接进入该页面,首先从
session
对象获取密码和帐号信息:
String account="",secret="";
if(session.isNew())
{//
如果直接进入该页面就连接到登录页面:
response.sendRedirect("login.jsp");
}
else
{ account=(String)session.getAttribute("account");
secret=(String)session.getAttribute("secret");
secret=getString(secret);
account=getString(account);
}
//
连接到数据库验证帐号和密码:
Connection con=null;
Statement sql=null;
ResultSet rs=null;
boolean boo=false;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException event){}
try
{con=DriverManager.getConnection("jdbc:odbc:manage","","");
sql=con.createStatement();
String condition="SELECT * FROM verify WHERE
帐号
= "+"'"+account+"'";
rs =sql.executeQuery(condition);
while(rs.next())
{ String n=rs.getString("
帐号
");
String s=rs.getString("
密码
");
if(account.equals(n)&&secret.equals(s))
{boo=true; break;
}
}
}
catch(SQLException e1) {}
//
如果帐号密码正确,就显示输入成绩的表单界面:
if(boo)
{out.print("<P>
输入学生的考试科目、成绩等信息:
");
out.print("<FORM action="+s2+" method=post>");
out.print("<BR>
学号:
");
out.print("<Input type=text name=number2>");
out.print("<BR>
科目:
");
out.print("<Input type=text name=subject>");
out.print("<BR>
成绩:
");
out.print("<Input type=text name=result>");
out.print("<BR> <Input type=submit value=
提交
>");
out.print("</FORM>");
}
else
{response.sendRedirect("login.jsp");
}
%>
<% String number2=request.getParameter("number2"),
subject=request.getParameter("subject"),
result=request.getParameter("result");
if(number2==null)
{number2="########";
}
number2=getString(number2);
subject=getString(subject);
result=getString(result);
number2=number2.trim();
//
从
"
基本信息
"
表中查找学号是
nunumber2
的记录:
String basicmessage=
"SELECT * FROM
基本信息
WHERE
学号
= "+" '"+number2+"'";
try { sql=con.createStatement();
rs=sql.executeQuery(basicmessage);
boolean line=rs.next();
//
通过
line
判断结果集是否有记录
,
//
如果没有该学生的基本信息就返回提示:
if(line==false)
{out.print("
你还没有输入成绩呢
,");
out.print("
如果你输入的学号不在
<BR>
学生的基本信息表中
,");
out.print("
请点击按钮:连接到学生
<BR>
基本信息输入页面
.");
}
else
{ //
显示该生的基本信息:
out.print("<BR>
学号
"+rs.getString(1)) ;
out.print("<BR>
姓名
"+rs.getString(2)) ;
out.print("<BR>
专业
"+rs.getString(3)) ;
out.print("<BR>
年级
"+rs.getString(4)) ;
String resultmessage=
"INSERT INTO
成绩
VALUES"+"("+"'"+number2+"','"+subject+" ','"+result+"' "+")";
sql.executeUpdate(resultmessage);
out.print("<BR>
成绩已被录入
");
}
}
catch(SQLException e)
{out.print("<BR>"+subject+"
该课程的成绩已经存在
<BR>
不允许重复录入
");
}
con.close();
%>
<FORM action=<%=s1%>>
<P>
点击按钮连接到学生信息输入页面:
<BR><Input type="submit" value="
连接到学生基本信息输入页面
">
</FORM>
</BODY>
</HTML>
成绩查询页面
inquire.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY bgcolor=orange ><Font size=1>
<FORM action="" Method=post>
输入学生的学号:
<Input type=text name=number>
<Input type=submit name=g vale=
提交
>
</FORM>
<%! Connection con=null; //
声明一个共享的连接对象
%>
<% //
获取学号:
String studentNumber=request.getParameter("number");
if(studentNumber==null)
{studentNumber="?";
}
byte b[]=studentNumber.getBytes("ISO-8859-1");
studentNumber=new String(b);
Statement sql=null;
ResultSet rs=null;
if(con==null)
{ try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{out.print(e);
}
try {con=DriverManager.getConnection("jdbc:odbc:manage","","");
String condition="SELECT * FROM
成绩
WHERE
学号
= "+"'"+studentNumber+"'";
rs =sql.executeQuery(condition);
}
catch(SQLException e)
{out.print(e);
}
}
else
{ synchronized(con)
{ try { sql=con.createStatement();
String condition="SELECT * FROM
成绩
WHERE
学号
= "+"'"+studentNumber+"'";
rs =sql.executeQuery(condition);
}
catch(SQLException e)
{out.print(e);
}
}
}
try { out.print("<Table Border>");
out.print("<TR>");
out.print("<TH width=100>"+"
学号
");
out.print("<TH width=100>"+"
课程名称
");
out.print("<TH width=50>"+"
成绩
");
out.print("</TR>");
while(rs.next())
{ out.print("<TR>");
String number=rs.getString(1);
out.print("<TD >"+number+"</TD>");
String subjectName=rs.getString(2);
out.print("<TD >"+subjectName+"</TD>");
String chengji=rs.getString("
成绩
");
out.print("<TD >"+chengji+"</TD>");
out.print("</TR>") ;
}
out.print("</Table>");
}
catch(SQLException e1) {}
%>
<BR><A HREF="main.jsp">
返回主页
</A>
</FONT>
</BODY>
</HTML>
修改密码页面
modifySecret.jsp
:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<HTML>
<BODY bgcolor=pink ><Font size=1>
<P>
修改密码
,
密码长度不能超过
30
个字符:
<FORM action="" Method="post">
<BR>
输入您的帐号:
<BR><Input type=text name="account">
<BR>
输入您的密码:
<BR><Input type=password name="secret">
<BR>
输入您的新的密码:
<BR><Input type=text name="newSecret1">
<BR>
请再输入一次新密码:
<BR><Input type=text name="newSecret2">
<BR><Input type=submit name="g" value="
提交
">
</FORM>
<%!//
处理字符串的一个常用方法:
public String getString(String s)
{ if(s==null) s="";
try {byte a[]=s.getBytes("ISO-8859-1");
s=new String(a);
}
catch(Exception e)
{ }
return s;
}
%>
<% //
获取提交的帐号:
String account=request.getParameter("account");
account=getString(account);
//
获取提交的密码:
String secret=request.getParameter("secret");
secret=getString(secret);
//
获取提交的新密码:
String newSecret1=request.getParameter("newSecret1");
newSecret1=getString(newSecret1);
//
获取提交的新密码:
String newSecret2=request.getParameter("newSecret2");
newSecret2=getString(newSecret2);
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException event){}
//
查询数据库信息,验证身份:
Connection con=null;
Statement sql=null;
ResultSet rs=null;
boolean modify=false;
boolean ifEquals=false;
ifEquals=(newSecret1.equals(newSecret2))&&(newSecret1.length()<=30);
if(ifEquals==true)
{try
{ con=DriverManager.getConnection("jdbc:odbc:manage","","");
sql=con.createStatement();
String condition="SELECT * FROM verify WHERE
帐号
= "+"'"+account+"'";
rs =sql.executeQuery(condition);
while(rs.next())
{ String n=rs.getString("
帐号
");
String s=rs.getString("
密码
");
if(account.equals(n)&&secret.equals(s))
{ //
修改密码:
modify=true;
out.print("
您的密码已经更新
");
String c=
"UPDATE verify SET
密码
= "+"'"+newSecret1+"'"+" WHERE
帐号
= "+"'"+account+"'";
rs =sql.executeQuery(c);
}
}
}
catch(SQLException e1) {}
}
else
{ out.print("
你两次输入的密码不一致或长度过大
");
}
if(modify==false&&ifEquals==true)
{ out.print("<BR>
您没有输入密码帐号或
<BR>
您输入的帐号或密码不正确
"+account+":"+secret);
}
%>
</FONT>
</BODY>
</HTML>
呵呵,上面举的例子都是具有代表性的例子。
在文章最后还要声明一下:本篇文章是参考
JSP
实用教程写的,再次提出感谢,另外该书不错,本人看了,推荐
JSP
初学者可以买一本看看,获益非浅的。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1322070
posted on 2006-10-11 17:16
fly 阅读(5171)
评论(1) 编辑 收藏 所属分类:
jsp学习