Java Web在线留言板

学习Java Web有一段时间了,借此机会和大家分享一个小东西——在线留言系统,虽然low,小喷即可,大喷伤心,还是希望大家的指正和意见,话不多说,直接上:

第一步:

①.写一个注册页面,这一个页面主要是用户的输入,比较简单,代码如下:

regist.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>注册页面</title>
</head>
<body>
<form method = "POST" action = "registdo.jsp">
用户名:<input type = "text" name= "username">
密码:<input type = "password" name = "userpass">
<input type = "submit" value = "注册"> 
<input type = "reset" value = "重置"> 
</form>
</body>
</html>

效果如图:


这里写图片描述

②.下面这个页面主要负责用来处理业务逻辑以及显示注册的结果,代码如下:

registdo.jsp

<%@page import="com.szx.jnmc.UserDao"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="com.szx.jnmc.DBOper"%>
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import="java.util.List"%>
    <%@page import="com.szx.jnmc.User"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>留言板</title>
</head>
<body>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=gbk");
    /* PrintWriter out = response.getWriter();  */
    String username = request.getParameter("username");
    String userpass = request.getParameter("userpass");
    ServletContext ctx = this.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");
    UserDao dao = new UserDao();
    User user = new User();
    user.setUsername(username);
    user.setUserpass(userpass);
    try{
        dao.getConn(server, dbname, dbuser, dbpwd);
        if(dao.addUser(user)){
            out.println("注册成功");
            out.println("<br><a href = 'login.jsp'>返回登陆</a></br>");
        }else{
            out.println("注册失败");
            out.println("<br><a href = 'regist.jsp'>返回注册</a></br>");
        }
    }catch(Exception e){
        e.printStackTrace();
    }
%>
</body>
</html>

效果如图:


这里写图片描述

①.这一步写个登录页面,主要用来接收用户输入的登录信息:代码如下:

login.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>留言板</title>
</head>
<body>
<form method = "POST" action = "logindo.jsp">
用户名:<input type = "text" name = "username">
密码:<input type = "password" name = "userpass">
<input type = "submit" value= "登录">
<input type = "reset"value = "重置">
</form>
</body>
</html>

效果如图


这里写图片描述

②.这一步是需要写登录的逻辑及验证,并显示登录的结果,代码如下

logindo.jsp

<%@page import="java.sql.ResultSet"%>
<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>
    <%@page import = "com.szx.jnmc.DBOper" %>
    <%@page import = "javax.servlet.http.Cookie" %>
    <%@page import = "javax.servlet.RequestDispatcher" %>
    <%@page import = "javax.servlet.http.HttpSession" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>留言板</title>
</head>
<body>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=GBK");
    
    String username = request.getParameter("username");
    String userpass = request.getParameter("userpass");
    ServletContext ctx = request.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");
    DBOper db = new DBOper();
    String sql = "SELECT * FROM user Where username = ? AND userpass = ?";
    try{
        db.getConn(server, dbname, dbuser, dbpwd);
        ResultSet rs = db.executeQuery(sql, new String[]{username,userpass});
        if(rs!= null && rs.next()){
            
            session.setAttribute("username", username);
            Cookie cookie  = new Cookie("username",username);
            cookie.setMaxAge(60*60*24*30);
            response.addCookie(cookie);
            RequestDispatcher dispatcher = request.getRequestDispatcher("userlist.jsp");
            dispatcher.forward(request, response);
        }else{
            out.println("登录失败!");
            out.println("<br><a href = 'login.jsp'>重新登录</a></br>");
        }
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        db.closeAll();
    }
%>
</body>
</html>

效果如图


这里写图片描述

前台的注册及登录页面到此已完成,下面我们接着做后台的数据

第二步

①.我们需要User类封装用户的信息,代码如下:

User.Java

package com.szx.jnmc;

public class User {
    private int id;
    private String username;
    private String userpass;
    private String phone;   
    private String email;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUserpass() {
        return userpass;
    }
    public void setUserpass(String userpass) {
        this.userpass = userpass;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    
}

②.有了User类,就需要进行数据库的访问,这时候我们需要一个连接数据库的基础类,所有与连接数据库的类都要 继承于此,代码如下:

DBOper.Java

    public Connection conn = null;
    public PreparedStatement ps = null;
    public ResultSet rs = null;
    /**
     * 连接数据库
     * @param server
     * @param dbname
     * @param dbuser
     * @param dbpwd
     * @return
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public Connection getConn(String server,String dbname,String dbuser,String dbpwd) throws SQLException, ClassNotFoundException{      
        String DRIVER = "com.mysql.jdbc.Driver";
        String URL = "jdbc:mysql://" + server + ":3306/" + dbname + "?user="
                + dbuser + "&password=" +dbpwd+"&useUnicode=true&characterEncoding=utf8";
        Class.forName(DRIVER);
        conn = DriverManager.getConnection(URL);        
        return conn;
    }
    /**
     * 关闭数据库连接
     */
    public void closeAll(){
        try{
            if(rs != null){
                rs.close();
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try{
                if(ps != null){
                    ps.close();
                }
            }catch(SQLException e){
                e.printStackTrace();                
            }finally{
                try{
                    if(conn != null){
                        conn.close();
                    }
                }catch(SQLException e){
                    e.printStackTrace();                    
                }
            }
        }
    }
    /**
     * 执行SQL语句,只进行查询,不进行增删改
     * @param preparedsql
     * @param param
     * @return
     */
    public ResultSet executeQuery(String preparedsql,String[]param){
        try{
            ps = conn.prepareStatement(preparedsql);
            if(param != null){
                for (int i = 0; i < param.length; i++) {
                    ps.setString(i + 1, param[i]);
                }
            }
            rs = ps.executeQuery();
        }catch(SQLException e){
            e.printStackTrace();
        }
        return rs;
    }
    /**
     * 执行sql语句,进行增删改,不进行查询
     * @param preparedsql
     * @param param
     * @return
     */
    public int executeUpdate(String preparedsql,String[]param){
        int num = 0;
        try{
            ps = conn.prepareStatement(preparedsql);
            if(param != null){
                for (int i = 0; i < param.length; i++) {
                    ps.setString(i + 1, param[i]);
                }
            }
            num = ps.executeUpdate();
        }catch(SQLException e){
            e.printStackTrace();
        }
        return num;
        
    }
}

③.写完了数据库操作对象类,就要写用户 操作对象类代码如下,

UserDao.Java

package com.szx.jnmc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDao extends DBOper{

    /**
     * 获取所有用户列表
     * @return
     */
    public List<User> getAllUser(){
        List<User> userList = new ArrayList<User>();
        String sql = "Select *from user";
        try{
            ResultSet rs = this.executeQuery(sql,null);
            while(rs.next()){
                User user = new User();             
                user.setUsername(rs.getString("username"));
                user.setUserpass(rs.getString("userpass")); 
                userList.add(user);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
        return userList;        
    }
    
    /**
     * 根据用户名获取用户信息
     * @param name
     * @return
     */
    public User getUserByName(String name){
        User user = new User();
        String sql = "SELECT * FROM user Where username = ?";
        try{
            ResultSet rs = this.executeQuery(sql, new String []{name});
            if(rs.next()){
                user.setEmail(rs.getString("email"));
                user.setId(rs.getInt("id"));
                user.setPhone(rs.getString("phone"));
                user.setUsername(rs.getString("username"));
                user.setUserpass(rs.getString("userpass"));
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
        return user;
    } 

    /**
     * 添加用户
     * @param user
     * @return
     */
    public boolean addUser(User user){
        boolean r = false;
        String sql  = "INSERT INTO user(username,userpass)VALUES(?,?)";
        try{
        int num = this.executeUpdate(sql,new String []{user.getUsername(),user.getUserpass()});
        if(num > 0){
            r = true;
        }
        }catch(Exception e){
            e.printStackTrace();
        }       
        return r;       
    }  
}

④.我们的留言Message类,代码如下:

Message.Java

package com.szx.jnmc;

public class Message {
    private int messageid;
    private String title;
    private String context;
    private String lefttime;
    private String wholeft;
    public String getWholeft() {
        return wholeft;
    }
    public void setWholeft(String wholeft) {
        this.wholeft = wholeft;
    }
    public int getMessageid() {
        return messageid;
    }
    public void setMessageid(int messageid) {
        this.messageid = messageid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContext() {
        return context;
    }
    public void setContext(String context) {
        this.context = context;
    }
    public String getLefttime() {
        return lefttime;
    }
    public void setLefttime(String lefttime) {
        this.lefttime = lefttime;
    }
}

⑤.留言数据操作对象MsgDao类,代码如下:

MsgDao.Java

package com.szx.jnmc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class MsgDao extends DBOper {

    /**
     * 获取所有留言
     * @return
     */
    public List<Message> getAllMsg(){       
        List<Message> msglist = new ArrayList<Message>();
        String sql = "SELECT * FROM message";
        try{            
            
            ResultSet rs = this.executeQuery(sql, null);
            while(rs.next()){           
                Message msg = new Message();
                msg.setMessageid(rs.getInt("messageid"));
                msg.setContext(rs.getString("context"));                
                msg.setLefttime(rs.getString("lefttime"));
                msg.setTitle(rs.getString("title"));
                msg.setWholeft(rs.getString("wholeft"));
                msglist.add(msg);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            this.closeAll();
        }
        return msglist;
    }
    
    public Message getMsgById(String id){
        Message msg = null;
        String sql = "SELECT * FROM message WHERE messageid = ?";
        try{
            ResultSet rs = this.executeQuery(sql, new String[]{id});
            if(rs.next()){
                msg = new Message();
                msg.setContext(rs.getString("context"));            
                msg.setLefttime(rs.getString("lefttime"));
                msg.setMessageid(rs.getInt("messageid"));
                msg.setTitle(rs.getString("title"));
                msg.setWholeft(rs.getString("wholeft"));
            }
        }catch(SQLException e){
            e.printStackTrace();
        }
        return msg;
    } 
    
    /**
     * 添加留言
     * @param msg
     * @return
     */
    public boolean addMsg(Message msg){
        boolean r = false;
        String sql = "INSERT INTO message(title,context,wholeft,lefttime)VALUES(?,?,?,?) ";
        try{
            int num = this.executeUpdate(sql, new String[]{msg.getTitle(),msg.getContext(),msg.getWholeft(),msg.getLefttime()});
            if(num > 0){
                r = true;
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            this.closeAll();
        }       
        return r;
        
    }
    
    /**
     * 修改留言信息
     * @param msg
     * @return
     */
    public boolean editMsg(Message msg){
        boolean r = false;
        String sql = "UPDATE message SET context = ?,title =?,lefttime = ?,wholeft=? WHERE messageid ="+msg.getMessageid();
        try{
            int num = this.executeUpdate(sql,new String[]{msg.getContext(), msg.getTitle(), msg.getLefttime(), msg.getWholeft()});
            System.out.println("num:"+num);
            if(num > 0){
                r = true;
            }
        }catch(Exception e){            
            e.printStackTrace();
        }
        return r;               
    }
    
    /**
     * 根据消息Id删除留言
     * @param id
     * @return
     */
    public boolean delMsg(int id){
        boolean r = false;
        String sql = "DELETE FROM message WHERE messageid = ?";
        try{
            int num = this.executeUpdate(sql, new String[]{""+id});
            if(num > 0){
                r = true;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return r;       
    }
}

⑥.回复Reply类,代码如下:

Reply.Java

package com.szx.jnmc;

public class Reply {

    private String context;
    private int messageid;
    public int getMessageid() {
        return messageid;
    }
    public void setMessageid(int messageid) {
        this.messageid = messageid;
    }
    public String getContext() {
        return context;
    }
    public void setContext(String context) {
        this.context = context;
    }   
}

⑦.Reply的数据操作对象类,代码如下:

ReplyDao.Java


package com.szx.jnmc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ReplyDao extends DBOper{
    
    /**
     * 获取所有留言
     * @return
     */
    public List<Reply> getAllReply(){
        Reply reply = null;
        List<Reply>replylist = new ArrayList<Reply>();
        String sql = "SELECT * FROM reply";
        try{
            ResultSet rs = this.executeQuery(sql, null);
            while(rs.next()){
                reply = new Reply();
                reply.setContext(rs.getString("context"));              
                replylist.add(reply);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            this.closeAll();
        }
        return replylist;       
    }
    
    /**
     * 添加回复
     * @param reply
     * @return
     */
    public boolean addReply(Reply reply){
        boolean r = false;
        String sql = "INSERT INTO reply(context,messageid)VALUES(?,?)";
        try{
            int num = this.executeUpdate(sql, new String[]{reply.getContext(),""+reply.getMessageid()});
            if(num > 0){
                r = true;
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            this.closeAll();
        }
        return r;
    }
}

第二步到此结束,这一步主要是对数据的封装和连接数据库。

第三步:

①.显示用户列表

userlist.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import = "java.util.List" %>
    <%@page import = "java.util.ArrayList" %>
    <%@page import = "com.szx.jnmc.User" %>
    <%@page import = "com.szx.jnmc.UserDao" %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>留言板</title>
</head>
<body>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;char=gbk");
    ServletContext ctx = request.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");
    List<User> userlist = new ArrayList<User>();
    UserDao dao = new UserDao();
    try{
        dao.getConn(server,dbname,dbuser,dbpwd);        
    }catch(Exception e){
        e.printStackTrace();
    }    
    userlist = dao.getAllUser(); 
    pageContext.setAttribute("userlist", userlist); 
%>      
        <div class="list_div" style="height: 87%">
        <table border="1" align="center" cellspacing="0" class="list_table"
            id="senfe" style='width: 50%'>
            <thead>
                <tr>
                    <th width="5%"><span style="font-weight: 10">序号</span></th>
                    <th width="5%"><span style="font-weight: 10">用户名</span></th>
                    <th width="5%"><span style="font-weight: 10">操作</span></th>                 
                </tr>
            </thead>
            <tbody>                     
                <c:forEach var="user" items="${userlist}" varStatus="status">
                    <tr>                        
                        <td align="center">${status.count }</td>
                        <td align="center">${user.username}</td>                        
                        <td align="center"><a
                            href="addmsg.jsp?username=${user.username}">留言</a></td>                     
                    </tr>                   
                </c:forEach>
                
            </tbody>
        </table>
        </div>      
</body>
</html>

效果如图


这里写图片描述

②.在用户列表里我们点击“留言”就可以对用户留言,页面将跳转到留言页面,如下:

addmsg.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>留言板</title>
</head>
<body>
<form method = "POST" action = "addOK.jsp">
留言人:<input type = "text" name = "wholeft"/>
留言主题:<input type = "text" name = "title"/>
留言内容:<input type = "text" name = "context"/>
<input type = "submit" value = "留言"/>
<input type = "reset" value = "重置"/>
</form>
</body>
</html>

效果如图:


这里写图片描述

③.留言页面的数据处理,代码如下:

addOK.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import = "com.szx.jnmc.Message" %>
    <%@page import = "com.szx.jnmc.MsgDao" %>
    <%@page import = "java.text.SimpleDateFormat" %>
    <%@page import = "java.util.Date" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>留言板</title>
</head>
<body>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=GBK");
    String wholeft = request.getParameter("wholeft");
    String title = request.getParameter("title");
    String context = request.getParameter("context");
    ServletContext ctx = request.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date curtime = new Date();
    String lefttime = sdf.format(curtime);
    Message msg = new Message();
    msg.setContext(context);
    msg.setLefttime(lefttime);
    msg.setTitle(title);
    msg.setWholeft(wholeft);
    MsgDao dao = new MsgDao();
    try{
        dao.getConn(server, dbname, dbuser, dbpwd);
        if(dao.addMsg(msg)){
            out.println("留言成功!");
            out.println("<br><a href = 'showmsg.jsp'>查看留言</a></br>");
        }else{
            out.println("留言失败!");
        }
    }catch(ClassNotFoundException e){
        e.printStackTrace();
    }
%>  
</body>
</html>

效果如图:


这里写图片描述

④.点击“查看留言”,将跳转到showmsg.jsp页面,代码如下:

showmsg.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import = "java.util.List" %>
    <%@page import = "java.util.ArrayList" %>
    <%@page import = "com.szx.jnmc.MsgDao" %>
    <%@page import = "com.szx.jnmc.Message" %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>留言板</title>
</head>
<body>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=GBK");
    ServletContext ctx = request.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");
    MsgDao dao = new MsgDao();  
    List<Message> msglist = new ArrayList<Message>();
    try{
        dao.getConn(server,dbname,dbuser,dbpwd);                
    }catch(Exception e){
        e.printStackTrace();
    }
    msglist = dao.getAllMsg();
    if(msglist!=null){
        application.setAttribute("msglist",msglist);
    }
%>
<div class="list_div" style="height: 87%">
        <table border="1" align="center" cellspacing="0" class="list_table"
            id="senfe" style='width: 80%'>
            <thead>
                <tr>
                    <th width="10%"height="30"><span style="font-weight: 10">留言序号</span></th>
                    <th width="10%"height="30"><span style="font-weight: 10">留言ID</span></th>
                    <th width="5%"height="30"><span style="font-weight: 10">留言人</span></th>
                    <th width="10%"height="30"><span style="font-weight: 10">主题</span></th> 
                    <th width="25%"height="30"><span style="font-weight: 10">留言内容</span></th>   
                    <th width="20%"height="30"><span style="font-weight: 10">操作</span></th>                         
                </tr>
            </thead>
            <tbody>                     
                <c:forEach var="msg" items="${msglist}" varStatus="status">
                    <tr>                        
                        <td align="center">${status.count }</td>
                        <td align="center">${msg.messageid}</td>    
                        <td align="center">${msg.wholeft}</td>  
                        <td align="center">${msg.title}</td>                
                        <td align="center">${msg.context}</td>                                  
                        <td align="center">
                        <a href="reply.jsp?messageid=${msg.messageid}">回复</a>
                        <a href="editmsg.jsp?messageid=${msg.messageid}">编辑</a>
                        <a href="delmsg.jsp?messageid=${msg.messageid}">删除</a>                                              
                        </td>                       
                    </tr>                   
                </c:forEach>                
            </tbody>
        </table>
        </div>      
</body>
</html>

效果如图:


这里写图片描述

⑤.点击页面中的“回复”将跳转到reply.jsp,代码如下:

reply.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import="com.szx.jnmc.Reply" %>
    <%@page import="com.szx.jnmc.ReplyDao" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>回复页面</title>
</head>
<body>
<%
    String messageid = request.getParameter("messageid");   
    if(messageid != null || messageid.equals("")){
        pageContext.setAttribute("messageid", messageid);
    }
%> 
<form method = "POST" action = "replydo.jsp">
内容:<input type = "text" name = "context">
<input type = "hidden" name = "id" value="${messageid }">
<input type = "submit" value = "提交">
<input type = "reset" value ="重置">
</form>
</body>
</html>

效果如图:


这里写图片描述

⑥.输入回复数据,点击提交转到回复结果replydo.jsp页面,代码如下:

replydo.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import="com.szx.jnmc.Reply" %>
    <%@page import="com.szx.jnmc.ReplyDao" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>回复留言</title>
</head>
<body>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=GBK");
    String messageid = request.getParameter("id");
    String context = request.getParameter("context");   
    ServletContext ctx = request.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");
    Reply reply = new Reply();
    ReplyDao dao = new ReplyDao();
    reply.setContext(context);
    try{
        dao.getConn(server, dbname, dbuser, dbpwd);
        if(dao.addReply(reply)){
            out.println("回复成功!");
            out.println("<br><a href = 'showmsg.jsp'>返回留言列表</a></br>");
        }else{
            out.println("回复失败!");
            out.println("<br><a href = 'replydo.jsp'>重新回复</a></br>");
        }
    }catch(Exception e){
        e.printStackTrace();
    }
%>
</body>
</html>

效果如图:


这里写图片描述

⑦.点击返回留言列表,转到留言列表showmsg.jsp页面,进行编辑,代码如下:

editmsg.jsp


<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import = "com.szx.jnmc.MsgDao" %>
    <%@page import = "com.szx.jnmc.Message" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>修改留言</title>
</head>
<body>
<%
    String messageid = request.getParameter("messageid");
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=GBK");
    ServletContext ctx = request.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");
    MsgDao dao = new MsgDao();
    try{
        dao.getConn(server, dbname, dbuser, dbpwd);
         Message msg = dao.getMsgById(messageid);
         if(msg != null){
             pageContext.setAttribute("msg", msg);
         }
    }catch(Exception e){
        e.printStackTrace();
    }   
%>
<form method = "POST" action = "editmsgdo.jsp"> 
<table>
    <tr>
        <td>主题:  <input type = "text" name = "title" value ="${msg.title}"></td>
    </tr>
    <tr>
        <td>内容:  <input type = "text" name = "context" value ="${msg.context}"></td>
    </tr>
    <tr>
    <%-- <input type = "text" name = "lefttime" value ="${msg.lefttime}"> --%>
        <td>日期:  <span>${msg.lefttime }</span></td> 
    </tr>
    <%-- <input type = "text" name = "wholeft" value ="${msg.wholeft}"readonly="readonly"> --%>
    <tr>
        <td>留言人:<span>${msg.wholeft}</span></td>
    </tr>
    <%-- <input type ="text" name = "messageid" value = "${msg.messageid }" readonly="readonly"> --%>
    <tr>
        <td>留言id:<input type ="text" name = "messageid" value = "${msg.messageid }" readonly="readonly"></td>       
    </tr>
    <tr>
    <td>
    <td><input type = "submit" value = "提交"></td>   
    <td><input type = "reset" value = "重置"></td>
    </tr>
    
</table>
</form>
</body>
</html>



效果如图:


这里写图片描述

⑧.点击提交,跳转到 编辑结果页面editmsgdo.jsp,代码如下:

editmsgdo.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import = "com.szx.jnmc.MsgDao" %>
    <%@page import = "com.szx.jnmc.Message" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>修改留言</title>
</head>
<body>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=GBK");
    String title = request.getParameter("title");
    String context = request.getParameter("context");
    String messageid = request.getParameter("messageid");
    String lefttime = request.getParameter("lefttime");
    String wholeft = request.getParameter("wholeft");   
    ServletContext ctx = request.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");   
    MsgDao dao = new MsgDao();  
    Message msg = new Message();
    msg.setContext(context);
    msg.setTitle(title);
    msg.setLefttime(lefttime);
    msg.setWholeft(wholeft);
    
    
    try{
        dao.getConn(server,dbname,dbuser,dbpwd);
        if(dao.editMsg(msg)){
            out.println("修改成功");
            out.println("<br><a href = 'showmsg.jsp'>返回留言列表</a></br>");
        }else{
            out.println("修改失败");
            out.println("<br><a href = 'editmsgdo.jsp'>重新修改</a></br>");
        }
    }catch(Exception e){
        e.printStackTrace();
    }
%>
</body>
</html>

效果如图:


这里写图片描述

⑨.点击“返回留言列表 ”回到留言列表页面,点击删除则直接删除留言,代码如下:

delmsg.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
    <%@page import = "com.szx.jnmc.MsgDao" %>
    <%@page import = "com.szx.jnmc.Message" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>留言板</title>
</head>
<body>
<%
    request.setCharacterEncoding("GBK");
    response.setContentType("text/html;charset=GBK");
    ServletContext ctx = request.getServletContext();
    String server = ctx.getInitParameter("server");
    String dbname = ctx.getInitParameter("dbname");
    String dbuser = ctx.getInitParameter("dbuser");
    String dbpwd = ctx.getInitParameter("dbpwd");
    MsgDao dao = new MsgDao();
    try{
        String messageid = request.getParameter("messageid");
        dao.getConn(server,dbname,dbuser,dbpwd);
        if(dao.delMsg(Integer.parseInt(messageid))){
            out.println("删除成功");
            response.sendRedirect("showmsg.jsp");
        }else
        {
            out.println("删除失败");
        }
    }catch(Exception e){
        e.printStackTrace();
    }   
%>
</body>
</html>

数据表的创建SQL语句:
user表:

CREATE TABLE `user` (
  `username` varchar(255) NOT NULL,
  `userpass` varchar(255) NOT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;


message表:

CREATE TABLE `message` (
  `messageid` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `context` varchar(255) DEFAULT NULL,
  `wholeft` varchar(255) DEFAULT NULL,
  `lefttime` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`messageid`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;


reply表:

CREATE TABLE `reply` (
  `context` varchar(255) DEFAULT NULL,
  `messageid` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`messageid`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;


附上工程的结构图:

这里写图片描述

至此我们的主要功能已经完成,页面非常low。

在此附上工程压缩包下载地址:http://download.csdn.net/download/itcreater000/9860689

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,514评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,142评论 25 707
  • 距离注会考试,已经过去半个多月了!这半个多月里,我没有想象中的那么轻松,解脱和快乐!备考注会以来,我的压力实在是太...
    等枫来_c170阅读 254评论 0 0
  • 梦回古都。 寻一人白首,恋伊人相思。唯无物而所求,却孤独而终老。 无聊之人著
    M唧唧阅读 238评论 1 2
  • 在金钱工作和爱情婚姻你会选择哪个,我会选择金钱。我宁愿抱着金钱入土为安,也不要走进婚姻的坟墓。是的,我是单身,恋爱...
    sunnykunyi阅读 227评论 0 0