Java Web学习交流网的设计(模仿百度贴吧)
Java Web学习交流网(模仿百度贴吧)
一、实验目的
1、连接MySQL数据库
2、读取数据库到web页面
二、实验要求
1、设计一个贴吧使用户可以注册、提问、回答
三、实验步骤
1、实验准备
a 安装mysql
b 安装navicat
c 把MySQL的jar包引入MyEclipse下
2、功能结构图
3、设计数据库
a 定义三个表
user(uid、name)
question(qid、uid、title、content、time)
answer(aid、qid、uid、content、time)
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&®ister==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>