ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

网络留言系统(Javaweb简易开发)

2021-09-20 16:58:06  阅读:218  来源: 互联网

标签:String rs 留言 request 简易 jsp public Javaweb


目录

第一步:建立数据库test

第二步:创建javaee项目,onlineMessage

第三步:创建JDBC

先导入JDBC驱动包

 创建SqlSrvDBConn类

第四步:构件JavaBean

第五步:编写Servlet

MainServlet

AddServlet

RegisterServlet

第六步:编写页面

login.jsp

register.jsp

main.jsp

liuyan.jsp 

error.jsp

 第七步:配置文件

界面运行效果如下:

 项目源代码:

问题整理:


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

要求:(1)用户在页面上输入用户名和密码登录,成功进入后可以看到所有的留言信息(2)用户可以自己添加,编辑留言,提交后可实时看到新增加的留言(3)系统提供新用户注册的功能

第一步:建立数据库test

我用的是mysql数据库,数据库中有两张表,用户信息表usertable和留言表lytable

表结构如下:

第二步:创建javaee项目,onlineMessage

第三步:创建JDBC

先导入JDBC驱动包

 创建SqlSrvDBConn类

这个类主要就是连接数据库,操作数据库的。

public class SqlSrvDBConn {
    private Statement stmt;
    private Connection conn;
    ResultSet rs;
    //在构造方法中创建数据库连接
    public SqlSrvDBConn(){
        stmt=null;
        try {
            //1.加载并注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取数据库连接对象
            Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");

        } catch (Exception e) {
            e.printStackTrace();
        }
        rs=null;
    }
    //获取数据库连接
    public Connection getConn(){
        return this.conn;
    }
    //执行查询类的SQL语句,有返回集
    public ResultSet executeQuery(String sql){
        try {
            //5.获取执行sql对象Statement
            stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            //6.执行sql
            rs=stmt.executeQuery(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return rs;
    }
    //关闭对象
    public void closeStmt(){
        try {
            //8.释放资源
            stmt.close();
        } catch (SQLException e) {
            System.err.println("Data.executeQuery: " + e.getMessage());
        }
    }
    public void closeConn(){
        try {
            //8.释放资源
            conn.close();
        } catch (SQLException e) {
            System.err.println("Data.executeQuery: " + e.getMessage());
        }
    }

}

第四步:构件JavaBean

底层数据库有几个表,就创建几个JavaBean,其实就是Java实体。里边写属性和get和set方法

public class UserTable {
    //属性
    private Integer id;
    private String username;
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
public class LyTable implements java.io.Serializable {
    //属性
    private Integer id;
    private Integer userId;
    private Date date;
    private String title;
    private String content;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

第五步:编写Servlet

MainServlet

MainServlet:主要实现登录验证功能和对留言的查询功能,查询所有的留言信息。

@WebServlet("/mainServlet")
public class MainServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求编码
        request.setCharacterEncoding("gb2312");
        //获取提交的用户名
        String usr = request.getParameter("username");
        //获取提交的密码
        String pwd = request.getParameter("password");
        //定义一个变量作为验证成功与否的标识
        boolean validated=false;
        //与数据库有关
        SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn();
        //获得会话对象,用来存储当前登录的用户信息
        HttpSession session=request.getSession();
        //创建一个user对象,并设置为空
        UserTable user=null;
        //先获得UserTable对象,如果是第一次访问该页,用户对象肯定为空,但如果是第二次甚至是第三次,就直接登录主页而无须再次重复验证该用户的信息
        user=(UserTable)session.getAttribute("user");
        //如果是第一次进入
        if(user==null){
            //查询usertable表中的记录
            String sql="select * from usertable";
            //取得结果集
            ResultSet rs=sqlsrvdb.executeQuery(sql);
            try{
                while(rs.next()){
                    //如果用户名和密码都正确
                    if((rs.getString("username").trim().compareTo(usr)==0)&&(rs.getString("password").compareTo(pwd)==0)){
                        user=new UserTable();				//创建持久化的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 (SQLException e){
                e.printStackTrace();
            }
            sqlsrvdb.closeStmt();
        }
        else{
            validated=true;//该用户在之前已经注册登录过了,已经验证过身份了,无需再验证
        }

        //身份验证之后---------------------------------------
        if(validated){
            //验证成功,应该去主界面,主界面显示留言的所有信息,所以要从留言表中查出来,并且暂存在会话中
            ArrayList al=new ArrayList();
            try{
                String sql="select * from lyTable";
                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));
                    ly.setTitle(rs.getString(4));
                    ly.setContent(rs.getString(5));
                    al.add(ly);
                }
                rs.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
            sqlsrvdb.closeStmt();
            session.setAttribute("al", al);
            //然后跳转到main.jsp
            response.sendRedirect("main.jsp");
        }
        else{
            //验证失败跳转到error.jsp
            response.sendRedirect("error.jsp");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

AddServlet

AddServlet:这个主要实现留言的添加功能,要在会话中保存一份,也要在数据库中存储留言信息

@WebServlet("/addServlet")
public class AddServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("gb2312");
        String title = request.getParameter("title");
        String content = request.getParameter("content");
        HttpSession session = request.getSession();
        //从会话中获取出当前用户的对象
        UserTable user = (UserTable)session.getAttribute("user");
        //建立留言表对应的JavaBean对象,把数据封装进去
        LyTable ly=new LyTable();
        ly.setUserId(user.getId());							//获取当前登录用户的id
        ly.setDate(new Date(System.currentTimeMillis()));	//获取当前系统时间
        ly.setTitle(title);
        ly.setContent(content);
        ArrayList al=(ArrayList)session.getAttribute("al");
        al.add(ly);
        //向数据库中插入新的留言记录
        PreparedStatement pstmt=null;
        SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn();
        Connection ct=sqlsrvdb.getConn();
        try{
            pstmt=ct.prepareStatement("insert into lyTable(userid,date,title,content) values(?,?,?,?)");
            pstmt.setInt(1, ly.getUserId());
            pstmt.setDate(2, (Date) ly.getDate());
            pstmt.setString(3, ly.getTitle());
            pstmt.setString(4, ly.getContent());
            pstmt.executeUpdate();
            response.sendRedirect("main.jsp");
        }catch(SQLException e){
            e.printStackTrace();
            response.sendRedirect("liuyan.jsp");
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

RegisterServlet

RegisterServlet主要实现新用户的注册,将信息存入数据库

@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("gb2312");
        String usr = request.getParameter("username");
        String pwd = request.getParameter("password");
        //向数据库中插入用户名和密码
        PreparedStatement pstmt=null;
        SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn();
        Connection ct=sqlsrvdb.getConn();
        try{
            pstmt=ct.prepareStatement("insert into usertable(username,password) values(?,?)");
            pstmt.setString(1, usr);
            pstmt.setString(2, pwd);
            pstmt.executeUpdate();
            response.sendRedirect("login.jsp");
        }catch(SQLException e){
            e.printStackTrace();
        }


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

第六步:编写页面

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>简易留言板</title>
</head>
<body bgcolor="#E3E3E3">
<form action="mainServlet" method="post">
    <table>
        <caption>用户登录</caption>
        <tr>
            <td>用户名:</td>
            <td>
                <input type="text" name="username" size="20"/>
            </td>
        </tr>
        <tr>
            <td>密码:</td>
            <td>
                <input type="password" name="password" size="21"/>
            </td>
        </tr>
    </table>
    <input type="submit" value="登录"/>
    <input type="reset" value="重置"/>
</form>
如果没注册单击<a href="register.jsp">这里</a>注册!
</body>
</html>

register.jsp

<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
	<title>简易留言板</title>
</head>
<body bgcolor="#E3E3E3">
	<form action="registerServlet" method="post">
		<table>
			<caption>用户注册</caption>
			<tr>
				<td>登录名:</td>
				<td><input type="text" name="username"/></td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input type="password" name="password"/></td>
			</tr>
		</table>
		<input type="submit" value="注册"/>
		<input type="reset" value="重置"/>
	</form>
</body>
</html>

main.jsp

<%@ page language="java" pageEncoding="gb2312" import="java.util.*,java.sql.*,org.easybooks.test.model.vo.*,org.easybooks.test.jdbc.*"%>
<%@ page import="org.easybooks.test.javaBean.LyTable" %>
<html>
<head>
	<title>留言板信息</title>
</head>
<body bgcolor="#E3E3E3">
	<form action="liuyan.jsp" method="post">
		<table border="1">
			<caption>所有留言信息</caption>
			<tr>
				<th>留言人姓名</th><th>留言时间</th><th>留言标题</th><th>留言内容</th>
			</tr>
		<%
			PreparedStatement pstmt=null;
			SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn();
			Connection ct=sqlsrvdb.getConn();
			ArrayList al=(ArrayList)session.getAttribute("al");
			Iterator iter=al.iterator();
			while(iter.hasNext()){
				LyTable ly=(LyTable)iter.next();
				String usr=null;
				try{
					pstmt=ct.prepareStatement("select username from userTable where id=?");
					pstmt.setInt(1, ly.getUserId());
					ResultSet rs=pstmt.executeQuery();
					while(rs.next()){
						usr=rs.getString(1);
					}
				}catch(SQLException e){
					e.printStackTrace();
				}
		%>
			<tr>
				<td><%=usr%></td>
				<td><%=ly.getDate().toString()%></td>
				<td><%=ly.getTitle()%></td>
				<td><%=ly.getContent()%></td>
			</tr>
		<%
			}
		%>
		</table>
		<input type="submit" value="留言"/>
	</form>
</body>
</html>

liuyan.jsp 

<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
	<title>留言板</title>
</head>
<body bgcolor="#E3E3E3">
	<form action="addServlet" method="post">
		<table border="1">
			<caption>填写留言信息</caption>
			<tr>
				<td>留言标题</td>
				<td><input type="text" name="title"/></td>
			</tr>
			<tr>
				<td>留言内容</td>
				<td><textarea name="content" rows="5" cols="35"></textarea></td>
			</tr>
		</table>
		<input type="submit" value="提交"/>
		<input type="reset" value="重置"/>
	</form>
</body>
</html>

error.jsp

<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
	<title>出错</title>
</head>
<body>
	登录失败!单击<a href="login.jsp">这里</a>返回
</body>
</html>

 第七步:配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <display-name>onlineMessage</display-name>
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

</web-app>

界面运行效果如下:

 

 

 

 项目源代码:

gittee:onlineMessage: 网络留言系统

问题整理:

按照老师给的那个代码,当注册用户或者是写留言的时候,数据是无法插入数据库的,因为他有个主键自动增长,然后去给你匹配的时候,你没有写上那个键的值,就无法给你匹配,然后你将数据库的那个字段名称写上,就OK啦!

 本案例来自于课本,仅供参考学习。

标签:String,rs,留言,request,简易,jsp,public,Javaweb
来源: https://blog.csdn.net/weixin_45757641/article/details/120366767

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有