用JSP打造一个留言板
- 格式:doc
- 大小:38.50 KB
- 文档页数:6
留言簿设计报告班级09软件姓名***学号22号一部分:描述留言簿的模块划分二部分:用流程图的形式描述留言簿的执行流程三部分:各部分界面效果图及代码的具体实现四部分:设计过程中的错误及纠正五部分:设计感受六部分:附用户使用说明(包括安装环境部署环境,及使用),和设计时的数据库第一部分:留言簿的模块划分1.管理员管理模块身为管理员,有查看所有用户的资料信息,和所有用户的留言,并有修改和删除的权利,进入index.jsp首页后,先像其它用户一样访问主页,及留言板,若想留言或查看信息,则先登陆.点击留言请先登陆超链接,进入denglu.jsp的登陆页面.输入管理员的用户名及密码,即admin,进入success.jsp页面,在此页面里,管理员可以查看全部留言信息shuchu.jsp,并可以更改和删除.也可以查看所有用户的注册信息chakan.jsp.也可以查看个人信息gerenxinxi.jsp.在个人信息中可以修改用户名和密码即登录xiugai.jsp页面,但不可以注销用户,因为不能没有管理员.2.普通用户使用模块普通用户进入网站,也要先浏览主页,及留言板,若有意留言,则请先登录,登陆成功后进入success.jsp页面,在此页面中用户可以查看自己已经留言过的信息,即shuchu3.jsp页面,在此页面中可以对自己的留言进行更新和删除,即update.jsp页面和delete.jsp页面,若有意留言,则点击我要留言超链接,进入liuyanyemian.jsp页面,进行留言,再此页面中,可以更新自己的头像.在success.jsp中还可以查看个人信息,并对自己的用户名和密码进行修改,对自己的账号注销.即xiugai.jsp和cancel.jsp页面3.过客浏览模块身份为过客,进入网站后,先浏览主页,若有意留言,则点击留言请先登录,若没有账号,则在denglu.jsp的页面中,点击注册链接,进行注册,即insertuser.jsp页面,若用户名不曾被人注册过,则转到zhucechenggong.jsp的页面.点击此页面的登陆即可重新登陆,也可以退出网站.重新登陆后,就可以想普通会员一样进行操作了.4.退出系统退出,即tuichu.jsp页面.第二部分:流程图第三部分:各部分界面效果图及代码的具体实现index.jsp 页面,主要用了一个qq 表情,然后用marquee 标签实现字体的运动,接下来是两个超级链接.访问主页后,进入留言板主页,标题有主人寄语,然后调用以下方法,public List QureyAll(String sql){ List list=new ArrayList(); this .getConnection(); try {stat =con .createStatement(); rs =stat .executeQuery(sql); while (rs .next()){ Message message=new Message();message.setBorderID(rs .getInt("borderId")); message.setContent(rs .getString("content")); message.setImage(rs .getString("image")); message.setMsgtime(rs .getString("msgtime")); message.setReplyID(rs .getString("replyID")); message.setSubject(rs .getString("subject")); message.setUsername(rs .getString("username"));list.add(message);}} catch (SQLException e) { // TODO Auto-generated catch blockSystem.out .println("数据库异常"); e.printStackTrace();}CloseAll();return list;}输出所有人的留言,界面如下:若想要留言,则进入denglu.jsp页面,即用一个form表单即可,界面如下:登陆成功后,进入success.jsp,设置了几个超链接如下:若点击查看自己的留言,则进入shuchu3.jsp页面,在此页面,可以更新和删除,都是现获取自己的id号,然后操作,如下:输出方法如下:public Message QueryByID(int id){Message message=new Message();String sql="select * from t_board where borderID="+id;this.getConnection();try {stat=con.createStatement();rs=stat.executeQuery(sql);if(rs.next()){message.setBorderID(rs.getInt("borderID"));message.setContent(rs.getString("content"));message.setImage(rs.getString("image"));message.setMsgtime(rs.getString("msgtime"));message.setReplyID(rs.getString("replyID"));message.setSubject(rs.getString("subject"));message.setUsername(rs.getString("username"));}} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("数据库异常");e.printStackTrace();}CloseAll();}在jsp页面调用:String id=request.getParameter("id");int borderid=Integer.parseInt(id);DBConn db=new DBConn();Message message=db.QueryByID(borderid);更新主要实现就是:String id=request.getParameter("id");String subject=request.getParameter("subject");String content=request.getParameter("content");String updatetime=new Date().toLocaleString();String sql="update t_board set subject='"+subject+"',content='" +content+"',msgtime='"+updatetime+"',image='"+image+"' where borderID="+id;DBConn db=new DBConn();int flag=db.executeUpdate(sql);if(flag>0){response.sendRedirect("shuchu3.jsp");}else{out.print("出现异常,重新留言!");}删除主要实现就是将sql语句进行修改一下:String sql="delete from t_board where borderID="+borderid;当然参数也没必要获得那么多.更新和删除的主要方法为:publicint executeUpdate(String sql){int flag=0;try {this.getConnection();stat=con.createStatement();flag=stat.executeUpdate(sql);}catch (SQLException e) {e.printStackTrace();}CloseAll();return flag;}界面如下:若点击查看自己的个人信息,则进入gerenxinxi.jsp 页面,sql 语句用username 追踪, 调用如下的方法:public Genggai QureyAll2(String sql){Genggai xinxi=new Genggai();this .getConnection(); try {stat =con .createStatement(); rs =stat .executeQuery(sql); if (rs .next()){ xinxi.setId(rs .getInt("id"));xinxi.setUsername(rs .getString("username")); xinxi.setPwd(rs .getString("pwd")); xinxi.setSex(rs .getString("sex"));xinxi.setBirthday(rs .getString("birthday")); xinxi.setEmail(rs .getString("email")); xinxi.setAddress(rs .getString("address"));xinxi.setTelephone(rs .getString("telephone"));}} catch (SQLException e) {System.out .println("数据库异常");e.printStackTrace();}CloseAll();return xinxi;}在jsp 页面这样输出:out.print("<tr>");out.print("<td width='40%' align='center'>");out.print("<font size='5' color='orange' face='隶书'>"); out.print("您的id 号是:"); out.print("</font>"); out.print("</td>");out.print("<td align='center'>");out.print(xinxi.getId());out.print("</td>");out.print("</tr>");其他列名输出跟上面的id一样,界面如下:若点击如上的”修改用户名或密码”进入如下页面,即xiugaiyemian.jsp,也是定义一个form表单若修改成功,则进入xiugaichenggong.jsp页面,界面如下:若点击success.jsp 页面的”注销用户”,则进入如下页面,同样也是定义form 表单,成功后进入cancelsuccess.jsp 页面,两个界面如下:注销用户方法是:publicint TestCancel(String username,String pwd){ int flag=0; DBConn db=new DBConn();con =db.getConnection();String sql="delete from t_user where username=? and pwd=?";try {prests = con .prepareStatement(sql); prests .setString(1,username); prests .setString(2,pwd);flag=prests .executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch blocke.printStackTrace();}return flag;}若在登陆页面,点击”注册”,进入regist.jsp 页面如下,也是一个复杂的form 表单,添加了背景和qq 表情:注册插入到数据库的方法主要有两个,一个用来判断用户名是否已经存在,一个用来插入:如下判断:publicint Testpanduan(String username){int s=0;DBConn db=new DBConn(); con =db.getConnection(); String sql="select * from t_user where username=?"; try {prests =con .prepareStatement(sql);prests .setString(1,username);rs =prests .executeQuery();if (rs .next()) {s=1;rs .close();prests .close();}} catch (SQLException e) { // TODO Auto-generated catch blocke.printStackTrace();} return s;} 插入:publicint Testinsert(String username,String pwd,String repwd,String sex,String birthday,String email,String address,String telephone){ DBConn db=new DBConn();con=db.getConnection();int flag=0;String sql="insert into t_user values(?,?,?,?,?,?,?)";try{if(pwd.equals(repwd)){prests=con.prepareStatement(sql);prests.setString(1,username);prests.setString(2,pwd);prests.setString(3,sex);prests.setString(4,birthday);prests.setString(5,email);prests.setString(6,address);prests.setString(7,telephone);flag=prests.executeUpdate();}}catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return flag;}注册成功后,进入zhucechenggong.jsp页面,也添加了背景图片和qq表情,使之美观,界面如下:若访问的是管理员,则进入如下界面,他可以查看所有用户的所有留言和所有信息:若查看所有用户的全部资料,则进入chakan.jsp页面,在此页面可以管理员进行删除,输出方法是:public ResultSet QureyAll3(String sql){Genggai xinxi=new Genggai();this.getConnection();try {stat=con.createStatement();rs=stat.executeQuery(sql);if(rs.next()){xinxi.setId(rs.getInt("id"));xinxi.setUsername(rs.getString("username"));xinxi.setPwd(rs.getString("pwd"));xinxi.setSex(rs.getString("sex"));xinxi.setBirthday(rs.getString("birthday"));xinxi.setEmail(rs.getString("email"));xinxi.setAddress(rs.getString("address"));xinxi.setTelephone(rs.getString("telephone"));}} catch (SQLException e) {// TODO Auto-generated catch blockSystem.out.println("数据库异常");e.printStackTrace();}return rs;}在jsp页面调用方法后用<%out.print(rs.getString("email")); %> 删除链接是:<a href="deletemsg2.jsp?id=<%=rs.getInt("id")%>">删除</a>界面如下:管理员还可以有权利对所有用户的留言进行删除:主要方法同上面提到的.界面如下:点击我要留言链接后,进入我要留言页面:添加笑脸和更新头像的方法如下:<%int count=0;for(int i=0;i<40;i++){ %><input type="radio" name="image" value="<%=i+1 %>" onclick="addimg(this)"><img src="images2/<%=i+1 %>.png"><% count++;if(count%8==0)out.print("<br>"); }%>更新头像:<select name="image" onchange="change();"><%for(int i=1;i<=30;i++){%><option value="<%=i%>"><%=i %></option><% } %></select><img src="photo/1.jpg" width="100" height="100" name="head"/> 但要用到JavaScript语言:选择头像:function addimg(obj){var s=obj.value;var con=document.form1.content.value;con=con+"<img src=images2/"+s+".png>";document.form1.content.value=con; }更换头像:function change(){var image=document.form1.image1.value;document.head.src="photo/"+image+".jpg";}留言界面如下:最后是退出页面,主要是图片和qq表情的设置.使页面更生动,界面如下:第四部分:设计过程中的错误及纠正在做动态网页的时候,遇到的小错误有很多,每次都是经过反复的调试得出的,有时候写错某个方法中的某个字母,就会调试很长时间,当然同时也加深了印象.例如在用JavaScript语句中,不能弹出alert对话框,仔细分析代码,发现表单form名字写成了from.主要的错误有以下几个方面:1.在编写查看所有人的信息遇到传递参数时的空指针,而且在方法体中用了db.CloseAll();方法,出现连接对象已经关闭的错误.应该用out.print(rs.getString(username));而不是用out.print(xinxi.getUsername());2.在删除留言时,超链接中的id一直传递不过去使得intborderid=Integer.parseInt(id);一直出现错误,出现空指针.,仔细检查发现是超链接中的id=<%=message.getBorderID()%>写错3.在插入新留言的时候,一直出现中文乱码,插入如下两条语句,即可解决byte aa[]=subject.getBytes("ISO-8859-1"); subject=new String(aa);byte bb[]=content.getBytes("ISO-8859-1");content=new String(bb);更新头像的时候,头像不能同时显示出来4.在注册新用户时,由于既要用sql语句判断用户名是否已经存在,又用到要在不存在的时候插入的sql语句,导致逻辑混乱,仔细推敲后,才运行得到.5.因为要在多个页面用到传递的username等等,所以一定要用session获取参数6.在更新留言时,要用到<input type="hidden" name="id" value="<%=id %>">传递隐藏的参数,由于刚开始不明白,出现了很多逻辑上的错误.第五部分: 设计感受1.这次的留言板设计感受很多,有时某一个很小的错误,比如丢一个括号,写错一个字母,就会浪费很长的时间.所以做完就用了很长的时间.当然对程序里的某些方法的应用,也不是太清楚,如过滤信息的设置等.我觉得还是孜孜不倦的从一点点的做起,比如每个网页的背景图片,就设计了不少时间,因为我觉得一个网站的美观效果也是很重要的.每当睡觉的时候,只要一想起,啊,我的留言板还没有做完,就会带着思考入梦了.老实说,这个留言板不是很难,可能是刚接触数据库与jsp的链接吧,当时出了很多例如数据库异常的错误,到后期的时候就好多了…在对用户信息或用户的留言进行更新,删除,插入,查找等等时,这些方法都从jsp的页面,提到java类里面,方法都是大同小异,无非是数据库的链接,执行sql语句的对象的创建和应用,以及接受结果的存放等等.主要是预处理对象和执行对像的flag=stat.executeUpdate(sql);rs=stat.executeQuery(sql);这两个方法的调用.2.在这期间离不开同学与同学,舍友与舍友之间互相学习和交流,所以收益也很大,也感受到了集体的力量.经过这次的留言板制作,收获很多.不仅对连接数据库方面的知识懂了很多,对sql语句的书写记忆深刻,而且还回忆了以前的很多函数的调用,方法的编写等等.相信在以后的学习中会更进一步,掌握更多的知识和应用.第六部分:附用户使用说明(包括安装环境部署环境,及使用),和设计时的数据库在MyEclipse7.0的环境下实现,将Tomcat6.0服务器,JDK7下载以及部署进去设计时的数据库使用Microsoft SQL server 2000。
JSP简易留⾔板写在前⾯在上篇博⽂中介绍JSP的9个内置对象的含义和常⽤⽅法,但都是⽐较理论的知识。
今天为⼤家带来⼀个⼩应⽤,⽤application制作的简易留⾔板。
包括三个功能模块:留⾔提交、留⾔展⽰、查看留⾔板。
⽤3个JSP页⾯展⽰信息(视图层),⼀个servlet处理⽤户的请求(控制层),因为⽐较简单没有⽤到javaBean作为模型层。
还有⼀个filter初始化应⽤。
表单提交本例中⽤submit.jsp页⾯提交留⾔。
⽤表单提交⽤户的请求参数,action参数处理⽤户请求程序的路径。
关于表单提交有两点说明:1.路径在JSP页⾯中,建议⽤绝对路径,形如:<%=request.getContextPath()%>/MsgPane,request.getContextPath()代表项⽬的根⽬录。
其原因是绝对路径简单不容易出错。
在写JSP程序是经常会犯路径的错误,就是没明⽩⼀些基本的概念。
为了统⼀前后端路径的使⽤,IDE在新建JSP的会加⼊<base>标签,这个时候相对路径是不起作⽤的,浏览器解析时会在其前⾯加上base的href属性值。
例如:2.⽅法post提交时,参数不会附加在URL中,安全性更⾼,表单提交建议使⽤post。
submit.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><body><form action="<%=request.getContextPath()%>/MsgPane" method="post">请输⼊你的姓名:<br><input type="text" name="name"><br>请输⼊你的标题:<br><input type="text" name="title"><br>留⾔内容:<br><textarea rows="15" cols="20" name="message"></textarea><br><br><input type="submit" value="提交信息"><br></form><form action="<%=request.getContextPath()%>/msgpane/messages.jsp"><input type="submit" value="查看留⾔板"></form><%-- </body>--%></html>处理⽤户请求我们⼀般⽤servlet处理⽤户请求,servlet多⽤于流程控制,也就是我们常说得MVC中C(控制层)。
jsp留言板源代码一: 给jsp初学者. 2000-12-18 00:00 T|Tjsp留言板源代码一: 给jsp初学者.作者: precom (皮蛋)oracle数据表创建.create table guestbook (lw_title varchar2(100) not null, --留言主题lw_author varchar2(20) not null, --网上大名pkauthor_http varchar2(40) , --主页地址author_email varchar2(40) not null,--电子信箱pkexpression varchar2(2) not null,--表情lw_time varchar2(14) not null,--发表回应时间answer_num number(3) not null,--回应数click_num number(4) not null,--点击数author_ip varchar2(16) ,--来源iplw_class1 varchar2(10) not null,--留言板大类pklw_class2 varchar2(20) not null,--论坛栏目pklw_type varchar2(1) not null,--留言类别,即是否为主贴zt_time varchar2(14) ,--主贴时间zt_author varchar2(40) ,--主贴emaillw_content varchar2(4000) ,--内容constraint pk_guestbook primary key(lw_class1,lw_class2,lw_time,lw_author)) storage (initial 5M next 5M pctincrease 1);本文来自: 站长之家() 详细出处参考:/View/30/30010403/5553.htmljsp留言板源代码二: 给jsp初学者. 2000-12-18 00:00 T|T作者: precom (皮蛋) 2000.12.10guestbook.jsp===========================<html><head><META content="text/html; charset=gb2312 " http-equiv=Content-Type><title>张家界电话黄页(网上114)</title></head><style type="text/css"><!--BODY { FONT-FAMIL Y: "宋体","Arial Narrow", "Times New Roman"; FONT-SI ZE: 9pt }.p1 { FONT-FAMIL Y: "宋体", "Arial Narrow", "Times New Roman"; FONT-SIZE: 12pt }A:link { COLOR: #00793d; TEXT-DECORATION: none }A:visited { TEXT-DECORATION: none }A:hover { TEXT-DECORA TION: underline}TD { FONT-FAMIL Y: "宋体", "Arial Narrow", "Times New Roman"; FONT-SIZE: 9pt }.p2 { FONT-FAMIL Y: "宋体", "Arial Narrow", "Times New Roman"; FONT-SIZE: 9pt; LINE-HEIGHT: 150% }.p3 { FONT-FAMIL Y: "宋体", "Arial Narrow", "Times New Roman"; FONT-SIZE: 9pt; LINE-HEIGHT: 120% }--></style><body><%@ page contentType="text/html; charset=GB2312" %><%@ page language="java" import="java.sql.*" %><jsp:useBean id="testInq" scope="page" class="ymbean.opDb" /><%int pages=1;int pagesize=10;int count=0;int totalpages=0;String countsql="",inqsql="",lwhere="",insertsql="",st="";String lw_title="",lw_author="",pagetitle="",author_http="",author_email="",lw_ico="", lw_content="",lw_class1="";String author_ip="",lw_time="",lw_class2="",lw_type="",zt_time="",zt_author="";int answer_num=0,click_num=0;int inquire_item=1;String inquire_itemt="",inquire_value="";String lurlt="<a href=guestbook.jsp?",llink="";lwhere=" where lw_type='z' "; //只显示主贴/*Enumeration e = request.getParameterNames();while (e.hasMoreElements()) {String name = (String) e.nextElement();*/try{//取显示的页页序数pages = new Integer(request.getParameter("pages")).intValue();} catch (Exception e) {}try{//取查询参数inquire_item=new Integer(request.getParameter("range")).intValue();inquire_value=new String(request.getParameter("findstr").getBytes("ISO8859_1"));if(inquire_item==0) inquire_itemt="lw_title";else if(inquire_item==1) inquire_itemt="lw_content";else if(inquire_item==2) inquire_itemt="lw_author";else if(inquire_item==3) inquire_itemt="lw_time";else if(inquire_item==4) inquire_itemt="lw_title";lwhere=lwhere+" and "+inquire_itemt+" like '%"+inquire_value+"% '";lurlt=lurlt+"range="+inquire_item+"&findstr="+inquire_value+"&";} catch (Exception e) {}try{//取得参数留言内容lw_class1=new String(request.getParameter("gbname").getBytes("ISO885 9_1"));lw_title=new String(request.getParameter("lw_title").getBytes("ISO8859_1"));lw_author=new String(request.getParameter("lw_author").getBytes("ISO 8859_1"));pagetitle=new String(request.getParameter("pagetitle").getBytes("ISO 8859_1"));author_http=new String(request.getParameter("author_http").getBytes( "ISO8859_1"));author_email=new String(request.getParameter("author_email").getByte s("ISO8859_1"));lw_ico=request.getParameter("gifface");lw_content=new String(request.getParameter("lw_content").getBytes("I SO8859_1"));String requestMethod=request.getMethod();requestMethod=requestMethod.toUpperCase();if(requestMethod.indexOf("POST")<0){ out.print("非法操作!");return;}//形成其他数据项author_ip=request.getRemoteAddr() ;lw_time=testInq.getCurrentDate("yyyyMMddHHmmss");lw_class2="2";lw_type=""+"z"; //主贴zt_time=lw_time;zt_author=lw_author;answer_num=0;click_num=0;//================st="','";//保证留言所有数据项的长度在正常范围内if(lw_title.length()>50) lw_title=lw_title.substring(0,50);if(lw_author.length()>20) lw_author=lw_author.substring(0,20);if(author_http.length()>40) author_http=author_http.substring(0,40);if(author_email.length()>50) author_email=author_email.substring(0,4 0);if(lw_content.length()>4000) lw_content=lw_content.substring(0,4000) ;insertsql="insert into guestbook values('"+lw_title+st+lw_author+st+ author_http+st+author_email+st+lw_ico+st+lw_time+"',"+answer_num+","+click_num+",'"+author_ip+st+lw_class1+st+lw_class2+st+lw_type+st+zt_time+st+zt_author+st+lw_content+"')";//out.print(insertsql);//插入留言try{String lmsg=testInq.executeUpdate(insertsql);if(lmsg.indexOf("executeUpdate ok")<0)out.print("lmsg="+lmsg);}catch (Exception e) { out.print("错误:"+e);}} catch (Exception e) {}%><%//验证留言输入项合法性的javascriptString ljs=" <SCRIPT language=JavaScript> \n"+" <!-- \n"+" function ValidInput() \n"+" {if(document.sign.lw_author.value==\"\") \n"+" {alert(\"请填写您的大名。
jsp留言板课程设计一、教学目标本课程的目标是让学生掌握JSP留言板的基本原理和实现方法。
通过本课程的学习,学生将能够了解JSP的基本概念,熟悉JSP页面结构和语法,掌握JSP标签库的使用,理解JavaBean的概念及其在JSP中的应用,学会使用数据库存储和管理留言数据,并能够独立设计和实现一个简单的JSP留言板系统。
具体来说,知识目标包括:1.掌握JSP的基本概念和页面结构。
2.熟悉JSP的语法和指令。
3.了解JavaBean的概念及其在JSP中的应用。
4.掌握数据库的基本操作和SQL语句。
技能目标包括:1.能够编写简单的JSP页面。
2.能够使用JSP标签库实现数据的展示和交互。
3.能够使用JavaBean处理业务逻辑。
4.能够使用数据库存储和管理留言数据。
情感态度价值观目标包括:1.培养学生的团队协作能力和自主学习能力。
2.培养学生对编程技术的兴趣和热情。
3.培养学生的创新思维和问题解决能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.JSP基本概念和页面结构。
2.JSP语法和指令。
3.JavaBean在JSP中的应用。
4.数据库的基本操作和SQL语句。
5.JSP标签库的使用。
6.留言板的实现和调试。
具体的教学大纲安排如下:第1-2课时:JSP基本概念和页面结构。
第3-4课时:JSP语法和指令。
第5-6课时:JavaBean在JSP中的应用。
第7-8课时:数据库的基本操作和SQL语句。
第9-10课时:JSP标签库的使用。
第11-12课时:留言板的实现和调试。
三、教学方法为了达到本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:用于讲解JSP的基本概念、语法和指令等基础知识。
2.案例分析法:通过分析实际案例,让学生了解JavaBean在JSP中的应用和JSP标签库的使用。
3.实验法:让学生动手实践,独立设计和实现一个简单的JSP留言板系统。
4.讨论法:在课堂上学生进行小组讨论,培养学生的团队协作能力和问题解决能力。
JSP课程设计报告书—基于jsp留言板For personal use only in study and research; not for commercial use专业:计算机信息管理班级:096111For personal use only in study and research;not for commercial use姓名:钟春连学号:09611108指导老师:姜俊坡东华理工大学二零一一年六月二十日一需求分析随着互联网的迅猛的发展,网站给我们带来不少的便利,于此同时,论坛基本是每个网站必有的功能,为用户之间的交流提供的很好的平台。
我通过仔细的分析和规划,本论坛有如下功能:用户注册,登录,用户信息修改,签写留言,留言查看,回复留言和管理员的普通维护功能等。
这些功能的具体描述如下:1)用户注册模块:用户可已成为本论坛的会员,通过表单把用户的相关信息提交给数据库。
2)登录模块:基本是每个系统必备的模块,本论坛的登录的模块分为两个小模块:普通用户登录,另一个是管理员登录。
3)签写留言模块:这是论坛的主要功能之一,用户把自己感兴趣的话题发表到论坛上,与网上的会员进行探讨。
4)回复留言模块:这也是论坛的主要功能之一,用户对别的用户发表的留言进行回复。
5)普通的维护模块:这是给管理员的功能,该功能对那些危害社会风气的留言删除。
6)用户信息修改模块:用户能对自己的信息进行修改。
二分析和设计(页面和数据库)设计网站论坛时,首先应该区别是普通用户登录还是管理员登录。
如果是普通用户登录,那么该用户只有查看和回复留言的权限。
如果是管理员登录,则除了具有查看和回复权限外,还用具有管理论坛的权限。
在用户发表留言后,将显示该用户的用户名、性别、留言内容和留言时间等内容。
如果在某个留言有回复内容,则显示出是谁恢复了该篇留言和回复的内容。
另外还能在页面中显示当前的系统的时间和访问权限。
数据库设计通过以上的分析:数据库应有四个表,tb_user、td_topic、tb_reply、tb_counter。
LOGIN.JSP<%@ page contentType="text/html;charset=gb2312"%> <html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%// 判断是否有错误信息,如果有则打印// 如果没有此段代码,则显示时会直接打印nullif(request.getAttribute("err")!=null){%><h2><%=request.getAttribute("err")%></h2><%}%><form action="login_conf.jsp" method="post"><table width="80%"><tr><td colspan="2">用户登陆</td></tr><tr><td>用户名:</td><td><input type="text" name="id"></td></tr><tr><td>密码:</td><td><input type="password" name="password"></td> </tr><tr><td colspan="2"><input type="submit" value="登陆"><input type="reset" value="重置"></td></tr></table></form></center></body></html>LOGIN_CONF.JSP<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.sql.*"%><html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%!String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;String DBURL = "jdbc:oracle:thin:@localhost:1521:three" ;String DBUSER = "scott" ;String DBPASSWORD = "tiger" ;Connection conn = null ;PreparedStatement pstmt = null ;ResultSet rs = null ;%><%// 声明一个boolean变量,用于保存用户是否合法的状态boolean flag = false ;// 接收参数String id = request.getParameter("id") ;String password = request.getParameter("password") ;%><%String sql = "SELECT name FROM person WHERE id=? and password=?" ; try{Class.forName(DBDRIVER) ;conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ; pstmt = conn.prepareStatement(sql) ;pstmt.setString(1,id) ;pstmt.setString(2,password) ;rs = pstmt.executeQuery() ;if(rs.next()){// 用户合法flag = true ;// 将用户名保存在session之中session.setAttribute("uname",rs.getString(1)) ;}else{// 保存错误信息request.setAttribute("err","错误的用户名及密码!!!") ; }rs.close() ;pstmt.close() ;conn.close() ;}catch(Exception e){}%><%// 跳转if(flag){// 用户合法%><jsp:forward page="login_success.jsp"/>}else{// 用户非法%><jsp:forward page="login.jsp"/><%}%></center></body></html>LOGIN_SUCCESS.JSP<%@ page contentType="text/html;charset=gb2312"%> <html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%if(session.getAttribute("uname")!=null)// 用户已登陆%><h2>登陆成功</h2><h2>欢迎<font color="red" size="12"><%=session.getAttribute("uname")%></font>光临MLDN留言程序</h2><h3><a href="list_notes.jsp">进入留言管理页面</a></h3> <%}else{// 用户未登陆,提示用户登陆,并跳转response.setHeader("refresh","2;URL=login.jsp") ;%>您还未登陆,请先登陆!!!<br>两秒后自动跳转到登陆窗口!!!<br>如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br> <%}%></center></body></html>INSERT.JSP<%@ page contentType="text/html;charset=gb2312"%> <html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%if(session.getAttribute("uname")!=null){// 用户已登陆%><form action="insert_do.jsp" method="post"><table><tr><td colspan="2">添加新留言</td></tr><tr><td>标题:</td><td><input type="text" name="title"></td></tr><tr><td>作者:</td><td><input type="text" name="author"></td></tr><td>内容:</td><td><textarea name="content" cols="30" rows="6"></textarea></td> </tr><tr><td colspan="2"><input type="submit" value="添加"><input type="reset" value="重置"></td></tr></table></form><h3><a href="list_notes.jsp">回到留言列表页</a></h3><%}else{// 用户未登陆,提示用户登陆,并跳转response.setHeader("refresh","2;URL=login.jsp") ;%>您还未登陆,请先登陆!!!<br>两秒后自动跳转到登陆窗口!!!<br>如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br><%}%></center></body>INSERT_DO.JSP<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.sql.*"%><html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%// 进行乱码处理request.setCharacterEncoding("GB2312") ;%><%if(session.getAttribute("uname")!=null){// 用户已登陆%><%!String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;String DBURL = "jdbc:oracle:thin:@localhost:1521:three" ; String DBUSER = "scott" ;String DBPASSWORD = "tiger" ;Connection conn = null ;PreparedStatement pstmt = null ;%><%// 声明一个boolean变量boolean flag = false ;// 接收参数String title = request.getParameter("title") ;String author = request.getParameter("author") ;String content = request.getParameter("content") ;%><%// 现在note表中的主键是sequence生成String sql = "INSERT INTO note VALUES(note_sequ.nextVal,?,?,?)" ;try{Class.forName(DBDRIVER) ;conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ; pstmt = conn.prepareStatement(sql) ;pstmt.setString(1,title) ;pstmt.setString(2,author) ;pstmt.setString(3,content) ;pstmt.executeUpdate() ;pstmt.close() ;conn.close() ;// 如果插入成功,则肯定能执行到此段代码flag = true ;}catch(Exception e){}%><%response.setHeader("refresh","2;URL=list_notes.jsp") ;if(flag){%>留言添加成功,两秒后跳转到留言列表页!!!<br>如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!<%}else{%>留言添加失败,两秒后跳转到留言列表页!!!<br>如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!<%}%><%}else{// 用户未登陆,提示用户登陆,并跳转response.setHeader("refresh","2;URL=login.jsp") ;%>您还未登陆,请先登陆!!!<br>两秒后自动跳转到登陆窗口!!!<br>如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br> <%}%></center></body></html>LIST_NOTES.JSP<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*"%><html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%// 编码转换request.setCharacterEncoding("GB2312") ;if(session.getAttribute("uname")!=null)// 用户已登陆%><%!String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;String DBURL = "jdbc:oracle:thin:@localhost:1521:three" ;String DBUSER = "scott" ;String DBPASSWORD = "tiger" ;Connection conn = null ;PreparedStatement pstmt = null ;ResultSet rs = null ;%><%// 如果有内容,则修改变量i,如果没有,则根据i的值进行无内容提示int i = 0 ;String sql = null;String keyword = request.getParameter("keyword") ;// out.println(keyword) ;if(keyword==null){// 没有任何查询条件sql = "SELECT id,title,author,content FROM note" ;}else{// 有查询条件sql = "SELECT id,title,author,content FROM note WHERE title like ? or author like ? or content like ?" ;}try{Class.forName(DBDRIVER) ;conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ; pstmt = conn.prepareStatement(sql) ;// 如果存在查询内容,则需要设置查询条件if(keyword!=null){// 存在查询条件pstmt.setString(1,"%"+keyword+"%") ;pstmt.setString(2,"%"+keyword+"%") ;pstmt.setString(3,"%"+keyword+"%") ;}rs = pstmt.executeQuery() ;%><form action="list_notes.jsp" method="POST">请输入查询内容:<input type="text" name="keyword"><input type="submit" value="查询"></form><h3><a href="insert.jsp">添加新留言</a></h3><table width="80%" border="1"><tr><td>留言ID</td><td>标题</td><td>作者</td><td>内容</td><td>删除</td></tr><%while(rs.next()){i++ ;// 进行循环打印,打印出所有的内容,以表格形式// 从数据库中取出内容int id = rs.getInt(1) ;String title = rs.getString(2) ;String author = rs.getString(3) ;String content = rs.getString(4) ;if(keyword!=null){// 需要将数据返红title = title.replaceAll(keyword,"<font color=\"red\">"+keyword+"</font>") ; author = author.replaceAll(keyword,"<fontcolor=\"red\">"+keyword+"</font>") ;content = content.replaceAll(keyword,"<fontcolor=\"red\">"+keyword+"</font>") ;}%><tr><td><%=id%></td><td><a href="update.jsp?id=<%=id%>"><%=title%></a></td><td><%=author%></td><td><%=content%></td><td><a href="delete_do.jsp?id=<%=id%>">删除</a></td> </tr><%}// 判断i的值是否改变,如果改变,则表示有内容,反之,无内容 if(i==0){// 进行提示%><tr><td colspan="5">没有任何内容!!!</td></tr><%}%></table><%rs.close() ;pstmt.close() ;conn.close() ;}catch(Exception e){}%><%}else{// 用户未登陆,提示用户登陆,并跳转response.setHeader("refresh","2;URL=login.jsp") ;%>您还未登陆,请先登陆!!!<br>两秒后自动跳转到登陆窗口!!!<br>如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br> <%}%></center></body></html>UPDATE.JSP<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*"%><html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%if(session.getAttribute("uname")!=null){// 用户已登陆%><%!String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;String DBURL = "jdbc:oracle:thin:@localhost:1521:three" ;String DBUSER = "scott" ;String DBPASSWORD = "tiger" ;Connection conn = null ;PreparedStatement pstmt = null ;ResultSet rs = null ;%><%// 接收参数int id = 0 ;try{id = Integer.parseInt(request.getParameter("id")) ;}catch(Exception e){}%><%// 如果有内容,则修改变量i,如果没有,则根据i的值进行无内容提示 int i = 0 ;String sql = "SELECT id,title,author,content FROM note WHERE id=?" ; try{Class.forName(DBDRIVER) ;conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;pstmt = conn.prepareStatement(sql) ;// 设置查询条件pstmt.setInt(1,id) ;rs = pstmt.executeQuery() ;%><%if(rs.next()){i++ ;// 进行循环打印,打印出所有的内容,以表格形式// 从数据库中取出内容id = rs.getInt(1) ;String title = rs.getString(2) ;String author = rs.getString(3) ;String content = rs.getString(4) ;%><form action="update_do.jsp" method="post"><table><tr><td colspan="2">添加新留言</td></tr><tr><td>标题:</td><td><input type="text" name="title" value="<%=title%>"></td></tr><tr><td>作者:</td><td><input type="text" name="author" value="<%=author%>"></td></tr><tr><td>内容:</td><td><textarea name="content" cols="30"rows="6"><%=content%></textarea></td></tr><tr><td colspan="2"><input type="hidden" name="id" value="<%=id%>"> <input type="submit" value="更新"><input type="reset" value="重置"></td></tr></table></form><%}else{%>没有发现,要更新的内容!!<br>请确认要更新的留言是否存在!!<br><%}%><%rs.close() ;pstmt.close() ;conn.close() ;}catch(Exception e){}%><h3><a href="list_notes.jsp">回到留言列表页</a></h3><%}else{// 用户未登陆,提示用户登陆,并跳转response.setHeader("refresh","2;URL=login.jsp") ;%>您还未登陆,请先登陆!!!<br>两秒后自动跳转到登陆窗口!!!<br>如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br> <%}%></center></body></html>UPDATE_DO.JSP<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*"%><html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%// 进行乱码处理request.setCharacterEncoding("GB2312") ;%><%if(session.getAttribute("uname")!=null){// 用户已登陆%><%!String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;String DBURL = "jdbc:oracle:thin:@localhost:1521:three" ; String DBUSER = "scott" ;String DBPASSWORD = "tiger" ;Connection conn = null ;PreparedStatement pstmt = null ;%><%// 声明一个boolean变量boolean flag = false ;// 接收参数String title = request.getParameter("title") ;String author = request.getParameter("author") ;String content = request.getParameter("content") ;int id = 0 ;try{id = Integer.parseInt(request.getParameter("id")) ;}catch(Exception e){}%><%// 更新note表中的数据String sql = "UPDATE note set title=?,author=?,content=? WHERE id=?" ; try{Class.forName(DBDRIVER) ;conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ; pstmt = conn.prepareStatement(sql) ;pstmt.setString(1,title) ;pstmt.setString(2,author) ;pstmt.setString(3,content) ;pstmt.setInt(4,id);pstmt.executeUpdate() ;pstmt.close() ;conn.close() ;// 如果修改成功,则肯定能执行到此段代码flag = true ;}catch(Exception e){}%><%response.setHeader("refresh","2;URL=list_notes.jsp") ;if(flag){%>留言修改成功,两秒后跳转到留言列表页!!!<br>如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!<%}else{%>留言修改失败,两秒后跳转到留言列表页!!!<br>如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!<%}%><%}else{// 用户未登陆,提示用户登陆,并跳转response.setHeader("refresh","2;URL=login.jsp") ;%>您还未登陆,请先登陆!!!<br>两秒后自动跳转到登陆窗口!!!<br>如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br> <%}%></center></body></html>DELETE_DO.JSP<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*"%><html><head><title>JSP+JDBC 留言管理程序――登陆</title></head><body><center><h1>留言管理范例―― JSP + JDBC实现</h1><hr><br><%if(session.getAttribute("uname")!=null){// 用户已登陆%><%!String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;String DBURL = "jdbc:oracle:thin:@localhost:1521:three" ;String DBUSER = "scott" ;String DBPASSWORD = "tiger" ;Connection conn = null ;PreparedStatement pstmt = null ;%><%// 接收参数int id = 0 ;try{id = Integer.parseInt(request.getParameter("id")) ;}catch(Exception e){}%><%String sql = "DELETE FROM note WHERE id=?" ;boolean flag = false ;try{Class.forName(DBDRIVER) ;conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ; pstmt = conn.prepareStatement(sql) ;// 设置删除条件pstmt.setInt(1,id) ;pstmt.executeUpdate() ;pstmt.close() ;conn.close() ;flag = true ;}catch(Exception e){}%><%response.setHeader("refresh","2;URL=list_notes.jsp") ;if(flag){%>留言删除成功,两秒后跳转到留言列表页!!!<br>如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!<%}else{%>留言删除失败,两秒后跳转到留言列表页!!!<br>如果没有跳转,请按<a href="list_notes.jsp">这里</a>!!!<%}%><%}else{// 用户未登陆,提示用户登陆,并跳转response.setHeader("refresh","2;URL=login.jsp") ;%>您还未登陆,请先登陆!!!<br>两秒后自动跳转到登陆窗口!!!<br>如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br> <%}%></center></body></html>-- 创建表-- 用户表(登陆)、留言表-- 删除表DROP TABLE person ;DROP TABLE note ;-- 删除序列DROP SEQUENCE note_sequ ;-- 创建序列CREATE SEQUENCE note_sequ ;-- 创建person表CREATE TABLE person(id varchar(20) not null primary key ,name varchar(20) ,password varchar(20)) ;-- 创建留言表CREATE TABLE note(id int not null primary key , -- sequencetitle varchar(20) not null ,author varchar(20) not null ,content varchar(50) not null) ;-- 插入测试数据INSERT INTO person VALUES ('LXH','李兴华','zzzzzz') ; INSERT INTO person VALUES ('MLDN','魔乐','mmmmmm') ;。
jsp课程设计留言簿一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:学生需要掌握JSP的基本概念、原理和编程方法,了解JSP在Web开发中的应用和优势。
2.技能目标:学生能够熟练使用JSP编写简单的Web应用程序,掌握JSP的内置对象、标签库和脚本语言等开发技巧。
3.情感态度价值观目标:培养学生对JSP编程的兴趣和热情,提高学生解决问题的能力和团队合作精神。
通过本课程的学习,学生将能够了解JSP的基本知识,掌握JSP编程方法,并具备实际应用JSP开发Web应用程序的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.JSP基本概念:介绍JSP的定义、特点和应用场景,使学生了解JSP的基本概念。
2.JSP编程基础:讲解JSP的语法规则、内置对象、标签库和脚本语言等基本知识,培养学生编写简单的JSP页面。
3.JSP高级应用:深入学习JSP的高级功能,如会话管理、文件上传下载、数据库访问等,提高学生开发复杂Web应用程序的能力。
4.实战项目:通过实际项目的开发,使学生将所学知识运用到实际工作中,培养学生的实际操作能力和解决问题的能力。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解JSP的基本概念和原理,使学生掌握JSP的基础知识。
2.案例分析法:分析实际项目案例,让学生了解JSP在实际应用中的优势和特点。
3.实验法:安排实验课,让学生动手编写JSP代码,培养学生的实际操作能力。
4.小组讨论法:学生进行小组讨论,分享学习心得和经验,提高学生的团队合作精神。
四、教学资源为了支持本课程的教学内容和教学方法,我们将提供以下教学资源:1.教材:选择权威、实用的JSP教材,为学生提供系统的学习资料。
2.参考书:提供相关的JSP参考书籍,丰富学生的知识体系。
3.多媒体资料:制作课件、教学视频等多媒体资料,增强课堂教学的趣味性。
4.实验设备:提供计算机、服务器等实验设备,确保学生能够进行实际操作。
用JSP打造一个留言板2001-04-24·陈小冲·yeskyJSP是JavaServer Pages的简称,是一种集成HTML及Java程序于一个网页的技术。
我觉得使用JSP编写程序比ASP、PHP等语言更具有挑战性,更能学到知识,因为它涉及到面向对象的JA VA语言,要用好JSP,就得对JAV A有一定的了解。
除此之外,还要求能熟练使用各种开发工具,像Dreamweaver、Photoshop、JBuilder等。
工欲善其事,必先利其器。
在运行JSP程序之前,必须做一些准备工作。
首先要有一个WEB伺服器,Apache或IIS都可以;其次要有一个执行JA VA程序的的编译器;再次还要有一个支持JSP的引擎,目前有很多引擎可供选择,例如tomcat、weblogic、resin等。
本问介绍的留言板程序在作者的机器上可以顺利运行,详细资料如下:操作系统: Windows 2000 SERVERJA VA编译器:JDK1.3WEB伺服器:Apache1.13.2 + Tomcat3.1引擎数据库:Access 2000Apache和Tomcat安装后的配置有点挑战性,下面是我的安装过程:1).安装JDK1.3a).双击J2SDK1_3_0-WIN.exe 文件,安装到C:\jdk1.3 目录下;b).更新下列环境变量,把C:\jdk1.3\lib\tools.jar;C:\jdk1.3\lib\dt.jar; C:\myclasses加入到CLASSPA TH中。
更新方法:右击我的电脑-属性-高级-环境变量;c).重起计算机。
2).安装Apache1.13.2a).双击apache_1_3_12_win32.exe 文件,安装到C:\Apache 目录下;b).用记事本修改C:\Apache\conf\httpd.conf:I).PORT:设置Apache Web Server运行时使用的端口号,我把它改成Port 8080,以后在浏览器上输入http://ip:8080 就可以访问到Apache Web Server服务器;II).SERVERNAME:我把SERVERNAME设置为202.38.126.134(这是我的机器的IP地址);III).Apache安装完后在"开始-程序"菜单组中多了Apache Web Server菜单组,运行其中的Install Apache as a service,这样的话在“开始-设置-控制面板-服务”中就多了一个名为Apache的服务,您可以用它来启动或停止Apache服务;IV).打开“开始-设置-控制面板-服务”,选Apache,按"开始"启动Apache服务。
c).在IE中输入http://ip:8080 (ip是你使用的机器的ip地址),Apache运行否?3).安装Tomcat3.1a).用WinZIP把tomcat.zip解压缩到一个目录下,最后弄成C:/tomcat;b).打开C:\Apache\conf\httpd.conf文件,在该文件最后加上类似这样一句话: Include C:/tomcat/conf/tomcat.conf;c).修改Tomcat运行的端口号,注意Tomcat自己有一个独立的HTTP服务器,它必须使用一个还未被使用的端口号,我使用PORT:80,在C:\tomcat\conf\server.xml中修改;d).将SET TOMCA T_HOME=c:\tomcatSET JA V A_HOME=c:\jdk1.3 加到C:\tomcat\bin\tomcat.bat文件中,修改完的文件如下:......rem Guess TOMCA T_HOME if it is not presentSET TOMCA T_HOME=c:\tomcatSET JA V A_HOME=c:\jdk1.3 if not "%TOMCA T_HOME%" == "" goto gothome下面还有......e).双击C:\tomcat\startup.bat启动Tomcat;f).在浏览器上输入http://ip/,如果能看到Tomcat V ersion 3.1这一页,就表示Tomcat 安装成功了。
到此准备工作也就差不多了,最后在Tomcat目录下创建一个目录,用来存放编写的程序,具体情况如下:C:\tomcat\fox --存放.html和.jsp 文件C:\tomcat\fox\images --存放图片文件C:\tomcat\fox\global --存放数据库C:\tomcat\fox\WEB-INF\classes --存放JA V A类文件为了使这个目录下的JSP程序能顺利运行,还需要在C:\tomcat\conf\ server.xml文件中加上几行代码:<Context path="/fox" docBase="fox"defaultSessionTimeOut="30"isWARExpanded="true"isWARV alidated="false" isInvokerEnabled="true"isWorkDirPersistent="false"/>添加完代码后的server.xml文件看起来如下所示:......<Context path="" docBase="webapps/ROOT" debug="0" reloadable="true" ></Context><Context path="/redfox" docBase="redfox" defaultSessionTimeOut="30" isWARExpanded="true" isWARV alidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/><Context path="/test" docBase="webapps/test" debug="0" reloadable="true" ></Context>下面还有......现在编写一个名为test.jsp的程序,存于C:\tomcat\fox\test.jsp<html><body><%java.util.Date date=new java.util.Date(); %>Hello! the time is now<%out.println(date);%></body></html>在IE中键入http://ip/fox/test.jsp,如果能看到当前的时间,那么恭喜:可以开始编写留言板程序了。
一.创建数据库1).打开Access2000,创建一个新的数据库,我将这个数据库命名为foxdb.mdb,存在C:\tomcat\fox\global\foxdb.mdb。
接下来在foxdb.mdb中创建一个表,命名为foxtable,表中有五个字段,全为文本格式:其中“URL”用于记录留言者的IP 。
至于各字段的长度,我把“留言”定为200,其它四个各为20。
2).指定ODBC数据源,其名为foxdb ,指向C:\tomcat\fox\global\foxdb.mdb。
二.编写用户的留言界面foxnote.html,存于C:\tomcat\fox\foxnote.html:<html><body><form method="post" action="foxnoteinsert.jsp"><br>姓名:<input name=username size=15 value=""><br>邮箱:<input name=email size=15 value=""><br>留言:<br><textarea name=doc rows="5" cols="40"></textarea><br><input type=submit value="递交"><input type=reset value="重填"></form></body></html>在IE中键入http://ip/fox/foxnote.html 看看是否显示正常三.编写foxnoteinsert.jsp ,将用户的留言写进数据库表中:<body bgcolor="#FFFFFF"><%@ page import="java.sql.*,MyUtil,java.util.*"%><%Connection con=null;String username=MyUtil.gb2312ToUnicode(request.getParameter("username"));String email=MyUtil.gb2312ToUnicode(request.getParameter("email"));String doc=MyUtil.gb2312ToUnicode(request.getParameter("doc"));String url=request.getRemoteAddr();try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");con=DriverManager.getConnection("jdbc:odbc:foxdb","","");String str="insert into foxtable values(?,?,?,?);";PreparedStatement pstmt=con.prepareStatement(str);pstmt.setString(1,username);pstmt.setString(2,email);pstmt.setString(3,doc);pstmt.setString(4,url);pstmt.executeUpdate();pstmt.close();con.close();} catch(Exception e) {out.println(e.getMessage());}%>这个程序中有一些要说明的地方,就是其中用到了一个JavaBean :MyUtil.class 。