Java Web学习交流网的设计(模仿百度贴吧)

本文介绍了一个基于JavaWeb技术的贴吧模拟系统的设计与实现过程,包括数据库设计、页面功能搭建等关键技术点。


Java Web学习交流网(模仿百度贴吧)

一、实验目的

1、连接MySQL数据库

2、读取数据库到web页面

 

二、实验要求

1、设计一个贴吧使用户可以注册、提问、回答


三、实验步骤

1、实验准备

安装mysql

安装navicat

MySQLjar包引入MyEclipse

2、功能结构图


3、设计数据库

a  定义三个表

useruidname

questionqiduidtitlecontenttime

answeraidqiduidcontenttime

b  通过e-r图分析三者之间的关系



c 数据库代码

CREATE DATABASE TB;  
  
USE TB;  
  
//创建表格  
CREATE TABLE USER  
(  
        UID INT(10) NOT NULL AUTO_INCREMENT,  
        NAME VARCHAR(20) NOT NULL, 
	PASSWORD VARCHAR(10) NOT NULL,
        PRIMARY KEY(UID)  
)ENGINE=INNODB DEFAULT CHARSET=gb2312;  
  
CREATE TABLE QUESTION  
(  
        QID INT(10) NOT NULL AUTO_INCREMENT,  
        UID INT(10),  
        TITLE VARCHAR(20),  
        CONTENT VARCHAR(100) NOT NULL,  
        TIME VARCHAR(15) NOT NULL,  
        FOREIGN KEY(UID) REFERENCES USER(UID),  
        PRIMARY KEY(QID)  
)ENGINE=INNODB DEFAULT CHARSET=gb2312;  
  
CREATE TABLE ANSWER  
(  
        AID INT(10) NOT NULL AUTO_INCREMENT,  
        QID INT(10),  
        UID INT(10),  
        CONTENT VARCHAR(200) NOT NULL,  
        TIME VARCHAR(15) NOT NULL,  
        FOREIGN KEY(QID) REFERENCES QUESTION(QID),  
        FOREIGN KEY(UID) REFERENCES USER(UID),  
        PRIMARY KEY(AID,QID)  
)ENGINE=INNODB DEFAULT CHARSET=gb2312;  
  
//插入数据  
INSERT INTO USER(UID,NAME,PASSWORD) VALUES  
(1,'张三','111'),  
(2,'李四','222'),  
(3,'王五','333');  
  
INSERT INTO QUESTION(QID,UID,TITLE,CONTENT,TIME) VALUES  
(1,1,'计算','1+1=?','2014-3-2'),  
(2,1,'天气','今天晴天吗?','2014-3-7'),  
(3,2,'日期','明天星期几?','2014-3-9'),  
(4,3,'温度','后天多少度?','2014-4-5');  
  
INSERT INTO ANSWER(AID,QID,UID,CONTENT,TIME) VALUES  
(1,2,2,'今天晴天','2014-3-7'),  
(2,2,3,'今天晴天','2014-3-7'),  
(3,1,2,'1+1=2','2014-3-10'),  
(4,1,3,'1+1=2','2014-3-17'),  
(5,3,2,'今天星期二','2014-3-11'),  
(6,4,1,'后天20度','2014-4-5');  
  
SELECT * FROM USER  
  
SELECT * FROM QUESTION  
  
SELECT * FROM ANSWER  


4、设计java web页面

a 建立三个jsp页面(register.jsp  login.jsp  show.jsp  question.jsp  answer.jsp)

b 具体实现思路:

           1)首先设计register.jsp注册页面,

           2)当用户注册成功后直接进入login.jsp

           3)成功登录的进入index.jsp页面。index.jsp其主要功能是显示数据库中保存的问题,在“管理”一栏中有“查看”或者“浏览(超链接)。

           4)当点击"查看"时页面跳转到question. jsp页面(跳转页面时带有question的id参数),此页面中显示问题的标题发布时间具体内容提问者用户信息,问题下面有一个查看回答的连接

          5)当点击回答按钮时页面跳转到answer.jsp(带着Question的id),answer.jsp页面中第一个任务是:显示指定的这个问题的回答次数,第二个任务是罗列回答的内容、回答者信息、回答时间;第三个任务是,在最下方设计添加一个回答的表单,其action=“addAnswer.jsp”。

          6)addAnswer.jsp处理answer.jsp表单提交的回答数据,处理后正确的5秒内返回第5步(上一步)显示回答页的最新数据(能够看到多了一个回答)。错误的返回上一页面(可以尝试记着上次的输入数据)。


注意:同时每个页面都可以返回到主页

        (可参考课本项目6.3---图书管理系统

c 实验结果:

  1)输入用户名和密码(张三:111   李四:222  王五:333),如果输入正确会提示“登陆成功”,否则提示“注册用户”。(可参考index.jsp


  2)输入正确后跳转到show.jsp。点击“提出问题”时,用户可以添加自己的问题;点击“查看”时,用户可以查看当前问题

  3)当点击“查看”时,可以查看问题的标题、时间、内容和提问者的信息。点击返回时可以返回到show.jsp界面,同时也可以点击查看回答信息


  4)当点击查看回答信息时,可以查看回答的时间、内容、回答者。点击返回时可以返回到show.jsp界面,同时可点击回答


  5)当点击回答时可以添加自己的回答信息。点击添加跳转到查看回答信息界面


  6)当在show.jsp中点击提问问题时


d 主要代码:

index.jsp

<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>登录</title>
	
  </head>
  
  <body>
    <center>
    <h1>登录界面</h1>
    <form action="" method="post">
    用户名:<input type="text" name="name"><br>
    密码:<input type="password" name="pwd"><br>
    <input type="submit" name="submit" value="登录">
    <input type="submit" name="register" value="注册">
    </form>
    <%
    request.setCharacterEncoding("utf-8");
    String name=request.getParameter("name");
    String pwd=request.getParameter("pwd");
    String submit=request.getParameter("submit");
    String register=request.getParameter("register");
    int biaoji=0;
    
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/TB","root","123");
    Statement stmt=con.createStatement();
   	String s="select * from user";
   	ResultSet rs=stmt.executeQuery(s);
   	if(submit!=null&&register==null)
   	{
	    while(rs.next())
	    {
	        int uid=rs.getInt(1);
	         if(rs.getString(2).equals(name)&&rs.getString(3).equals(pwd))
	        {
		         session.setAttribute("sessionname",uid);
		         out.println("<script language='javaScript'>alert('登陆成功,单击确定跳到主页!')</script>");
		         response.setHeader("refresh", "1;url=show.jsp");
		         biaoji=1;
		         break;
	        }
	    }
	    if(biaoji==0)
	    {
	    	   out.println("<script language='javaScript'>alert('没有此用户,单击确定注册新用户!')</script>");
	    }
	 }
	  if(register!=null&&submit==null)
	{
	   session.setAttribute("sessionname", name);
	   session.setAttribute("sessionpwd", pwd);
	   String sql="insert into user(name) values('"+name+"')";
	   int i=stmt.executeUpdate(sql);
	   
	   if(i==1)
	   {
		   out.println("<script language='javaScript'>alert('注册成功,单击确定跳到主页!')</script>");
		   response.setHeader("refresh", "1;url=index.jsp");
	   }
    }
  
	
   %>
    </center>
  </body>
</html>
show.jsp

<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'show.jsp' starting page</title>
  </head>
  
  <body>
    <center>
    <caption><a href='addquestion.jsp'>提出问题</a></caption>
    <table align="center" width="30%" border=1>
    	<tr><th>标题</th><th>管理</th></tr>
    	<%
    	Class.forName("com.mysql.jdbc.Driver");
    	Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/TB","root","123");
    	Statement stmt=con.createStatement();
   		String s="select * from question";
   		ResultSet rs=stmt.executeQuery(s);
    	while(rs.next())
    	{
    		int qid=rs.getInt(1);
    		out.println("<tr><td>"+rs.getString(3)+"</td><td><a href='question.jsp?qid="+rs.getString(1)+"'>查看</a></td></tr>");
    	}
    	rs.close();
    	stmt.close();
    	con.close();
    	 %>
    </table>
    </center>
  </body>
</html>

question.jsp

<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>问题信息</title>

  </head>
   
  <body>
  <center>
    	<%
    	
    	Class.forName("com.mysql.jdbc.Driver");
    	Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/TB","root","123");
    	Statement stmt=con.createStatement();
    	String qid=request.getParameter("qid");
   		String s="SELECT QID,NAME,TITLE,CONTENT,TIME FROM QUESTION,USER WHERE USER.UID=QUESTION.UID and qid="+qid;
   		ResultSet rs=stmt.executeQuery(s);
   		rs.next();
   		%>
   		<form action=question.jsp method="post">
   		<table align="center" width="20%" border=1>
   		<caption>查看问题信息</caption>
   		<tr><td>标题:<%=rs.getString(3)%>                 时间:<%=rs.getString(5)%></td></tr>
   		<tr><td>内容:<input name="qcontent" type="text" value="<%=rs.getString(4)%>"></td></tr>
   		<tr><td>提问者:<input name="quser" type="text" value="<%=rs.getString(2)%>"></td></tr>
   		<tr><td><a href='show.jsp'>返回</a> <a href='answer.jsp?qid=<%=rs.getString(1) %>'> 查看回答内容 </a></td></tr>
   		</table>
   		</form>
    	<% 
    	rs.close();
    	stmt.close();
    	con.close();
    	 %>
    	 </center>
  </body>
</html>

answer.jsp

<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>查看回答信息</title>
    

  </head>
  
  <body>
    <center>
    <table align="center" width="50%" border=1>
    	<%
    	Class.forName("com.mysql.jdbc.Driver");
    	Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/TB","root","123");
    	Statement stmt=con.createStatement();
   		String s="select name,qid,answer.content,answer.time from USER,answer where user.uid=answer.uid and qid="+request.getParameter("qid");
   		ResultSet rs=stmt.executeQuery(s);
   		
   		
   		%>
   		<form action=answer.jsp method="post">
   		<table align="center" width="20%" border=1>
   		
   		<caption>查看回答内容</caption>
   		<%while(rs.next()) {%>
   		<tr><td>                时间:<%=rs.getString(4)%></td></tr>
   		<tr><td>内容:<input name="acontent" type="text" value="<%=rs.getString(3)%>"></td></tr>
   		<tr><td>回答者:<input name="auser" type="text" value="<%=rs.getString(1)%>"></td></tr>
   		<tr><td><a href='show.jsp'>返回</a> <a href='addanswer.jsp?qid=<%=rs.getString(2)%>'> 回答 </a></td></tr>
   		<%} %>
   		</table>
   		</form>
    	<%
    	rs.close();
    	stmt.close();
    	con.close();
    	 %>
    </table>
    </center>
  </body>
</html>

addanswer.jsp

<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<html>
  <head>
    
    <title>添加回答</title>
  </head>
  
  <body>
 	<% 
 	 request.setCharacterEncoding("UTF-8");
 	String qid=request.getParameter("qid"); %>
    <form action="addanswer.jsp" method="post">
    <table align="center" width="40%" border=1>
    <caption>添加回答内容</caption>
    	<tr>
    		<th>回答内容</th>
    		<td>
    			<textarea name="myanswer" row="5" cols="60"> </textarea>
    			<input type="hidden" name="qid" value="<%=qid%>">
    		</td>
    		
    		
    	</tr>
    	<tr>
    		<th colspan="2">
    		<input type="submit" name="submit" value="添加">
    		<input type="reset" value="重置">
    	</tr>
    </table>
    </form>
    <%
   
   
    String content=request.getParameter("myanswer");
    //String time=request.getParameter("time");
    String submit=request.getParameter("submit");
    
    
    
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/TB","root","123");
    Statement stmt=con.createStatement();
    	
    if(submit!=null&&!submit.equals(""))
    {
    		
    	String s="insert into answer(qid,uid,content,TIME) values("+qid+","+session.getAttribute("sessionname")+",'"+content+"','2014')";
    	  int i=stmt.executeUpdate(s);
    	if(i==1)
    	{
    		out.println("<script language='javascript'>alter('添加成功,单击确定跳转到回答页面');</script>");
    		response.setHeader("refresh", "1;url=answer.jsp?qid="+qid);
    	}
    	else{
    		out.println("<script language='javascript'>alter('添加失败,单击确定跳转到添加页面');</script>");
    		response.setHeader("refresh", "1;url=addanswer.jsp");
    	}  
    	
    	
    }
     stmt.close();
    con.close(); 
     %>
  </body>
</html>

addquestion.jsp

<%@ page language="java" import="java.sql.*" pageEncoding="UTF-8"%>
<html>
  <head>
    
    <title>添加回答</title>
  </head>
  
  <body>
 	<% 
 	 request.setCharacterEncoding("UTF-8");
 	String qid=request.getParameter("qid"); %>
    <form action="addanswer.jsp" method="post">
    <table align="center" width="40%" border=1>
    <caption>添加回答内容</caption>
    	<tr>
    		<th>回答内容</th>
    		<td>
    			<textarea name="myanswer" row="5" cols="60"> </textarea>
    			<input type="hidden" name="qid" value="<%=qid%>">
    		</td>
    		
    		
    	</tr>
    	<tr>
    		<th colspan="2">
    		<input type="submit" name="submit" value="添加">
    		<input type="reset" value="重置">
    	</tr>
    </table>
    </form>
    <%
   
   
    String content=request.getParameter("myanswer");
    //String time=request.getParameter("time");
    String submit=request.getParameter("submit");
    
    
    
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/TB","root","123");
    Statement stmt=con.createStatement();
    	
    if(submit!=null&&!submit.equals(""))
    {
    		
    	String s="insert into answer(qid,uid,content,TIME) values("+qid+","+session.getAttribute("sessionname")+",'"+content+"','2014')";
    	  int i=stmt.executeUpdate(s);
    	if(i==1)
    	{
    		out.println("<script language='javascript'>alter('添加成功,单击确定跳转到回答页面');</script>");
    		response.setHeader("refresh", "1;url=answer.jsp?qid="+qid);
    	}
    	else{
    		out.println("<script language='javascript'>alter('添加失败,单击确定跳转到添加页面');</script>");
    		response.setHeader("refresh", "1;url=addanswer.jsp");
    	}  
    	
    	
    }
     stmt.close();
    con.close(); 
     %>
  </body>
</html>








转载于:https://www.cnblogs.com/cnlht/p/9495660.html

用户名,Email地址,昵称 ajax无刷新验证是否已注册 非空验证 用户名验证:由英文字母和数字组成的4-16位字符,以字母开头! 邮箱验证:Email格式不正确,例如web@sohu.com 昵称验证:由汉字组成的2-8位字符! 密码验证:密码不能含有非法字符,长度在4-10之间 再次输入密码验证:两次输入密码不一致! 注册成功后用户直接保存在session里进入登录页面 搜索框实现智能联想(根据关键字联想贴吧名搜索) 登录成功用户保存在session中显示用户昵称 登录失败显示(登录失败!请重新) 注销可以销毁session中的用户对象 横条广告用flash制作替换效果 个人中心显示用户头像及昵称 奇吧朵朵展示留个贴吧信息(滚动文字) 最新话题展示最新发帖标题并可点击进入 常逛贴吧由用户登录后显示 贴吧分类显示不同类型贴吧鼠标移动上去展示贴吧名 热帖分类展示四个贴吧四条回复 热帖排行榜显示回复最多三个帖子 顶部展示贴吧名称,会员数,帖子数,以及帖吧简介 帖子显示回复次数,标题,内容25字符发帖昵称以及发帖时间 签到按钮可以判断是否登录,签到成功次数加一,提示以签到 显示用户头像和昵称 恢复按钮AJAX判断是否登录,登录后方可发帖 右侧游戏动态加载 翻页可实现看第一页,向前和向后翻页 顶部显示广告,帖子标题 只看楼主可实现只看楼主发表内容,取消只看楼主查看全部回复 显示回复用户头像和昵称,回复内容签名档,楼层,发表时间 关注AJAX判断用户是否已登录,关注成功次数加一,已关注提示 鼠标移动到用户头像可查看用户信息 实现翻页功能 回复条数,返回当前贴吧 回复按钮AJAX判断是否已登录,登陆后方可发帖 我的帖子显示吧名,标题,回复次数,发帖时间,删除提示,删除失败提示 我关注的帖吧显示把名,标题,回复次数,发帖时间,删除提示,删除失败提示
解决了之前因为程序代码问题造成的不能建吧的问题 解决了单吧版有参数的问题,更有利于搜索 解决了之前的一系列细节问题 减小了程序占用的空间,不到800K 此为本贴吧程序GB2312编码的最终版本,后续版本将使用utf-8编码(不影响后续升级) ----------------第三版更新记录-------------- 开发出功能完善的手机版,并且拥有全部的管理功能,可以手机管理帖子 (演示http://tieba123.com/m/) 系统设置使用缓存,减少数据库读取次数,有效提高了速度 后台管理进行了优化,能够批量删除主题和回复 后台广告管理进行了分离,更方便设置广告 添加了wap访问页面随贴广告 修正其他一些问题 ----------------第二版更新记录-------------- 解决了由于容错代码所掩盖的系统错误,修改三十多个文件,速度和效率上有了质的提高。 解决了不能建吧的错误 帖子列表和帖子浏览页面用div进行了小范围的调整,右侧的广告已经不能影响速度 在速度上有了进一步的提高 去掉了前台操作的弹出对话框提示 增加了利用404错误页面进行跳转的功能(在国外主机上受限) 修复了后台管理中批量删除隐藏帖子的错误 修复了后台因为权限设置导致的漏洞 修改了js调用 解决了前台管理员编辑帖子不能自动保留的问题 解决了英文字符造成内容页撑开的问题 解决了在二级目录下出现的不能访问数据库的问题 解决了后台分类添加出现的错误 解决了js调用文件出现“缺少十六进制”的错误提示 贴吧排行和最新帖子去掉了分页 修改了后台贴吧分类管理 (重要) 增加了后台帖子搜索 修复了编辑帖子的错误 修复了表情显示的问题,在非ubb状态下,依然能正常使用表情 ------------- 功能 -------------------- 在原有功能基础上,在人性化管理和设置的方面,增加了不少功能,修改了不少细节。 1 只有管理人员才能看到管理项目,前台不能删除帖子,只能屏蔽,保证信息不会损失。 2 增加了对国外服务器的支持,不再出现乱码。 3 显示时间使用统一的格式,不再受服务器影响。 4 修改了原来的登录和退出弹出新窗口的问题。 5 增加新帖审核功能,开启后所有内容不审核不能显示,吧主和管理员可以审核帖子。 6 重新调整后台,增加了一些细节设置的项目,同时调整了后台显示的结构。 7 调整了验证码设置 8 增加多个广告位,如顶部,顶部右侧,底部,列表右侧,帖子上部和右侧,同时随贴也有广告位 9 增加了“单帖吧版”,可以通过简单设置,做成留言本形式 10 增加了“同名跳转”功能,可以设置贴吧跳转到同名的贴吧 11 改进了举报功能,可以举报帖子和贴吧 12 前台管理功能增强了,模仿知名贴吧系统对吧主管理操作进行了改进 13 前台界面进行了调整,避免了帖子列表和内容页出现卡死现象 14 调整了会员状态条位置 15 重新进行了安全检测和修改 16 增加了帖子列表和内容页右侧的边栏,可以放广告或其他内容 17 去掉了专门的贴图和帮助部分,用单独的帖子来代替 18 调整了帖子的浏览方式,加快了显示速度 19 增加了ctul+enter发布帖子 20 修改了一些不合适的文件名 21 改变了密码的加密方式,相对安全一点,还有调整的余地 22 修改了编辑器 23 修复了一些细节方面的问题 ------------------------- 用户名 admin 密码 admin --------- 安装方法------------- 1 修改data目录下的tieba123.mdb 可以改得复杂点 2 修改conn.asp里面的tieb123.mdb 和第一条对应 3 上传到合适的路径 4 开始使用 注意:不少朋友发现数据库连接错误,主要原因如下 conn.asp里面,大约第四行 datastr1="/" '当前站点目录,如果在根目录请用"/",如果在abc目录请用 "/abc/" 请根据情况修改datastr1的参数,如果此程序放在根目录,请不要改动,如果放在其他目录,请根据实际情况改动。 ---------- 升级方法 -------- 先备份数据,除conn.asp和data文件夹外,覆盖全部文件 -------------- 安全提示---------- 请一定修改数据库文件tieba123.mdb的名字 可以修改 admin文件夹 如果忘记密码,可以用将tools/admin.asp复制到站根目录,访问此文件 来重新设置密码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值