精华内容
下载资源
问答
  • 这是留言板界面: 看到这样的页面说明你已经成功了。 接下去我们写一个保存用户提交的留言的页面吧: <%@pagelanguage="java"import="java.util.*,java.sql.*"pageEncoding="utf-8"%> <!...

    这是留言板界面:
     

     

    看到这样的页面说明你已经成功了。

    接下去我们写一个保存用户提交的留言的页面吧:

     
     
    1. <%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%> 
    2.  
    3.  
    4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    5. <html> 
    6.   <head> 
    7.       
    8.     <title>提交中……nileader.cn</title> 
    9.  
    10.  
    11.   </head> 
    12.     
    13.   <body> 
    14. <%  
    15. String driverName="com.mysql.jdbc.Driver";  //驱动程序名  
    16. String userName="root";                     //数据库用户名  
    17. String userPasswd="123456";                 //密码  
    18. String dbName="test";                       //数据库名  
    19. String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;  
    20.  
    21. Class.forName("com.mysql.jdbc.Driver").newInstance();  
    22.  
    23. Connection connection=DriverManager.getConnection(url);  
    24.  
    25. Statement statement = connection.createStatement();  
    26. %> 
    27.                 <%                            
    28.                                      request.setCharacterEncoding("gb2312");  
    29.                                      String author = request.getParameter("author");  
    30.                                      String content = request.getParameter("content");  
    31.                                       
    32.                 String sql_add = "insert into message(content,author)values('"+content+"','"+content+"')";  
    33.                 statement.executeUpdate(sql_add);  
    34.                   
    35.                 statement.close();  
    36.                 %> 
    37.      
    38.  
    39.    <meta   http-equiv="Refresh"   content="0.000001;url=index.jsp"> 
    40.   </body> 
    41. </html> 

    好了,重新发布一下,然后你就可以发布新的留言了。




    本文转自 nileader 51CTO博客,原文链接:http://blog.51cto.com/nileader/309084,如需转载请自行联系原作者

    展开全文
  • springmvc实现留言回复功能

    万次阅读 多人点赞 2018-07-09 17:15:21
    很多网站都提供了留言,评论回复功能,而我做的一个分享圈项目同样要实现功能。思路:1.可以只创建一个留言表,用户的留言和回复功能都插进这张表,这样建议在网页显示效果用爬楼形式,因为数据都在一张表,划分...

    很多网站都提供了留言,评论回复功能,而我做的一个分享圈项目同样要实现的功能。

    思路:

    1.可以只创建一个留言表,用户的留言和回复功能都插进这张表,这样建议在网页显示效果用爬楼形式,因为数据都在一张表,划分留言跟回复情况会有点复杂。

    2.创建留言表和回复表,用户的留言和回复插入相应的表,这样在网页中显示可以进行清晰的迭代数据库的数据,进行分层显示。

    效果:

     

    实现步骤:

    1.创建留言表和回复表:

     

    -- ----------------------------
    -- Table structure for `comment`
    -- ----------------------------
    DROP TABLE IF EXISTS `comment`;
    CREATE TABLE `comment` (
      `c_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '评论表id',
      `c_userid` varchar(50) DEFAULT NULL COMMENT '评论者id',
      `c_contentid` int(11) DEFAULT NULL COMMENT '内容id(在哪个内容下评论的)',
      `c_createtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '插入时间',
      `c_content` varchar(50) DEFAULT NULL COMMENT '评论的内容',
      `c_otherid` varchar(50) DEFAULT NULL COMMENT '给谁(该内容id的作者)留言',
      `c_state` int(11) DEFAULT NULL COMMENT '0-未读,1-已读',
      PRIMARY KEY (`c_id`),
      KEY `userid` (`c_userid`),
      KEY `contentid` (`c_contentid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
    
    

     

    -- ----------------------------
    -- Table structure for `reply`
    -- ----------------------------
    DROP TABLE IF EXISTS `reply`;
    CREATE TABLE `reply` (
      `r_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '回复表id',
      `r_userid` varchar(50) DEFAULT NULL COMMENT '回复的用户账号',
      `r_creatime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '插入时间',
      `r_content` varchar(100) DEFAULT NULL COMMENT '回复的内容',
      `r_otherid` varchar(50) DEFAULT NULL COMMENT '给谁回复',
      `r_words` varchar(100) DEFAULT NULL COMMENT '在哪个留言下的回复',
      `r_contentid` int(11) DEFAULT NULL COMMENT '那篇分享下的回复',
      `r_state` int(11) DEFAULT NULL COMMENT '0-未读,1-已读',
      PRIMARY KEY (`r_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;
    

    2.后台代码:

    评论:

     
    package net.stxy.one.controller;
    
    import net.stxy.one.model.*;
    import net.stxy.one.service.CommentService;
    import net.stxy.one.service.ContentService;
    import net.stxy.one.service.ReplyService;
    import net.stxy.one.service.UserinfoService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.List;
    
    /**
     * 评论操作的控制
     * Created by ASUS on 2018/5/27
     *
     * @Authod Grey Wolf
     */
    
    @Controller
    @RequestMapping("/user")
    public class CommentController {
    
        @Autowired
        private ContentService contentService;
    
        @Autowired
        private CommentService commentService;
    
        @Autowired
        private UserinfoService userinfoService;
    
        @Autowired
        private ReplyService replyService;
    
        /**
         * 跳到评论页面
         * @param contentId
         * @param model
         * @return
         */
        @RequestMapping("/comment")
        public String comment(@RequestParam("contentId")int contentId, Model model){
            System.out.println("id:"+contentId);
            //获取该内容的所有信息
            Content content=contentService.selectContent(contentId);
            //获取该内容的用户信息
            Userinfo userinfo=userinfoService.selectUser(content.getUserid());
            //获取在该内容下的所有评论
            List<Comment> commentList=commentService.selectById(contentId);
            //获取在该内容下的所有回复
            List<Reply>replyList=replyService.selectReply(contentId);
            model.addAttribute("content",content);
            model.addAttribute("user",userinfo);
            model.addAttribute("commentList",commentList);
            model.addAttribute("replyList",replyList);
            return "showContent";
    
        }
    
     
        /**
         * 增加评论
         * @param comment
         * @return
         */
        @RequestMapping("/addcomment")
        public String addComment(Comment comment){
            System.out.println("增加评论:"+comment.toString());
            if(comment.getcContent()!=null&& !comment.getcContent().equals("")) {
                int result = commentService.insertComment(comment);
            }
            return "redirect:/user/comment?contentId="+comment.getcContentid();
        }
    
       
    
    }
    

    回复:

     

     
    package net.stxy.one.controller;
    
    
    import net.stxy.one.model.Reply;
    
    import net.stxy.one.service.ReplyService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    
    
    /**
     * 回复处理控制器
     * Created by ASUS on 2018/6/7
     *
     * @Authod Grey Wolf
     */
    
    @Controller
    @RequestMapping("/user")
    public class ReplyController {
    
        @Autowired
        private ReplyService replyService;
    
        /**
         * 增加回复信息
         * @param reply
         * @return
         */
        @RequestMapping("/addreply")
        public String addReply(Reply reply){
            System.out.println("回复信息:"+reply.toString());
            if (reply.getrContent()!=null&& !reply.equals("")) {
                int res = replyService.addReply(reply);
            }
            return "redirect:/user/comment?contentId="+reply.getrContentid();
        }
    
    
    }
    

     

    3.页面jsp代码:

     

    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page import="java.util.Date" %>
    <%--
      Created by IntelliJ IDEA.
      User: ASUS
      Date: 2018/5/19
      Time: 17:30
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page isELIgnored="false" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = new Date();
        String nowDate = sdf.format(date);
    %>
    <html>
    <head>
        <title>Title</title>
        <link rel="stylesheet" href="<%=basePath%>/public/layui/src/css/layui.css"/>
        <link rel="stylesheet" href="<%=basePath%>/public/bootstrap/bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/public/css/bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/public/css/nprogress.css">
        <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/public/css/style.css">
        <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/public/css/font-awesome.min.css">
        <link rel="apple-touch-icon-precomposed" href="<%=request.getContextPath()%>/public/images/icon.png">
        <link rel="shortcut icon" href="<%=request.getContextPath()%>/public/images/favicon.ico">
    
        <%--图片css--%>
        <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/public/content/publishContent/css/picture.css">
    
    </head>
    <body>
    
    <%--显示信息--%>
    <div class="title">
        <h3>内容信息:</h3>
        <div class="more">
            <li><a data-cont="消息页" title="消息页" href="<%=request.getContextPath()%>/user/message?userid=${sessionScope.user.userid}">我的消息</a></li>
            <a href="<%=request.getContextPath()%>/user/selectPage" title="全部分享" >全部分享</a>
            <a href="<%=request.getContextPath()%>/user/selectPage?otherid=${sessionScope.user.userid}" title="别人的分享" >别人的分享</a>
            <a href="<%=request.getContextPath()%>/user/selectPage?userid=${sessionScope.user.userid}" title="我的分享" >我的分享</a>
            <a href="<%=request.getContextPath()%>/user/publishContent" title="发布分享" >发布分享</a>
        </div>
    </div>
    <article class="excerpt excerpt-${content.userid}" style="">
        <a class="focus" href="<%=request.getContextPath()%>/user/selectPage?userid=content.userid" title="分享圈" target="_blank" >
            <div class="imgs"><img class="img" src="<%=request.getContextPath()%>/public/images/head.jpg"/></div>
        </a>
    
        <header>
    
            <h2><a href="#" title="用户" target="_blank" >${content.userid}</a>
            </h2>
        </header>
        <p class="meta">
            <time class="time"><i class="glyphicon glyphicon-time"></i> ${content.createtime}</time>
            <span class="views"> <a class="comment" id="${content.id}" onclick="niceDetail(this.id)" title="点赞" target="_blank" ><i class="glyphicon glyphicon-comment" id="${content.id}"></i><span id="nice_${content.id}">${content.nice}</span> </a></span>
        </p>
        <p class="note">${content.content}</p>
    
    
        <%--图片--%>
        <div  class="spu_img"id="spu_img">
            <div id="spu_img_div_0" >
                <c:if test="${content.pic1 !=null }">
                    <img id = "img_1}"  src="http://localhost:8089/SharedImageServer/contentpic/${content.pic1}" width="80px" height="80px"/>
                </c:if>
                <c:if test="${content.pic2 !=null }">
                    <img id = "img_2"  src="http://localhost:8089/SharedImageServer/contentpic/${content.pic2}" width="80px" height="80px" />
                </c:if>
                <c:if test="${content.pic3 !=null }">
                    <img id = "img_3}" src="http://localhost:8089/SharedImageServer/contentpic/${content.pic3}" width="80px" height="80px" />
                </c:if>
            </div>
        </div>
    </article>
    
    <!-- 留言的表单 -->
    <form class="layui-form" action="<%=request.getContextPath()%>/user/addcomment" method="post" style="width:80%;">
        <input name="cUserid" value="${sessionScope.user.userid}" hidden="hidden"/>
        <input name="cOtherid" value="${content.userid}" hidden="hidden"/>
        <input name="cContentid" value="${content.id}" hidden="hidden"/>
        <input name="cState" value="0" hidden="hidden"/>
        <div class="layui-input-block" style="margin-left: 0;">
            <textarea id="cContent" name="cContent" placeholder="请输入你的留言" class="layui-textarea" style="height: 150px;"></textarea>
        </div>
        <br/>
        <div class="layui-input-block" style="text-align: left;margin-left: 0;">
            <input type="submit" class="layui-btn" value="留言">
        </div>
    </form>
    <br/>
    
    <!-- 留言信息列表展示 -->
    <div>
        <ul>
            <!-- 先遍历留言信息(一条留言信息,下面的全是回复信息) -->
            <c:forEach items="${requestScope.commentList}" var="comment">
                <!-- 如果留言信息是在本文章下的才显示 -->
                <c:if test="${comment.cContentid eq content.id && comment.cOtherid eq content.userid}">
                    <li style="border-top: 1px dotted #01AAED">
                        <br/>
                        <div style="text-align: left;color:#444">
                            <div>
                                <span style="color:#01AAED">${comment.cUserid}</span>
                            </div>
                            <div>${comment.cContent}</div>
                        </div>
                        <div>
                            <div class="comment-parent" style="text-align:left;margin-top:7px;color:#444">
                                <span>${comment.cCreatetime}</span>
                                &nbsp;&nbsp;&nbsp;&nbsp;
                                <p>
                                    <a href="javascript:;" style="text-decoration: none;" onclick="btnReplyClick(this)">回复</a>
                                </p>
                                <hr style="margin-top: 7px;"/>
                            </div>
                            <!-- 回复表单默认隐藏 start-->
                            <div class="replycontainer layui-hide" style="margin-left: 61px;">
                                <form action="<%=request.getContextPath()%>/user/addreply" method="post" class="layui-form">
                                    <input name="rContentid" id="rContentid" value="${content.id}" hidden="hidden"/>
                                    <input name="rUserid" id="rUserid" value="${sessionScope.user.userid}" hidden="hidden"/>
                                    <input name="rOtherid" id="rOtherid" value="${comment.cUserid}" hidden="hidden"/>
                                    <input name="rWords" id="rWords" value="${comment.cId}" hidden="hidden"/>
                                    <input name="rState" id="rState" value="0" hidden="hidden"/>
                                    <div class="layui-form-item">
                                        <textarea name="rContent" id="rContent" lay-verify="replyContent" placeholder="请输入回复内容" class="layui-textarea" style="min-height:80px;"></textarea>
                                    </div>
                                    <div class="layui-form-item">
                                        <button id="replyBtn" class="layui-btn layui-btn-mini" lay-submit="formReply" lay-filter="formReply">提交</button>
                                    </div>
                                </form>
                            </div>
    
                        </div>
    
                        <!-- 以下是回复信息 -->
                        <c:forEach items="${requestScope.replyList}" var="reply">
                            <!-- 每次遍历出来的留言下存在回复信息才展示(本条回复信息是本条留言下的就显示在当前留言下) -->
                            <c:if test="${reply.rContentid eq content.id && reply.rWords eq comment.cId}">
                                <div style="text-align: left;margin-left:61px;color: #444">
                                    <div>
                                        <span style="color:#5FB878">${reply.rUserid}&nbsp;&nbsp;回复${reply.rOtherid}</span>
                                    </div>
                                    <div>${reply.rContent}</div>
                                </div>
                                <div>
                                    <div class="comment-parent" style="text-align:left;margin-top:7px;margin-left:61px;color:#444">
                                        <span>${reply.rCreatime}</span>
                                        &nbsp;&nbsp;&nbsp;&nbsp;
                                        <p>
                                            <a href="javascript:;" style="text-decoration: none;" onclick="btnReplyClick(this)">回复</a>
                                        </p>
                                        <hr style="margin-top: 7px;"/>
                                    </div>
                                    <!-- 回复表单默认隐藏 -->
                                    <div class="replycontainer layui-hide" style="margin-left: 61px;">
                                        <form action="<%=request.getContextPath()%>/user/addreply" method="post" class="layui-form">
                                            <input name="rContentid" id="rContentid" value="${content.id}" hidden="hidden"/>
                                            <input name="rUserid" id="rUserid" value="${sessionScope.user.userid}" hidden="hidden"/>
                                                <%--  <input name="rCreatime" id="rCreatime" value="<%=nowDate%>" hidden="hidden"/>--%>
                                            <input name="rOtherid" id="rOtherid" value="${comment.cUserid}" hidden="hidden"/>
                                            <input name="rWords" id="rWords" value="${comment.cId}" hidden="hidden"/>
                                                <%--<input name="rId" id="rId" value="${reply.rId}" hidden="hidden"/>--%>
                                            <div class="layui-form-item">
                                                <textarea name="rContent" id="rContent" lay-verify="replyContent" placeholder="请输入回复内容" class="layui-textarea" style="min-height:80px;"></textarea>
                                            </div>
                                            <div class="layui-form-item">
                                                <button id="replyBtn1" class="layui-btn layui-btn-mini" lay-submit="formReply" lay-filter="formReply">提交</button>
                                            </div>
                                        </form>
                                    </div>
    
                                </div>
                            </c:if>
                        </c:forEach>
                    </li>
                </c:if>
            </c:forEach>
        </ul>
    </div>
    
    </body>
    <script src="<%=basePath%>/public/js/jquery-3.2.1.min.js"></script>
    <!-- 加载Layui的配置 -->
    <script src="<%=basePath%>/public/layui/src/layui.js"></script>
    <script type="text/javascript">
        layui.use('element', function () {
            var element = layui.element;
        });
    </script>
    <script type="text/javascript">
        function btnReplyClick(elem) {
            var $ = layui.jquery;
            if($(this)){
            }else if(!$(this)){
                $(elem).parent('p').parent('.comment-parent').siblings('.replycontainer').toggleClass('layui-show');
            }
            $(elem).parent('p').parent('.comment-parent').siblings('.replycontainer').toggleClass('layui-hide');
            if ($(elem).text() == '回复') {
                $(elem).text('收起')
            } else {
                $(elem).text('回复')
            }
        }
     $("#replyBtn").click(function(){
            var rContentid = $("#rContentid1").val();
            var rUserid = $("#rUserid1").val();
            var rOtherid = $("#rOtherid1").val();
            var rContent = $("#rContent11").val();
            var rWords = $("#rWords1").val();
         var rState= $("#rState").val();
            $.ajax({
                url: '<%=request.getContextPath()%>/user/addreply',
                type: 'POST',
                data: [{
                    rContentid: rContentid,
                    rUserid: rUserid,
                    rOtherid: rOtherid,
                    rContent: rContent,
                    rWords: rWords,
                    rState:rState
                }],
                success: function(data){
                    layer.open({
                        title: '提示信息',
                        content: '留言成功',
                        btn: ['确定'],
                       /* btn1: function(index){
                          /!*  $("body").html(data);*!/
                        }*/
                    });
                },
                error: function(){
                    layer.open({
                        title: '提示信息',
                        content: '出现未知错误'
                    });
                }
            });
        });
    
    </script>
    <script src="<%=request.getContextPath()%>/public/content/publishContent/js/content.js"></script>
    <script type="text/javascript">
    
        //用户点赞操作
        function niceDetail(id) {
            var userid=$("#userid").val();
            $.ajax({
                type: 'post',
                url: '<%=request.getContextPath()%>/user/niceDetail',
                data: {contentid: id, userid: userid},
                success: function(data){
                    $("#nice_"+id).text(data);
                }
            });
        };
    
        //用户关注操作
        function followUser(id) {
            alert(id);
            var userid=$("#userid").val();
            alert(userid);
            newid=id.replaceAll("@qq.com","");
            alert(newid);
            $("#"+id).attr("id",newid);
    
            $.ajax({
                type:'post',
                url: '<%=request.getContextPath()%>/user/followsUser',
                data: {followuser: id, fromuser:userid },
                success: function(data){
                    alert(data);
                    $("#"+newid).text(data);
    
                }
            });
        };
    
    
    </script>
    
    </html>
    

     

    我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

     

    展开全文
  • 最近在进行项目开发时,需要实现后台管理端打印功能,遂在网上一阵搜索,搜到了很多相关的文章。其中绝大部分文章都是使用的Lodop5.0(Web打印和套打控件)控件,而且有些环境下还不能使用。如有想使用此控件实现打印...

    JS实现打印功能(包括打印预览、打印设置等)

    最近在进行项目开发时,需要实现后台管理端打印功能,遂在网上一阵搜索,搜到了很多相关的文章。其中绝大部分文章都是使用的 Lodop5.0 (Web打印和套打控件) 控件,而且有些环境下还不能使用。如有想使用此控件实现打印功能的盆友,可点击进行下载。但我强烈推荐下面的方法,即利用系统本身的打印属性实现打印功能。简单的一条系统调用命令即可实现。

    前提条件:

    进行的电脑必须连接有打印机,至于判断PC是否连接打印机的问题还未能解决,欢迎有解决方法的朋友留言,小生不胜感激!

    代码

    介绍两个关键的css

    <style media="print">

             .Noprint { DISPLAY: none }

             .PageNext{ PAGE-BREAK-AFTER: always }

     </style>

    第一个在不需要打印的标签上添加(子标签也将不被打印),第二个在需要换行的标签处添加(该标签所表示的内容将在当前打印的一页内)

    基本的做法就是直接调用系统打印功能,如下代码所示:

    window.print();

    就可实现页面局部打印了,很easy吧!而且可以实现打印预览、设置等操作。

    展开全文
  • JSP+SQL实现留言功能(含留言回复功能),附源码

    万次阅读 多人点赞 2018-09-27 17:47:19
    一、开发环境 MyEclipse8.6+WampServer+MySQL 这里用到Apache,是因为我用了他来连接数据库。 项目中还用到了一个jar包,mysql-connector-java-5.1.13-bin.jar。 二、思路介绍 下图是回复信息在数据库中存储的...

    注:新版本源码在另一篇博客中:点击跳转

    一、开发环境

    MyEclipse8.6+WampServer+MySQL

    这里用到Apache,是因为我用了他来连接数据库。

    项目中还用到了一个jar包,mysql-connector-java-5.1.13-bin.jar。

    二、思路介绍

    下图是回复信息在数据库中存储的基本结构:

    这是博主自己想的一种思路,适合一些小型网站,如果需要在大型网站上运用,需要你们考虑下如何解决数据超载的问题。

    三、数据库结构

    数据库名称:blog

    表内容:

    (1)、user表

    FieldTypeComment
    uidint(3) NOT NULL用户编号(主键
    namevarchar(10) NOT NULL名字
    pwdvarchar(12) NOT NULL密码
    statusint(1) NOT NULL身份
    condiint(1) NOT NULL用户状态
    friendvarchar(100) NULL用户好友
    userimgvarchar(100) NULL头像路径
    sexint(1) NOT NULL性别(0未填写1男2女)0下同
    ageint(3) NOT NULL年龄
    constellationint(2) NOT NULL星座
    addresvarchar(15) NOT NULL地址
    bloodtypevarchar(5) NOT NULL血型
    signvarchar(25) NOT NULL头像

    (2)usermessage表

    FieldTypeComment
    MessageIdint(5) NOT NULL留言id(主键
    wuidint(5) NOT NULL留言者id
    guidint(5) NOT NULL被留言者id
    MessageTexttext NOT NULL留言内容
    ReplyMessagetext NULL回复内容
    writetimevarchar(20) NOT NULL留言时间

    四、html模块

    (1)、通过form表单跳转到留言功能预处理模块的serverlet,表单模块代码如下

    <form action="SelectMessageServlet" method="post">
    <!-- 
    手动更改value的值测试效果
    value根据自己项目更改为value="<%=userid %>"的形势 
    注:记得删除注释,不然jsp编译会出错
    -->
    <input type="hidden" name="userid" value="1"/>
    <input class="formliinput" type="submit" value="留言"/>
    </form>

    注:表带中的uid是当前登录用户的ID信息(记得删除注释,不然编译会出错

    (2)SelectMessageServlet代码介绍

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		response.setContentType("text/html");
    		response.setCharacterEncoding("utf-8");
    		request.setCharacterEncoding("utf-8");
    		//获取当前登录用户的id
    		String id=request.getParameter("userid");
    		MyBean a=new MyBean();
    		//查询该用户所有留言信息
    		ResultSet messageinfo=a.SelectUserMessage(id);
    		//查询该用户的留言回复信息
    		Map map=a.selectUserReplyMessage(id);
    		//当前用户的id,name等基本信息
    		ResultSet userinfo=a.selectoneuser(id);
    		//查询所有用户信息,不含密码
    		ResultSet alluserinfo=a.selectallusernopwd();
    		HttpSession session=request.getSession();
    		session.setAttribute("nowuserinfo", userinfo); 
    		session.setAttribute("messageinfo", messageinfo);
    		session.setAttribute("userallinfo", alluserinfo);
    		session.setAttribute("replymessage", map);
    		try {
    			a.con().close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		request.getRequestDispatcher("message.jsp").forward(request, response);
    }

     

    MyBean()方法,代码如下:

     

    package control;
    import java.sql.*;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import java.util.Date;
    public class MyBean {
    	Connection conn;
    	public MyBean() {
    		this.conn = con();
    	}
    	public Connection con() {//链接数据库
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		//后面进行了编码声明,防止中文乱码
    		String sqlcon = "jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=UTF-8";
    		try {
    			conn = DriverManager.getConnection(sqlcon, "root", "");
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return conn;
    	}
    	public ResultSet selectalluser(){//无参数,查询所有用户信息
    		ResultSet a = null;
    		String sql="select * from user order by uid";
    		Statement st;
    		try {
    			st=conn.createStatement();
    			a=st.executeQuery(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return a;
    	}
    	public ResultSet selectoneuser(String uid){//带参数,通过uid查询用户信息
    		ResultSet a = null;
    		String sql="select * from user where uid='"+uid+"' order by uid";
    		Statement st;
    		try {
    			st=conn.createStatement();
    			a=st.executeQuery(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return a;
    	}
    	public ResultSet selectallusernopwd(){//无参数,查询所有用户信息
    		ResultSet a = null;
    		String sql="select uid,NAME,userimg from user order by uid";
    		Statement st;
    		try {
    			st=conn.createStatement();
    			a=st.executeQuery(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return a;
    	}
    	public ResultSet SelectUserMessage(String gid){//查询该用户所有留言记录,并按时间排序
    		ResultSet rt=null;
    		String sql="select * from usermessage where guid="+gid+" order by writetime DESC";
    		try {
    			Statement st=conn.createStatement();
    			rt=st.executeQuery(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}		
    		return rt;
    	}
    	public Map selectUserReplyMessage(String gid){//查询留言回复信息
    		ResultSet rs=SelectUserMessage(gid);
    		ResultSet userinfo=null;
    		String replymessage=null;
    		String onereply=null;
    		int be = 0,en,rbe = 0,ren;
    		int i=1,j=1;
    		int alllengthnow=0;
    		int lengthnow=0;
    		String messageid=null;
    		boolean check1=true,check2=true;
    		Map map=new HashMap();
    		try {
    			while(rs.next()){
    			replymessage=rs.getString("ReplyMessage");
    			if(replymessage!=null){
    				messageid=rs.getString("MessageId");
    				alllengthnow = replymessage.length();
    				j=1;
    				en=0;be=0;
    				ren=0;rbe=0;
    				check1=true;
    				check2=true;
    				while(check1){
    					i=1;
    					rbe=0;
    					be=be+0;
    					en=replymessage.indexOf(">",be+1);
    					if(en==-1) check1=false;
    					if(be==0)
    						onereply=replymessage.substring(be,en+1);
    					else
    						onereply=replymessage.substring(be+1,en+1);
    					lengthnow=onereply.length();
    					check2=true;
    					while(check2){
    						rbe=rbe+0;
    						ren=onereply.indexOf("<",rbe+1);
    						if(ren==-1&&ren!=lengthnow-1)
    							ren=lengthnow-1;
    						if(ren==-1)check2=false;
    						if(rbe==0)
    							map.put(messageid+":"+j+"."+i, onereply.substring(rbe, ren));
    						else
    							map.put(messageid+":"+j+"."+i, onereply.substring(rbe+1, ren));
    						userinfo=selectoneuser(map.get(messageid+":"+j+".1").toString());
    						if(userinfo.next()){
    							map.put(messageid+":"+j+"."+(i+1), userinfo.getString("name"));
    							map.put(messageid+":"+j+"."+(i+2), userinfo.getString("userimg"));
    						}else{
    							map.put(messageid+":"+j+"."+(i+1), "");
    							map.put(messageid+":"+j+"."+(i+2), "");
    						}
    						i++;
    						if(ren==lengthnow-1)check2=false;
    						rbe=ren;
    					}
    					j++;
    					if(en==alllengthnow-1)check1=false;
    					be=en;
    				}
    			}
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return map;
    	}
    	public int insertmessage(String wid,String gid,String content){
    		int i=0;
    		String time=gettimenow();
    		String sql="insert into usermessage (wuid,guid,MessageText,writetime) values (?,?,?,?)";
    		try {
    			PreparedStatement pd=conn.prepareStatement(sql);
    			pd.setString(1, wid);
    			pd.setString(2, gid);
    			pd.setString(3, content);
    			pd.setString(4, time);
    			i=pd.executeUpdate();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return i;
    	}
    	//根据messageid查询回复信息
    	public ResultSet selectReplyByMessageId(String messageid){
    		ResultSet end = null;
    		String sql="select * from usermessage where MessageId="+messageid;
    		Statement st;
    		try {
    			st = conn.createStatement();
    			end=st.executeQuery(sql);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return end;
    	}
    	//添加留言回复功能
    	public int updatetmessagereply(String messageid,String wid,String content){
    		int end=0;
    		String sql="update usermessage set ReplyMessage=? where MessageId=?";
    		content=content.replaceAll("<", "&lt;");
    		content=content.replaceAll(">", "&gt;");
    		String time=gettimenow();
    		StringBuffer oldMessageReply=new StringBuffer();
    		ResultSet oldmessageinfo=selectReplyByMessageId(messageid);
    		try {
    			if(oldmessageinfo.next()){
    				if(oldmessageinfo.getString("ReplyMessage")!=null||oldmessageinfo.getString("ReplyMessage")==""){
    				oldMessageReply.append(oldmessageinfo.getString("ReplyMessage"));
    				}
    				oldMessageReply.append(wid+"<"+content+"<"+time+">");
    				PreparedStatement ps=conn.prepareStatement(sql);
    				ps.setString(1, oldMessageReply.toString());
    				ps.setString(2, messageid);
    				end=ps.executeUpdate();
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return end;
    	}
    	public String gettimenow(){//获取当前系统时间
    		Date a=new Date();
    		SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		String dataString=formatter.format(a);
    		System.out.println(dataString);
    		System.out.println(a.getTime());
    		return dataString;
    	}
    }

    注:bean方法中的留言回复功能,有时间我发一条详解,2执行完后跳转至message.jsp

    (3)、message.jsp页面代码

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ page import="java.sql.ResultSet" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<title>留言板</title>
    	<link rel="stylesheet" href="css/bootstrap.min.css">
    	<link rel="stylesheet" href="css/message.css">
    </head>
    <script type="text/javascript" src="js/jquery1111.min.js"></script>
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <script>
    var ti;
    $(document).ready(
    function (){
    	$("#userinfo").mouseover(function(){
    		$("#usernameshow").fadeIn(200);
    	});
    	$("#usernameshow").mouseover(function(){
    		clearTimeout(ti);
    		$("#usernameshow").show();
    	});
    	$("#usernameshow").mouseout(function(){
    		$("#usernameshow").hide();
    	});
    	$("#userinfo").mouseout(function(){
    		$("#usernameshow").stop(false,true);
    		ti=setTimeout(function(){
    			$("#usernameshow").hide();
    		},100);
    	});
    	$(".messageuserreply").click(function(){
    		var a=this.id;
    		$("[id$='div"+a+"']").toggle();	
    	});
    	$(".cancelinput").click(function(){
    		$(this).parents(".messageuserreplydiv").hide();
    	});
    });
    </script>
    <body>
    	  <%
    	 	String name="NULLUSER";
    	 	ResultSet userinfo=null;
    		ResultSet messageinfo=null;
    		ResultSet userallinfo=null;
    		Map map=new HashMap();
    		Iterator it=null;
    		Set keySet=null;
    		int i=1;
    	 	if(session.getAttribute("nowuserinfo")!=null){
    	 		userinfo=(ResultSet)session.getAttribute("nowuserinfo");
    	 		userinfo.beforeFirst();
    	 		userinfo.next();
    	 		name=userinfo.getString("name"); 		
    	 	}
    	 	if(session.getAttribute("messageinfo")!=null){
    	 		messageinfo=(ResultSet)session.getAttribute("messageinfo");
    	 	}
    		if(session.getAttribute("userallinfo")!=null){
    			userallinfo=(ResultSet)session.getAttribute("userallinfo");
    		}
    		if(session.getAttribute("replymessage")!=null){
    			map=(Map)session.getAttribute("replymessage");
    			keySet=map.keySet();//获取键的集合
    			it=keySet.iterator();//迭代键的集合
    			while(it.hasNext()){
    				Object key=it.next();
    				Object value=map.get(key);//获取每个键所对应的值
    				System.out.println(key+":"+value);
    			}
    		}
    	  %>
    	  <div id="bigtop">
    	  <div id="top">
    	  	<div id="topcontentleft">
    	      <div class="topbg">
    	      <a>博客首页</a>
    	      </div>
    	      </div>
    	  	<div id="topcontentright">
    	      <div id="userlogininfo">
    	      <span class="welcomeuser">欢迎你,</span>
    	      <span id="userinfo"><%=name %></span>
    	      <div class="showdivuserinfo">
    	      <ul id="usernameshow" style="display:none">
    	      <li>个人中心</li>
    	      <li>这是测试</li>
    	      <li style="border:0px">注销登录</li>
    	      </ul>
    	  	</div>
    	      </div>
    	      <div>
    	      <ul class="topul">
    	      	<li>
    	          <div class="nrmessage">消息中心<span class="badge">3</span></div>
    	          </li>
    	          <li style="border-right: none"><a href="#">退出登陆</a></li>
    	      </ul>
    	      </div>
    	  	</div>
    	  </div>
    	  </div>
    	<div id="content">
    	<div><!-- 留言展示内容 -->
    	<div class="MessagecontentBigBox"><!-- 内容外层div -->
    	<div class="MessagecontentBigBox-top">
    		<font>留言板</font>
    	</div>
    	<script type="text/javascript">
    		function checkdata(){
    			var a=document.getElementById("messagecontent").value;
    			if(a==null||a==""){
    				alert("输入不能为空!发布失败。");
    				return false;
    			}
    		}
    	</script>
    	<div class="messageinfodiv">
    		<div class="publishmessage">
    		<form action="AddMessageBy" method="post" onsubmit="return checkdata()">
    		<div class="publishmessagein"><textarea maxlength="60" rows="" cols="" id="messagecontent" name="messagecontent"></textarea></div>
    		<div class="publishmessagebutton"><input type="submit" value="发送">&nbsp;&nbsp;
    		<input type="reset" value="取消"> </div>
    		</form>
    		</div>
    		<ul>
    		<% 
    		int idi=1;
    		 while(messageinfo.next()){
    		String thisuserid=null;
    		String thisusername=null;
    		String thislogurl=null;
    		String thismessagecontent=null;
    		String thismessagereply=null;
    		String thismessageid=null;
    		if(messageinfo.getString("wuid")!=null||messageinfo.getString("wuid")!=""){
    			thisuserid=messageinfo.getString("wuid"); 
    			while(userallinfo.next()){
    				if(userallinfo.getString("uid").equals(messageinfo.getString("wuid"))){
    					thisusername=userallinfo.getString("name");
    					thislogurl=userallinfo.getString("userimg");
    					thismessagecontent=messageinfo.getString("MessageText");
    					thismessagereply=messageinfo.getString("ReplyMessage");
    					thismessageid=messageinfo.getString("MessageId");
    					break;
    				}
    			}
    			userallinfo.beforeFirst();
    		}
    		%>
    		<li class="thismessageinfodiv">
    		<img src="<%=thislogurl %>" class="messageuserimg"/>
    		<font class="messageusername"><%=thisusername %></font>
    		<br/>
    		<p class="messageusercontent">
    			<c:out value="<%=thismessagecontent %>" escapeXml="true" default="加载失败,请重试!"></c:out>
    		</p>
    		<p class="messageusertime"><%=messageinfo.getString("writetime") %></p>
    		<font class="messageuserreply" id="<%=idi %>">回复</font>
    		<%
    		if(thismessagereply!=null){
    		i=1;
    		keySet=map.keySet();//获取键的集合
    		it=keySet.iterator();//迭代键的集合
    		//System.out.print(it.hasNext());
    		%>
    		<div class="messagereplydiv">
    		<%
    		while(it.hasNext()){
    			Object key=it.next();
    			Object value=map.get(key);//获取每个键所对应的值
    			Object srcurl=map.get(thismessageid+":"+i+".5");
    			Object thisname=map.get(thismessageid+":"+i+".4");
    			Object thisreplycontent=map.get(thismessageid+":"+i+".2");
    			Object thisreplytime=map.get(thismessageid+":"+i+".3");
    			System.out.print(thisname);
    			if(srcurl==null)break;
    		%>
    		<img class="messagereplyimg" src="<%=srcurl %>">
    		<font class="messagereplyname"><%=thisname %></font>
    		<font class="messagereplycontent"><%=thisreplycontent %></font>
    		<p class="messagereplytime"><%=thisreplytime %></p>
    		<% i++;	} %>
    		</div>
    		<% } %>
    		<div class="messageuserreplydiv" id="replybigdiv<%=idi %>" style="display: none">
    		<form action="MessageUserReply" method="post" id="replymessageform">
    		<!-- <form action="" method="post" id="replymessageform<%=thismessageid %>"> -->
    		<input type="hidden" name="thismessageid" value="<%=thismessageid %>" />
    		<textarea rows="" cols="" id="replycontent" name="replycontent"></textarea><br/>
    		<input type="submit" value="确定">&nbsp;&nbsp;
    		<input type="reset" value="取消" class="cancelinput">
    		</form>
    		<script>
    			$(document).ready(function(){
    				$('#replymessageform<%=thismessageid %>').submit(function(){
    				$msid=$("#replymessageform<%=thismessageid %> input[name='thismessageid']").val();				
    				if($msid!=<%=thismessageid %>){return false;}
    				});
    			});
    		</script>
    		</div>
    		</li>
    		<% idi++; } %>
    		</ul>
    		
    	</div>
    	</div>
    	</div>
    	</div>
    </body>
    </html>

    注:1、id="replybigdiv<%=idi %>"的表单为回复模块的前端代码

    (3)发表留言功能,AddMessageBy代码介绍。这部分需根据自己的项目灵活更改,我这里做了一个用户自己给自己留言的方法。如需要在用户好友的留言板上留言,需要做一个好友互访的模块,然后根据这部分代码为参考,实现好友互相留言的功能。

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		response.setContentType("text/html");
    		response.setCharacterEncoding("utf-8");
    		request.setCharacterEncoding("utf-8");
    		PrintWriter out = response.getWriter();
    		HttpSession session=request.getSession();
    		ResultSet userinfo = (ResultSet)session.getAttribute("nowuserinfo");
    		String wid = null,id = null;
    		try {
    			userinfo.beforeFirst();
    			userinfo.next();
    			wid = userinfo.getString("uid");
    			id=userinfo.getString("uid");
    			userinfo.beforeFirst();
    		} catch (SQLException e1) {
    			e1.printStackTrace();
    		}
    		String content=request.getParameter("messagecontent");
    		MyBean a=new MyBean();
    		// uid为当前登录用户的id,即留言者的id
    		//wid为被留言者的id
    		//这里的留言者id和被留言者id为同一个,因为我么有做好友交互的界面
    		//通过好友交互的界面,将好友的id赋值给wid即可
    		int end=a.insertmessage(wid, id, content);
    		ResultSet messageinfo=a.SelectUserMessage(id);
    		ResultSet alluserinfo=a.selectallusernopwd();
    		 session.setAttribute("nowuserinfo", userinfo);
    		session.setAttribute("messageinfo", messageinfo);
    		session.setAttribute("userallinfo", alluserinfo);
    		try {
    			a.con().close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		if(end==1){
    			out.print("<script>");
    			out.print("alert('留言发布成功!');");
    			out.print("window.location.href='message.jsp';");
    			out.print("</script>");
    		}else{
    			out.print("<script>");
    			out.print("alert('Erron!留言失败!');");
    			out.print("window.location.href='message.jsp';");
    			out.print("</script>");
    		}
    	}

    (4)、留言回复功能,MessageUserReply代码介绍

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		response.setContentType("text/html");
    		response.setCharacterEncoding("utf-8");
    		request.setCharacterEncoding("utf-8");
    		HttpSession session=request.getSession();
    		ResultSet userinfo=(ResultSet)session.getAttribute("nowuserinfo");
    		String wid = null;
    		try {
    			userinfo.beforeFirst();
    			userinfo.next();
    			wid=userinfo.getString("uid");
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		String content=request.getParameter("replycontent");
    		String messageid=request.getParameter("thismessageid");
    		MyBean a=new MyBean();
    		int end=a.updatetmessagereply(messageid, wid, content);
    		ResultSet messageinfo=a.SelectUserMessage(wid);
    		//ResultSet userinfo=a.selectoneuser(wid);
    		ResultSet alluserinfo=a.selectallusernopwd();
    		Map map=a.selectUserReplyMessage(wid);
    		session.setAttribute("nowuserinfo", userinfo);
    		session.setAttribute("messageinfo", messageinfo);
    		session.setAttribute("userallinfo", alluserinfo);
    		session.setAttribute("replymessage", map);
    		request.getRequestDispatcher("message.jsp").forward(request, response);
    	}

    注:Mybean a = new MyBean();中mybean方法在2步骤中

    五、css样式部分

    项目中引入了bootstrap.min.css样式,我这里就没有列了,可去起步网官网下载下载。下面我展示的是message.css的内容。

    @CHARSET "UTF-8";
    *{
    	margin:0px;
    	padding:0px;
    	letter-spacing:0.2em;
    }
    body{
    	line-height: inherit;
    	background-image:url(../img/back.jpg);
    }
    a:link{
    	color:#FFF;
    	text-decoration:none;
    }
    a:visited{
    	color:#FFF;
    	text-decoration:none;
    }
    a:hover{
    	color:#FFF;
    	text-decoration:underline;
    }
    a:active{
    	color:#FFF;
    	text-decoration:none;
    }
    #bigtop{
    	width: 100%;
        height: 45px;
        background-color: rgba(20, 20, 20, 0.9);
        position: fixed;
        top: 0px;
        left: 0px;
        z-index: 999;
    }
    #top{
    	width:960px;
    	height:45px;
    	margin:0px auto;
    	color:#FFF;
    }
    #bigtopdiv{
    	margin:0px auto;
    	height:45px;
    }
    #topcontent{
    	margin:0px auto;
    	background-color:#666;
    	height:auto;
    }
    #topcontentleft{
    	width:40%;
    	height:auto;
    	float:left;
    }
    #topcontentright{
    	font-size:12px;
    	line-height:45px;
    	width: 35%;
    	height:45px;
    	float:right;
    	text-align:left;
    }
    .topbg{
    	float:left;
    	line-height:45px;
    	cursor: pointer;
    }
    .topbg a{
    }
    .topul{
    	float:left;
    	margin-bottom: 0px;
    }
    .topul li{
    	list-style:none;
    	height:45px;
    	float:left;
    	padding: 2px;
    	border-right:2px solid #595353;
    }
    .topul li:hover{
    	background-color:#000000;
    }
    .topul li div{
    	padding:0px 5px;
    	height:45px;
    }
    .topul li div img{
    	height:28px;
        vertical-align: middle;
    	margin-top:8px;
    }
    .nrmessage span{
    	position: relative;
    	left: -3px;
    	top: -8px;
    }
    #userlogininfo{
    	height:45px;
    	float:left;
    	padding:0px 5px;
    	border-right:2px solid #595353;
    	display:inline-flex;
    	display: -webkit-inline-flex;
    }
    .welcomeuser{
    	float: left;
    }
    #userinfo{
    	display: block;
    	margin:0px 5px;
    	width:auto;
    	height:45px;
    	padding:0px 10px;
    	cursor:pointer;
    	background-color:#ff0000;
    	color: #ffffff;
    	border-bottom:5px solid #5D5D5D;
    	box-shadow:0px -8px 8px #000000;
    	float: left;
    }
    #userinfo img{
    	height:30px;
    	width:30px;
    	border-radius:100%;
    	margin-right:5px;
    	padding-top:7px;
    }
    #userinfo:hover{
    	background-color:#000000;
    }
    #content{
    	width:960px;
    	height:auto;
    	margin:0px auto;
    	margin-bottom:50px;
    }
    .showdivuserinfo{
    	position:absolute;
    	color:black;
    	margin-top:50px;
    	width: 120px;
        z-index: 9999;
        margin-left: 65px;
    }
    .showdivuserinfo ul{
    	width:120px;
    	box-shadow: 0px 0px 10px;
    	border-radius:5px;
    	background-color:rgba(255, 255, 255, 0.93);
    }
    .showdivuserinfo li{
    	list-style:none;
    	border-bottom:1px dashed #CCC;
    	text-align:center;
    	font-size:18px;
    	z-index: 100;
    	cursor: pointer;
    }
    .MessagecontentBigBox{
    	width:960px;
    	margin-top:110px;
    	background-color: white;
    	padding-bottom: 15px;
    }
    ul{
    	list-style: none;
    }
    .MessagecontentBigBox-top{
    	widows: 100%;
    	height: 40px;
    	background-color: rgba(236,236,236,0.39);
    	padding:13px 0px 0px 5px;
    }
    .MessagecontentBigBox-top font{
    	font-size: 14px;
    	font-weight: bold;
    }
    .messageinfodiv{
    	width: 100%;
    	margin:0px auto 20px auto;
    }
    .publishmessage{
    	margin: 0px auto 10px auto;
    	padding:5px;
    }
    .publishmessage form{
    	margin: 0px auto;
    	width: 96%;
    }
    .publishmessagein{
    }
    .publishmessagebutton{
    	margin-top: 10px;
    }
    .publishmessagebutton input{
    	border:0px;
    	background-color: #7B8C9E;
    	color: white;
    	padding:5px;
    }
    .publishmessage textarea{
    	font-size: 18px;
        letter-spacing: 0.2em;
        width: 100%;
        height: 100px;
        max-width: 100%;
        max-height: 240px;
        min-width: 100%;
        min-height: 70px;
    }
    .thismessageinfodiv{
    	padding: 5px;
    	width: 96%;
    	border-bottom: 1px solid #CCC;
    	margin: 0px auto 5px auto;
    }
    .messageuserimg{
    	width: 50px;
    	height: 50px;
    	float: left;
    	margin-left: 5px;
    	border-radius: 5px;
    }
    .messageusername{
    	font-size: 16px;
    	margin-left: 5px;
    }
    .messageusercontent{
    	padding-bottom: 5px;
    	padding-left: 65px;
    	font-size: 18px;
    	letter-spacing: 0.3em;
    	margin-top: 20px;
        overflow-wrap: break-word;
    }
    .messageusertime{
    	clear: both;
    	display: inline;
    	padding-left: 60px;
    }
    .messageuserreply{
    	margin-left: 20px;
    	color: blue;
    	cursor: pointer;
    }
    .messageuserreplydiv{
    	clear: both;
    	margin-left:55px;
    	padding-bottom: 5px;
    }
    .messageuserreplydiv textarea{
    	width: 320px;
    	height:30px;
    }
    .messageuserreplydiv input{
    	margin-top:5px;
    }
    .messagereplydiv{
    	width: 90%;
        border-top: 1px solid #CCC;
        margin: 5px auto 0px auto;
        padding:5px;
    }
    .messagereplyimg{
    	width: 40px;
    	height: 40px;
    }
    .messagereplyname{
    	color: blue;
    }
    .messagereplytime{
    	padding-left: 46px;
    }
    #replycontent{
    	height: 80px;
    	width: 450px;
    	max-height: 160px;
    	max-width: 100%;
    }

    六、运行效果

    七、结语

    内容有点长,后续我会持续更新,进行缩减。最后感谢大家的支持。如果有什么问题不懂得或者有更好的建议,欢迎看官评论或私信。如果各位需要整个项目源码的,请加qq群在群文件里面自行免费下载。群号:100372253

     

    展开全文
  • 微信小程序–留言功能开发(免服务器) github代码网址:igo312 前言 实现留言板块的开发,可以与公众号绑定,提供公众号一个留言板块 使用腾讯云开发实现数据库等的读取,不再需要租借服务器,只要注册相应...
  • 小程序快速实现留言功能

    千次阅读 2019-08-02 08:06:00
    本教程是基于 “apifm-wxapi” 模块,教你快速实现小程序开发,所以你可能需要先了解以下知识点: 《创建 HelloWorld 项目》 《使用 “apifm-wxapi” 快速开发小程序》 《免费注册开通后台,获得专属域名》 需求说明...
  • 基于SSM的在线音乐网站开发实现

    千次阅读 2021-01-30 17:55:34
    基于SSM的在线音乐网站开发实现 本人的毕业设计,因为没有系统的学习过HTML和CSS,所以页面想不出什么设计元素,都是基于框架搭建而成的。前台页面为Bootstrap实现,后台页面为LayUI实现。目前项目虽然基本功能都...
  • 2.代码量比较少 本功能实现的代码的目录结构见 [ajax实时任务提示功能的实现 — vb2005xu自己动手系列(1)],这个可以作为它的插件插入,这里也是阐述一种开发思想:在网站开发的过程中,功能是逐步添加的,一开始并不能也...
  • 留言本管理模块 本讲大纲 1 留言本概述 2 版主回复留言功能的实现 3 版主单贴管理功能实现 留言本概述1 留言本管理模块主要包括版主回复留言管理和版主单贴管理版主回复留言功能是建立在后台留言信息管理的基础上在...
  • 留言本概述 本讲大纲 1 留言本概述 2 留言本的功能结构 3 留言本系统流程 4 程序预览 留言本概述 最基本的留言本需要实现功能很简单一般有用户查看留言发表留言版主查看留言回复留言和删除留言 本章介绍的留言本是...
  • Java Web 项目音乐网站开发实现

    千次阅读 2020-11-22 19:51:31
    Java Web 音乐网站开发实现 该系统采用当前主流的Java语言编写,框架上采用MVC三层模型结构,以动态的JSP页面作为与用户经行交互的视图,用户与服务器之间采用B/S架构。使用MySql作为后台数据库,在Windows环境...
  • 【Web技术】网站留言系统开发,及留言信息实时发送至指定邮箱 关键字:HTML PHP JavaScript CSS 文章目录【Web技术】网站留言系统开发,及留言信息实时发送至指定邮箱0 简述1 背景及需求分析2 可行性研究3 基础...
  • Django2.0笔记-实现简单的留言功能

    千次阅读 2018-12-25 22:32:08
    实现在线留言功能,留言信息保存到数据库,可登录后台查看留言信息。 实践 创建项目 使用Pycharm创建项目message_board,自动生成的目录结构如下: __init__.py 一个空文件,告诉 Pytho...
  • 功能主要用于微信公众号客服提醒,比如客户的商家认证审核通过,用户购买商品成功等功能提醒,可以有效减少网站项目开发所必要的资金节约。 1.接口代码。 接口代码如下: public function reply_customer(){  $...
  • jsp+javabean+servlet+Mysql实现MVC模式下的注册登录留言功能学习javaweb一段时间了,一直停留在片段式的学习模式中,今天决定花点时间综合学习过的零散知识写一个比较系统的小型项目,对于刚学习JavaEE的同学可能有...
  • 网站开发之鼠标悬停简单特效实现(四)

    万次阅读 多人点赞 2016-11-06 02:16:17
    鼠标悬停等操作和特效是网站设计非常重要的一个内容,常见的包括包括:鼠标移动悬停放大、鼠标悬停背景颜色变换、鼠标悬停下拉菜单显示、图片旋转等特效,这篇文章主要是总结HTML和JavaScript中关于鼠标操作的一些...
  • iOS开发- 以图搜图功能实现 (源码+解析)

    千次阅读 多人点赞 2014-12-29 20:59:48
    以图搜图这个功能相当实用, 之前在实现这个功能的时候, 有一些笔记, 今天就整合成博文, 分享给大家。这个demo主要实现功能包括:1. 自定义拍照界面2. 图像识别3. 以图搜图4. 信息获取(通过识别出的图像, 获取对应...
  • 利用语音Modem实现电话点播和留言功能 (加入日期:2003-11-8 点击数:9812)【收藏文章】【对此文发表评论】【编程爱好者论坛】【保存文章至硬盘】【打印文章】
  • 以图搜图这个功能相当实用, 之前在实现这个功能的时候, 有一些笔记, 今天就整合成博文, 分享给大家。   这个demo主要实现功能包括:   自定义拍照界面图像识别以图搜图信息获取(通过识别出的图像, 获取...
  • Javaweb实现简易的留言板项目

    万次阅读 多人点赞 2019-01-13 16:06:13
    此项目使用Eclipse+mysql 5.0+Tomcat v7.0开发实现的主要功能有增加留言,查询留言。附加用户的登录和注册。修改、删除和回复留言还未设计,望大家补充。 此留言板为Javaweb基础练习项目,供Javaweb入门者参考...
  • Web网页——留言功能

    万次阅读 多人点赞 2019-02-22 19:22:23
    本文描述如何在网页上实现一个简单的留言功能,仅支持文字留言开发环境:dreamweaverCC html +jscirpt + php 前置条件:1、一个简单的网站已经搭建完毕,支持用户登录网站。 2、用户已登录网站实现步骤...
  • python基础学习+实现极简留言网站

    千次阅读 2018-08-14 19:36:51
    最近几天没有再刷题,在老哥的要求下去简单地学习了一下Python然后要求做一个简单的留言网站。最后实现结果比较惨不忍睹,也没能做到把输入的数据存储到本地,先暂且贴出来后续改进。 Python的基础学习 Python...
  • 【游戏开发实战】教你使用Unity实现录屏生成GIF的功能,录个妹子跳舞的GIF吧
  • 本篇教程仅限功能开发,不包括真实业务逻辑,非常适合初学者上手开发。 手写代码从前台贯串后台,没有花哨的界面和友好性的js脚本提示 由于功能性较多,目前只手写了添加和查询功能。 修改和删除功能后续上线 ...
  • JSP实现留言板系统

    2018-06-25 10:05:51
    通过综合运用JSP、Servlet、JavaBean、JDBC、MySQL和MVC + DAO等技术与方法,设计与实现一个留言管理系统,进一步理解和掌握Java Web编程开发的基本技术和方法,熟练使用开发工具。 二、课程设计内容 设计留言管理...
  • 作为一个个人网站站长来说,我是很想给自己的网站做个微信第三方登录功能,不要问我为什么,因为微信的用户量是非常巨大的,如果能通过微信而给自己网站引流的话,那么那也是一波非常可观的流量,闲话不多说了直接进...
  • 作者:陈省 发表日期:2003年9月24日 有一段时间没有更新网站了,最近挺忙的,所以写书的进度慢了一些,两周只写了10多页设计模式相关的内容。希望在接下来的几周能加快进度,赶紧弄完。另外前两天,我被评为了...
  • 首页、分类、商品详情页面,包含加入购物车、收藏商品、商品评论功能、用户登录、微信登录、订单管理、地址管理;完整的购物流程,商品的加入、编辑、删除、批量选择,收货地址的选择,下单、会员中心(订单、收藏、...
  • 留言管理系统的设计与实现

    万次阅读 热门讨论 2018-03-24 13:55:58
    通过综合运用JSP、Servlet、JavaBean、JDBC、MySQL和MVC + DAO等技术与方法,设计与实现一个留言管理系统,进一步理解和掌握Java Web编程开发的基本技术和方法,熟练使用开发工具。二、课程设计内容设计留言管理...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,041
精华内容 10,416
关键字:

网站开发留言功能如何实现的