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

一、开发环境

MyEclipse8.6+WampServer+MySQL

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

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

二、思路介绍

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

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

三、数据库结构

数据库名称:blog

表内容:

(1)、user表

Field Type Comment
uid int(3) NOT NULL 用户编号(主键)
name varchar(10) NOT NULL 名字
pwd varchar(12) NOT NULL 密码
status int(1) NOT NULL 身份
condi int(1) NOT NULL 用户状态
friend varchar(100) NULL 用户好友
userimg varchar(100) NULL 头像路径
sex int(1) NOT NULL 性别(0未填写1男2女)0下同
age int(3) NOT NULL 年龄
constellation int(2) NOT NULL 星座
addres varchar(15) NOT NULL 地址
bloodtype varchar(5) NOT NULL 血型
sign varchar(25) NOT NULL 头像

(2)usermessage表

Field Type Comment
MessageId int(5) NOT NULL 留言id(主键)
wuid int(5) NOT NULL 留言者id
guid int(5) NOT NULL 被留言者id
MessageText text NOT NULL 留言内容
ReplyMessage text NULL 回复内容
writetime varchar(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");//获取当前登录用户的idString 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 blocke.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);elseonereply=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));elsemap.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

JSP+SQL实现留言功能(含留言回复功能),附源码相关推荐

  1. jsp+ssm计算机毕业设计逸尘房屋销售管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  2. jsp+ssm计算机毕业设计民宿客栈管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  3. jsp+ssm计算机毕业设计大方汽车租赁管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. 【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.开启定位功能 手机定位分为卫星定位和网络定位两大类. (1)卫星定位 卫星定位服务由几个全球卫星导航系统提供. 卫星定位的原理是根据多颗卫星与导航芯片 ...

  5. jsp+ssm计算机毕业设计党建工作信息管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  6. 【C#+打印组件】实现电商快递单打印系统 一:功能展示、系统介绍(附源码和资源)

    需要源码和资源请点赞关注收藏后评论区留言私信~~~ 快递单打印精灵是一套通用的快递打印软件,它实用灵活方便,不受各种快递单格式的限制,由使用者自行定义单据的打印格式,并且该系统可以设置多种单据格式,这 ...

  7. jsp+ssm计算机毕业设计车辆违章信息管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  8. jsp+ssm计算机毕业设计政府公用车辆管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. jsp+ssm计算机毕业设计高校班主任班级管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  10. jsp+ssm计算机毕业设计高校奖学金评定管理系统【附源码】

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. 常识:佛前三炷香是什么意思
  2. OpenCV图像缩放函数resize()的使用
  3. 像数据科学家一样思考:12步指南(上)
  4. stark组件开发之组合搜索基本显示
  5. ThinkPHP6项目基操(4.拦截无效请求 控制器或方法不存在)
  6. 20181213-python1119作业郭恩赐
  7. 【遥感图像处理软件】ArcGIS Pro 使用总结
  8. java并发编程实战电子书,王者笔记!
  9. MySql 集群/主从
  10. 【导航算法】无人机路径跟踪L1导航算法
  11. EasyUI 中文乱码问题
  12. 大学计算机考试word实操夏威夷,计算机一级等级考试操作题WORD(4页)-原创力文档...
  13. 统帅转型:轻时尚时代挺进年轻领地
  14. PhotoshopCC 2018(19.1.3)绿色精简/增强无需注册安装直接用
  15. CMake使用宏编译测试
  16. 组合数c(n,m)计算的四种方法
  17. php跳水比赛,2018年“迎春杯”海南省青少年健身游泳比赛成功举行 前奥运跳水冠军许艳梅见证海南游泳健儿风采...
  18. ssh mysql jsp码头船只出行及配套货柜码放管理系统的设计与实现
  19. 安全通信与安全通信标准EN50159
  20. 表白代码c语言,C语言告白代码,一闪一闪亮晶晶~

热门文章

  1. C语言Python语言打印 ascii 表 乱码的原因,出现问号,无法打印心形
  2. 9012年已经过去一半,小灰都做了些什么?
  3. 关于使用KEPWARE 链接OMRON PLC 的心得
  4. 超华科技:紧抓市场机遇,抢占“智慧城市”高地
  5. 照片怎么通过活体检测_照片活体检测,微信拍照活体检测,单张照片活体
  6. Latex排版介绍比较好的网站总结
  7. 将数据从MongoDB数据库洗到MySQL数据库
  8. WIN7+64位+ndk配置
  9. matlab wav格式音频去除人声
  10. 零基础入门学习Python(35)--图形用户界面入门:EasyGui