Java Web综合开发实战网络留言系统.docx
《Java Web综合开发实战网络留言系统.docx》由会员分享,可在线阅读,更多相关《Java Web综合开发实战网络留言系统.docx(28页珍藏版)》请在冰豆网上搜索。
JavaWeb综合开发实战网络留言系统
沈阳化工大学实验报告
课程名称JavaWeb
项目名称JavaWeb综合开发实战:
网络留言系统
学院应用技术学院
专业1401
指导教师李玉红
报告人张庭浩学号1422030125
实验时间2016.11.24
提交时间2016.12.05
一、实验目的
1.通过实例开发,熟练掌握JSP相关标签的应用
2.熟练掌握用SERVLET作为控制器实现用户请求的处理及界面的跳转。
二、实验内容
采用JSP+Servlet+JavaBean+JDBC方式开发一个网络留言系统。
要求:
①用户在页面上输入用户名密码登录,成功进入后能看到所有留言信息;②用户可自己添加、编辑留言,提交后可实时看到新增加的留言;③系统提供新用户注册功能;④在【实例三】(2.3.5节)登录程序的基础上修改扩充而成,综合运用JSP/Servlet/JavaBean等JavaWeb开发的基础性技术。
三、实验过程
1.建立数据库和表
这里依然使用先前在SQLServer200812012中创建的数据库TEST及其userTable表,因为系统登录后要有个主界面显示别人和自己的留言信息,故还要有个留言表lyTable用于保存用户留言,如图2.1和2.2。
图2.1图2.2
2.创建JavaEE项目
新建JavaEE项目,项目命名为JSPExample。
3.创建JDBC
在项目src文件夹下建立包org.easybooks.test.jdbc,在包下创建SqlSrvDBConn类(JDBC),并往项目中添加JDBC驱动包,如图2.3.
图2.3
注:
SqlSrvDBConn类代码如下。
packageorg.easybooks.test.jdbc;
importjava.sql.*;
publicclassSqlSrvDBConn{
privateStatementstmt;
privateConnectionconn;
ResultSetrs;
//在构造方法中创建数据库连接
publicSqlSrvDBConn(){
stmt=null;
try{
/**加载并注册SQLServer2008的JDBC驱动*/
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn=DriverManager.getConnection("jdbc:
sqlserver:
//localhost:
1433;databaseName=TEST","sa","123456");
}catch(Exceptione){
e.printStackTrace();
}
rs=null;
}
//获取数据连接
publicConnectiongetConn(){
returnthis.conn;
}
//执行查询类的SQL语句,有返回集
publicResultSetexecuteQuery(Stringsql)
{
try
{
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery(sql);
}catch(SQLExceptione){
System.err.println("Data.executeQuery:
"+e.getMessage());
}
returnrs;
}
//关闭对象
publicvoidcloseStmt()
{
try
{
stmt.close();
}catch(SQLExceptione){
System.err.println("Data.executeQuery:
"+e.getMessage());
}
}
publicvoidcloseConn()
{
try
{
conn.close();
}catch(SQLExceptione){
System.err.println("Data.executeQuery:
"+e.getMessage());
}
}
}
4.构造JavaBean
在项目src文件夹下建立包org.easybooks.test.model.vo,其中分别创建两个数据库表所对应的标准JavaBean。
userTable表对应UserTable.java,代码同前。
如图2.4。
图2.4
注:
1.UserTable.java代码如下。
packageorg.easybooks.test.model.vo;
publicclassUserTable{
//Fields
privateIntegerid;
privateStringusername;
privateStringpassword;
//Propertyaccessors
//属性id的get/set方法
publicIntegergetId(){
returnthis.id;
}
publicvoidsetId(Integerid){
this.id=id;
}
//属性username的get/set方法
publicStringgetUsername(){
returnthis.username;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
//属性password的get/set方法
publicStringgetPassword(){
returnthis.password;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
}
注:
2.LyTable.java代码如下。
packageorg.easybooks.test.model.vo;
importjava.sql.Date;
publicclassLyTableimplementsjava.io.Serializable{
//Fields
privateIntegerid;
privateIntegeruserId;
privateDatedate;
privateStringtitle;
privateStringcontent;
//Propertyaccessors
//属性id的get/set方法
publicIntegergetId(){
returnthis.id;
}
publicvoidsetId(Integerid){
this.id=id;
}
//属性userId的get/set方法
publicIntegergetUserId(){
returnthis.userId;
}
publicvoidsetUserId(IntegeruserId){
this.userId=userId;
}
//属性date的get/set方法
publicDategetDate(){
returnthis.date;
}
publicvoidsetDate(Datedate){
this.date=date;
}
//属性title的get/set方法
publicStringgetTitle(){
returnthis.title;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
//属性content的get/set方法
publicStringgetContent(){
returnthis.content;
}
publicvoidsetContent(Stringcontent){
this.content=content;
}
}
5.编写Servlet
(1)登录验证
登录验证功能用MainServlet实现,增加对留言的查询功能即可。
如图2.5
图2.5
注:
MainServlet.java代码如下。
packageorg.easybooks.test.servlet;
importjava.sql.*;
importjava.io.*;
importjava.util.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importorg.easybooks.test.jdbc.SqlSrvDBConn;
importorg.easybooks.test.model.vo.*;
publicclassMainServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
request.setCharacterEncoding("gb2312");//设置请求编码
Stringusr=request.getParameter("username");//获取提交的用户名
Stringpwd=request.getParameter("password");//获取提交的密码
booleanvalidated=false;//验证成功标识
SqlSrvDBConnsqlsrvdb=newSqlSrvDBConn();
HttpSessionsession=request.getSession();//获得会话对象,用来保存当前登录用户的信息
UserTableuser=null;
//先获得UserTable对象,如果是第一次访问该页,用户对象肯定为空,但如果是第二次甚至是第三次,就直接登录主页而无须再次重复验证该用户的信息
user=(UserTable)session.getAttribute("user");
//如果用户是第一次进入,会话中尚未存储user持久化对象,故为null
if(user==null){
//查询userTable表中的记录
Stringsql="select*fromuserTable";
ResultSetrs=sqlsrvdb.executeQuery(sql);//取得结果集
try{
while(rs.next())
{if((rs.getString("username").trim().compareTo(usr)==0)&&(rs.getString("password").compareTo(pwd)==0)){
user=newUserTable();//创建持久化的JavaBean对象user
user.setId(rs.getInt
(1));
user.setUsername(rs.getString
(2));
user.setPassword(rs.getString(3));
session.setAttribute("user",user);//把user对象存储在会话中
validated=true;//标识为true表示验证成功通过
}
}
rs.close();
}catch(SQLExceptione){
e.printStackTrace();
}
sqlsrvdb.closeStmt();
}
else{
validated=true;//该用户在之前已登录过并成功验证,故标识为true表示无须再验了
}
if(validated)
{
//验证成功,应该去主界面,主界面中包含了所有留言信息,所以要从留言表中查出来,并暂存在会话中
ArrayListal=newArrayList();
try{
Stringsql="select*fromlyTable";
ResultSetrs=sqlsrvdb.executeQuery(sql);//取得结果集
while(rs.next()){
LyTablely=newLyTable();
ly.setId(rs.getInt
(1));
ly.setUserId(rs.getInt
(2));
ly.setDate(rs.getDate(3));
ly.setTitle(rs.getString(4));
ly.setContent(rs.getString(5));
al.add(ly);
}
rs.close();
}catch(SQLExceptione){
e.printStackTrace();
}
sqlsrvdb.closeStmt();
session.setAttribute("al",al);
//然后跳转到main.jsp
response.sendRedirect("main.jsp");
}
else{
//验证失败跳转到error.jsp
response.sendRedirect("error.jsp");
}
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}
(2)添加留言
添加留言功能由AddServlet实现,在org.easybooks.test.servlet包下创建AddServlet类,编写代码。
图2.6
注:
AddServlet.java代码如下。
packageorg.easybooks.test.servlet;
importjava.sql.*;
importjava.io.*;
importjava.util.ArrayList;
importjavax.servlet.*;
importjavax.servlet.http.*;
importorg.easybooks.test.jdbc.SqlSrvDBConn;
importorg.easybooks.test.model.vo.*;
publicclassAddServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
request.setCharacterEncoding("gb2312");
Stringtitle=request.getParameter("title");//获取留言的标题
Stringcontent=request.getParameter("content");//获取留言的内容
HttpSessionsession=request.getSession();
//从会话中取出当前用户对象
UserTableuser=(UserTable)session.getAttribute("user");
//建立留言表对应的JavaBean对象,把数据封装进去
LyTablely=newLyTable();
ly.setUserId(user.getId());//获取当前登录用户的id
ly.setDate(newDate(System.currentTimeMillis()));//获取当前系统时间
ly.setTitle(title);
ly.setContent(content);
ArrayListal=(ArrayList)session.getAttribute("al");
al.add(ly);//新添加的留言要保存一份到会话中,这样在刷新主页时就无须每次都去查询数据库留言表了
//向数据库中插入新的留言记录
PreparedStatementpstmt=null;
SqlSrvDBConnsqlsrvdb=newSqlSrvDBConn();
Connectionct=sqlsrvdb.getConn();
try{
pstmt=ct.prepareStatement("insertintolyTablevalues(?
?
?
?
)");
pstmt.setInt(1,ly.getUserId());
pstmt.setDate(2,ly.getDate());
pstmt.setString(3,ly.getTitle());
pstmt.setString(4,ly.getContent());
pstmt.executeUpdate();
response.sendRedirect("main.jsp");
}catch(SQLExceptione){
e.printStackTrace();
response.sendRedirect("liuyan.jsp");
}
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}
(3)注册用户
注册新用户功能由RegisterServlet类实现。
如图2.7
图2.7
注:
RegisterServlet.java代码如下。
packageorg.easybooks.test.servlet;
importjava.io.*;
importjava.sql.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importorg.easybooks.test.jdbc.SqlSrvDBConn;
importorg.easybooks.test.model.vo.*;
publicclassRegisterServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
request.setCharacterEncoding("gb2312");
Stringusr=request.getParameter("username");//获取提交注册的用户名
Stringpwd=request.getParameter("password");//获取提交注册的密码
//向数据库中插入新用户名和密码
PreparedStatementpstmt=null;
SqlSrvDBConnsqlsrvdb=newSqlSrvDBConn();
Connectionct=sqlsrvdb.getConn();
try{
pstmt=ct.prepareStatement("insertintouserTablevalues(?
?
)");
pstmt.setString(1,usr);
pstmt.setString(2,pwd);
pstmt.executeUpdate();
response.sendRedirect("login.jsp");
}catch(SQLExceptione){
e.printStackTrace();
}
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
}
(4)配置Servlet
Servlet编写完成后,必须在项目web.xml中进行配置方可使用。
在web.xml文件中的配置如图2.8。
图2.8
注:
web.xml配置代码如下。
xmlversion="1.0"encoding="UTF-8"?
>
xsi="http:
//www.w3.org/2001/XMLSchema-instance"xmlns="http:
//xmlns.jcp.org/xml/ns/javaee"xsi:
schemaLocation="http:
//xmlns.jcp.org/xml/ns/javaeehttp:
//xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID"version="3.1">
JSPExample
login.jsp