《JSP笔记》之六JSP综合实例.docx
- 文档编号:17646665
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:47
- 大小:137.05KB
《JSP笔记》之六JSP综合实例.docx
《《JSP笔记》之六JSP综合实例.docx》由会员分享,可在线阅读,更多相关《《JSP笔记》之六JSP综合实例.docx(47页珍藏版)》请在冰豆网上搜索。
《JSP笔记》之六JSP综合实例
《JSP笔记》之六
第六章 JSP综合实例
§6.1[案例14]强制用户登录
一般网站都希望用户注册后登录,或先登录,留下自己的信息后,才能进入到自己丰富多彩的页面内容。
但用户也可能会通过直接输入URL而绕过注册页面,直接进入到关键页面。
面对这种情况,所有的关键页面可以采用一种方法来强制用户登录。
方法如下:
在关键页面,检查用户的session类变量,若session类变量没有值,说明用户没有登录就进来了。
这时就限制用户打开网页,而转到登录页面,要求用户登录。
本案例由2个网页构成:
供用户登录的login.jsp文件和关键页面的内部检查部分check.jsp,若检查通过,则跳到主页index1.jsp。
其实,可以把检查网页check.jsp用include指令嵌入到每个网页中,即每个网页一打开,就先检查用户是否登录,若没有,则跳到login.jsp进行登录。
网页文件名login.jsp
<%@pagecontentType="text/html;charset=gb2312"%>
<%
Stringlogin_flag=request.getParameter("access");
if(login_flag!
=null){
if(login_flag.equals("false")){
//login_flag标记为null,则说明不是从其它网页跳转而来。
//login_flag标记为false,则说明是从其它网页跳转来的。
out.println("
");
}
}
%>
用户:
密码:
<%
Stringusername=request.getParameter("username");
Stringpassword=request.getParameter("password");
if(username!
=null&&password!
=null){
//若username和password都不为空,说明已接收到了输入。
if(username.equals("")||password.equals("")){
out.println("用户名或密码不能为空!
");
}
else{
if(username.equals("admin")&&password.equals("pass")){
session.setAttribute("u_name",username);
session.setAttribute("p_word",password);
session.setAttribute("access","ok");
%>
欢迎来到本网站。
单击
<%response.setHeader("Refresh","5;url=index1.jsp");
}
else{
out.println("用户名或密码错误!
请重新输入!
");
}
}
}
%>
网页文件名check.jsp
<%@pagecontentType="text/html;charset=gb2312"%>
<%
Stringusername=(String)session.getAttribute("u_name");
Stringaccess=(String)session.getAttribute("access");
out.println(username);
out.println(access);
if(username!
=null&&access!
=null&&(access.equals("ok"))){
out.println("欢迎"+username);
out.println("访问本网站!
");
}
else{
out.println("请先从login.jsp网页登录!
");
response.setHeader("Refresh","5;url=login.jsp?
access=false");
}
%>
网页文件名index1.jsp
<%@pagecontentType="text/html;charset=gb2312"%>
主页
运行后的效果请同学们自己上机实践。
§6.2[案例15]商品信息列表
用表格输出数据库表是不错的方法。
但有时,并不知道数据表的具体字段名和字段的个数。
这时可以用结果集ResultSet类的ResultSetMetaData类对象的方法,来完成不知道表的字段个数和字段名字的情况下输出数据表的任务。
相关方法见书第217至218页
这里,用到了
创建ResultSetMetaData类对象:
ResultSetMetaDatarsm=rs.getMetaData();
获取ResultSetMetaData类对象的字段个数的方法:
intcols=rsm.getColumnCount();
获取ResultSetMetaData类对象的字段名的方法:
out.print(rsm.getColumnName(th));
网页文件名listshop.jsp
--listshop.jsp-->
<%@pagecontentType="text/html;charset=GB2312"import="java.sql.*"%>
<%
try{//启动异常处理
//连接数据库,
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=jspdb";
Stringuser="admin";
Stringpassword="";
Connectionconn=DriverManager.getConnection(url,user,password);
//创建stmt对象
Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
//创建sql查询语句
Stringsql="SELECT*FROMtrade";
//执行sql查询
ResultSetrs=stmt.executeQuery(sql);
if(rs!
=null)
{
ResultSetMetaDatarsm=rs.getMetaData();
intcols=rsm.getColumnCount();//取得rs记录集字段个数
out.println(" //下面语句输出表的标题部分 out.println(" for(intth=1;th<=cols;th++)//循环输出一行中的标题格 { //输出标题 out.println(" out.print(rsm.getColumnName(th));//输出字段名 out.println(" } out.println(" //循环列出商品信息 introw=1; while(rs.next()) { out.println(" for(intcol=1;col<=cols;col++)//循环输出一行中的单元格 { //输出一个单元格 out.print(" out.print(rs.getObject(col));//输入指定字段内容 out.println(" } out.println(" row++; } out.println("
");//输出表格结束标签");//输出行起始标签 ");//输出行结束标签"); ");");//输出行起始标签 ");//输出行结束标签"); ");
}
rs.close();//关闭rs
stmt.close();//关闭stmt
conn.close();//关闭conn
}
catch(ClassNotFoundExceptione)
{
out.println("驱动程序类异常!
");
out.println(e.getMessage());
}
catch(SQLExceptione)
{
out.println("数据库连接或SQL查询异常!
");
out.println(e.getMessage());
}
catch(Exceptione)
{
out.println("其他异常!
");
out.println(e.getMessage());
}
%>
运行后,效果如下:
§6.3[案例16]访客留言板
本节是一个用数据库方式来存储的留言板。
和前面的留言板一样。
本例也由3个网页构成:
输入留言信息的网页1:
index.jsp
处理留言的网页2:
addmessages.jsp
查看留言的网页3:
viewmessage.jsp
其中,在网页1,可以通过表单提交去网页2,可以通过超链接去网页3。
在网页2,可以去网页3,也可以去网页1。
在网页3,可以去网页1。
数据存储在数据库jspdb的表messages中。
该表结构如下:
网页1:
文件名index.jsp
--index.jsp-->
<%@pagecontentType="text/html;charset=gb2312"%>
网页2:
文件名addmessages.jsp
--manageuser.jsp-->
<%@pagecontentType="text/html;charset=gb2312"language="java"import="java.sql.*,java.util.*,java.text.SimpleDateFormat"%>
<%
request.setCharacterEncoding("gb2312");//将请求信息编码,解决中文乱码问题
//获取请求信息中的数据
Stringname=request.getParameter("name");
Stringmail=request.getParameter("mail");
Stringtitle=request.getParameter("title");
Stringcontent=request.getParameter("content");
if(name==null)
name="";
if(title==null)
title="";
if(content==null)
content="";
if(mail==null)
mail="";
if(name.length()==0)
out.println("留言人姓名不能为空!
");
elseif(title.length()==0)
out.println("留言主题不能为空!
");
elseif(content.length()==0)
out.println("留言内容不能为空!
");
else
{
//通过Calendar对象得到当前时间
Calendarcl=Calendar.getInstance();
//设置格式
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
//对日期格式化,转换成字符串
Stringdatetime=sdf.format(cl.getTime());
try{//启动异常处理
//连接数据库
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=jspdb";
Stringuser="admin";
Stringpassword="";
Connectionconn=DriverManager.getConnection(url,user,password);
//创建参数查询对象stm
Stringsql="insertintomessages(title,name,mail,times,content)values(?
?
?
?
?
)";
PreparedStatementstm=conn.prepareStatement(sql);
//准备参数
stm.setString(1,title);
stm.setString(2,name);
if(mail.length()==0)
stm.setString(3,null);
else
stm.setString(3,mail);
stm.setString(4,datetime);
stm.setString(5,content);
//更新数据库
stm.executeUpdate();
conn.close();//关闭conn
response.setHeader("Refresh","5;url=index.jsp");
%>
<%
}
catch(ClassNotFoundExceptione)
{
out.println("驱动程序类异常!
");
out.println(e.getMessage());
}
catch(SQLExceptione)
{
out.println("数据库连接或SQL查询异常!
");
out.println(e.getMessage());
}
catch(Exceptione)
{
out.println("其他异常!
");
out.println(e.getMessage());
}
}
%>