Java Web综合开发实战:网络留言系统 - 图文

更新时间:2023-11-03 20:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

沈阳化工大学实验报告

课程名称 Java Web 项目名称 Java Web综合开发实战:网络留言系统 学 院 应用技术学院 专 业 1401 指导教师 李玉红 报 告 人 张庭浩 学号 1422030125 实验时间 2016.11.24 提交时间 2016.12.05

一、实验目的

1.通过实例开发,熟练掌握JSP相关标签的应用

2.熟练掌握用SERVLET作为控制器实现用户请求的处理及界面的跳转。

二、实验内容

采用JSP+Servlet+JavaBean+JDBC方式开发一个网络留言系统。

要求:① 用户在页面上输入用户名密码登录,成功进入后能看到所有留言信息;② 用户可自己添加、编辑留言,提交后可实时看到新增加的留言;③ 系统提供新用户注册功能;④ 在【实例三】(2.3.5节)登录程序的基础上修改扩充而成,综合运用JSP/Servlet/JavaBean等Java Web开发的基础性技术。

三、实验过程

1.建立数据库和表

这里依然使用先前在SQL Server 2008 12012中创建的数据库TEST及其userTable表,因为系统登录后要有个主界面显示别人和自己的留言信息,故还要有个留言表lyTable用于保存用户留言,如图2.1和2.2。

图2.1 图2.2 2.创建Java EE项目

新建Java EE项目,项目命名为JSPExample。 3.创建JDBC

在项目src文件夹下建立包org.easybooks.test.jdbc,在包下创建SqlSrvDBConn类(JDBC),并往项目中添加JDBC驱动包,如图2.3.

图2.3 注:SqlSrvDBConn类代码如下。

package org.easybooks.test.jdbc; import java.sql.*;

public class SqlSrvDBConn {

private Statement stmt; private Connection conn; ResultSet rs;

//在构造方法中创建数据库连接 public SqlSrvDBConn(){

conn=DriverManager.getConnection(\

}catch(Exception e){ } rs=null;

e.printStackTrace();

aseName=TEST\,\,\); }

//获取数据连接

public Connection getConn(){ }

//执行查询类的SQL语句,有返回集

public ResultSet executeQuery(String sql) { try

return this.conn; stmt=null; try{

/**加载并注册 SQLServer 2008 的 JDBC 驱动*/

Class.forName(\);

{

stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

rs=stmt.executeQuery(sql); }catch(SQLException e){

System.err.println(\ + e.getMessage()); }

return rs; }

//关闭对象

public void closeStmt() { try {

stmt.close(); }catch(SQLException e){

System.err.println(\ + e.getMessage()); } }

public void closeConn() { try {

conn.close(); }catch(SQLException e){

System.err.println(\ + e.getMessage()); } } }

4.构造JavaBean

在项目src文件夹下建立包org.easybooks.test.model.vo,其中分别创建两个数据库表所对应的标准JavaBean。userTable表对应UserTable.java,代码同前。如图2.4。

图2.4

注:1.UserTable.java代码如下。

package org.easybooks.test.model.vo; public class UserTable { }

注:2.LyTable.java代码如下。

package org.easybooks.test.model.vo; import java.sql.Date; public class LyTable implements java.io.Serializable{

//Fields

private Integer id; private Integer userId; private Date date; private String title; private String content;

//Property accessors //属性 id 的 get/set 方法 //Fields

private Integer id; private String username; private String password;

//Property accessors //属性 id 的 get/set 方法 public Integer getId(){ }

public void setId(Integer id){ }

//属性 username 的 get/set 方法 public String getUsername(){ }

public void setUsername(String username){ }

//属性 password 的 get/set 方法 public String getPassword(){ }

public void setPassword(String password){ }

this.password=password; return this.password; this.username=username; return this.username; this.id=id; return this.id;

}

public Integer getId(){ }

public void setId(Integer id){ }

//属性 userId 的 get/set 方法 public Integer getUserId(){ }

public void setUserId(Integer userId){ }

//属性 date 的 get/set 方法 public Date getDate(){ }

public void setDate(Date date){ }

//属性 title 的 get/set 方法 public String getTitle(){ }

public void setTitle(String title){ }

//属性 content 的 get/set 方法 public String getContent(){ }

public void setContent(String content){ }

this.content=content; return this.content; this.title=title; return this.title; this.date=date; return this.date; this.userId=userId; return this.userId; this.id=id; return this.id;

5.编写Servlet (1)登录验证

登录验证功能用MainServlet实现,增加对留言的查询功能即可。如图2.5

图2.5

注:MainServlet.java代码如下。 package org.easybooks.test.servlet; import java.sql.*; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*;

import org.easybooks.test.jdbc.SqlSrvDBConn; import org.easybooks.test.model.vo.*;

public class MainServlet extends HttpServlet{

public void doGet(HttpServletRequest request, HttpServletResponse response)

request.setCharacterEncoding(\

//设置请求编码

throws ServletException, IOException{

String usr=request.getParameter(\ String pwd=request.getParameter(\ boolean validated=false;

SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn(); HttpSession session=request.getSession(); UserTable user=null;

//获得会话对象,用来//获取提交的用户名 //获取提交的密码 //验证成功标识

保存当前登录用户的信息

//先获得UserTable对象,如果是第一次访问该页,用户对象肯定为空,但如果是第二次甚至是第三次,就直接登录主页而无须再次重复验证该用户的信息 user=(UserTable)session.getAttribute(\

//如果用户是第一次进入,会话中尚未存储user持久化对象,故为null if(user==null){

//查询userTable表中的记录

String sql=\ResultSet rs=sqlsrvdb.executeQuery(sql); try {

while(rs.next()) {

//取得结果集

if((rs.getString(\

}

}

user=new UserTable(); user.setId(rs.getInt(1));

user.setUsername(rs.getString(2)); user.setPassword(rs.getString(3)); session.setAttribute(\validated=true;

//把user对象存

//创建持久化的

password\JavaBean对象user

储在会话中

//标识为true表示验

证成功通过

rs.close();

} catch (SQLException e) { }

e.printStackTrace();

sqlsrvdb.closeStmt();

} else{

validated=true; }

if(validated) {

//验证成功,应该去主界面,主界面中包含了所有留言信息,所以要从留言表中查出来,并暂存在会话中

ArrayList al=new ArrayList(); try{

String sql=\

ResultSet rs=sqlsrvdb.executeQuery(sql); //取得结果集 while(rs.next()){

LyTable ly=new LyTable(); ly.setId(rs.getInt(1));

ly.setUserId(rs.getInt(2)); ly.setDate(rs.getDate(3));

//该用户在之前已登录过并

成功验证,故标识为true表示无须再验了

}

}

ly.setTitle(rs.getString(4)); ly.setContent(rs.getString(5)); al.add(ly);

rs.close();

e.printStackTrace();

}catch(SQLException e){

sqlsrvdb.closeStmt();

session.setAttribute(\ //然后跳转到main.jsp

response.sendRedirect(\ } else{

//验证失败跳转到error.jsp

response.sendRedirect(\ } }

(2)添加留言

添加留言功能由AddServlet实现,在org.easybooks.test.servlet包下创建AddServlet类,编写代码。

}

public void doPost(HttpServletRequest request, HttpServletResponse }

doGet(request,response);

response) throws ServletException, IOException{

图2.6

注:AddServlet.java代码如下。 package org.easybooks.test.servlet; import java.sql.*; import java.io.*;

import java.util.ArrayList;

import javax.servlet.*; import javax.servlet.http.*;

import org.easybooks.test.jdbc.SqlSrvDBConn; import org.easybooks.test.model.vo.*; public class AddServlet extends HttpServlet{ 题 容

HttpSession session=request.getSession(); //从会话中取出当前用户对象

UserTable user=(UserTable)session.getAttribute(\//建立留言表对应的JavaBean对象,把数据封装进去 LyTable ly=new LyTable(); ly.setUserId(user.getId());

//获取当前登录

String content=request.getParameter(\

//获取留言的内

public void doGet(HttpServletRequest request, HttpServletResponse response)

request.setCharacterEncoding(\String title=request.getParameter(\

//获取留言的标

throws ServletException, IOException{

用户的id

ly.setDate(new Date(System.currentTimeMillis())); //获取当前系统时间 ly.setTitle(title); ly.setContent(content);

ArrayList al=(ArrayList)session.getAttribute(\al.add(ly);

//新添加的留言要保

存一份到会话中,这样在刷新主页时就无须每次都去查询数据库留言表了

//向数据库中插入新的留言记录 PreparedStatement pstmt=null;

SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn(); Connection ct=sqlsrvdb.getConn(); try{

pstmt=ct.prepareStatement(\into lyTable values(?,?,?,?)\pstmt.setInt(1, ly.getUserId()); pstmt.setDate(2, ly.getDate()); pstmt.setString(3, ly.getTitle()); pstmt.setString(4, ly.getContent()); pstmt.executeUpdate();

response.sendRedirect(\

本文来源:https://www.bwwdw.com/article/x8o2.html

Top