留言板管理系统

我的完成效果图:

提交后:

我的留言板基本架构如图:

创建留言板数据库:

刚开始我的前台主页中写留言信息表单:

<body>
<h1>留言板</h1>
<form action="提交后的页面地址" method="post" >
留言者:<input type="text" name="author" />
留言的内容:<input type="text" name="content" rows="100 "cols=""/>
<input type="submit" value="提交信息"/>
</form>
</body>

开始建立后台Java类中层次
我先在我的实体层里写了一个实体类实现增加的实体类如图:

public class MessageBorad {
private int id; private String message; private String author; private Date pastTime; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public Date getPastTime() {
return pastTime;
} public void setPastTime(Date pastTime) {
this.pastTime = pastTime;
} }

写我Dao层里的BaseDao工具类

public class BaseDao{

     public static final String driver="com.mysql.jdbc.Driver";
public static final String url="jdbc:mysql://localhost:3306/数据库名字";
public static final String username="root";
public static final String password=""; public Connection con;
public PreparedStatement ps;
public ResultSet rs; static{
Class.forname(driver);
}
public Connection getConnection() throws Exception{
if(con==null||con.isClosed()){
con=DriverManager.getConnection(url,username,password);
}
return con;
}
public void closeResources() throws Exception{
rs.close();
ps.close();
con.close();
}
//执行增删改
public int exeuteUpdate(String sql,Object...Objs) throws Exception{
con=getConnection();
ps=con.prepareStatement(sql);
for(int i=;i<objs.length;i++){
ps.setObject(i+,objs[i]);
}
int count=ps.executeUpdate();
return count;
}
//获取结果集ResultSet
public ResultSet executeQuery(String sql,Object...Objs) throws Exception{
con=getConnection();
ps=con.prepareStatement(sql);
for(int i=;i<objs.length;i++){
ps=setObject(i+,objs[i]);
}
rs=ps.executeQuery();
return rs;
}
public int delete(int id) throws Exception{
return ;
}
}

在Dao层里写一个实现类:

public interface ImessageBorad{
//所有我接口里的方法:
public boolean addMessage(String message,String author,Date paseTime) throws Exception;
//分页的集合方法
public List<Object[]> boradList(int pageIndex,int pageSize) throws Exception;
//分页的总数
public int messageCount() throws Exception;
}

在我的实现包里写一个实现类:
用我的dbutil的时候,加入一个dbutil的jar包,链接数据库也需要jar包,中间的是文件上传的Jar包:

我的实现类的引用:

开始写我的类:

public class ImpMessageBorad implements ImessageBorad {
con=bd.getConection();
DbUtils ut=new DbUtil();
QueryRunner qr=new QueryRunner();
BaseDao bd=new BaseBao();
ArrayListHandler al=new ArrayListHandler();
public boolean addMessage(String boradContent, String author, Date time) throws Exception {
int num=qr.update(con,"insert into message(message,author,pastTime) values (?,?,?)",boradContent,author,DateTime);
if(num>){
flag=true;
}
ut.closeQuietly(con);
}
public List<Object[]> boradList(int pageIndex,int pageSize) throws Exception{
String sql="select * from message limit ?,?";
Object[] parameters={
(pageIndex)';
(pageSize);
};
return qr.query(con,sql,parameters,al); }
public int messageCount() throws Exception{
string sql="select count(1) as co from message";
int num=;
ResultSet rs=bd.executeQuery(sql);
if(rs.next()){
num=rs.getInt("co");
}
return num;
} }

service 就是调用我的Dao层里的方法和实现

所以直接写我的servlet调用我的service里的方法:

//先解决乱码问题:
ImessageBoradService msg=new MessageBoradServiceImp();
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
if(“da”.equest.getParameter("action")){
String boradContent=request.getParameter("name");
String author=request.getParameter("message");
Date dt=new Date();
try{
if(msg.addMessage(boradContent, author, dt)){
request.setAttribute("success", "添加成功");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}else {
request.setAttribute("success", "添加失败");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); } }
int pageSize=2;
int pageIndex=0;
if("ww".equals(request.getParameter("ca"))){
String index=request.getParameter("pageIndex");
System.out.println(index);
if(index.equals("0")){
pageIndex=pageIndex+pageSize; }else{
System.out.println(2);
int in=Integer.parseInt(index);
pageIndex=in+pageSize;
System.out.println(3);
}
} if("ws".equals(request.getParameter("ca"))){
String index=request.getParameter("pageIndex");
System.out.println(index);
if(index.equals("0")){ pageIndex=0;
}
else {
int in=Integer.parseInt(index); pageIndex=in-pageSize;
} }
request.setAttribute("pageIndex", pageIndex);
try {
request.setAttribute("list", msg.boradList(pageIndex, pageSize)) ;
request.getRequestDispatcher("/index.jsp").forward(request, response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

在我的前台页面中form表单:

<h1>留言板:</h1>
<br>
<%
List<Object[]> list=(List<Object[]>)request.getAttribute("list"); for(Object[] object:list){ %>
<p style="backcolor:red">作者:<%=object[2] %> <%=object[0] %>楼</p>
<lable>内容</lable>
<label><%=object[1] %></label>
<p> <%=object[3] %></p>
<%
} %> <br>
<a href="MessageServlet?ca=ww&&pageIndex=${pageIndex}">下一页</a>
<a href="MessageServlet?ca=ws&&pageIndex=${pageIndex}">上一页</a> <form action="MessageServlet?action=da" method="post"> 请输入你的姓名:<br><input type="text" name="name"><br> 留言内容:<br><textarea rows="15" cols="20" name="message"></textarea><br><br>
<input type="submit" value="提交信息"><br>
</form>
<label style="color:red">${success }</label>

我还在这里  奋斗着   你在哪里  在奋斗吗  地狱的镰刀

 

欣欣的留言板项目====超级触动的dbUtil实现留言板的更多相关文章

  1. vue+egg.js+mysql一个前后端分离留言板项目

    一.前序 我相信每个人前端搬运工和我想法都是一样的,都有一个做全栈的梦,无奈面对众多的后台语言,却不从下手,今天由我来带你们潜入全栈的门槛,注意是门槛.能不能学的会后面的内容全靠坚持了. 我今天主要做 ...

  2. ARM核心板_迅为imx6工控核心板_核心板中的小新潮

    ARM核心板_迅为imx6工控核心板_核心板中的小新潮核心板参数 尺寸 51mm*61mm CPU Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 内存 2GB DD ...

  3. [安卓开发板]迅为IMX6 四核Android开发板

    工业级核心板-Android开发板 10层高速PCB设计,充分保证电磁兼容 处理器:开发板默认是四核商业扩展级芯片,可根据用户需求更换单核.双核.工业级.汽车级处理器,批量更省成本. 扩展引脚:320 ...

  4. asp.net留言板项目源代码下载

    HoverTree是一个asp.net开源项目,实现了留言板功能. 前台体验网址:http://hovertree.com/guestbook/ 后台请下载源代码安装. 默认用户名:keleyi 默认 ...

  5. Django入门3 简单留言板项目案例及mysql驱动的安装配置

    新建jangostart项目 使用manager.py新建app即单独的应用 创建一个message应用 manage.py@djangostart > startapp message 如果a ...

  6. Java基础重点知识之欣欣向然

    题目: 第一题:二重循环: public class Text01 { //完成歌曲排序的效果 public static void main(String[] args) { String[] zi ...

  7. Asp.net mvc5开源项目"超级冷笑话"

    业务时间做了个小网站,超级冷笑话,地址:http://www.superjokes.cn/ 开发技术: asp.net mvc5 +SQLServer2012 ORM:NPoco 用了简单的三层结构 ...

  8. Android Studio 第一次新建Android Gradle项目超级慢的解决方案

    大家有什么问题,欢迎问我! 注:Android Studio在第一次新建一个Gradle项目时需要下载Gradle,所以启动很慢(Gradle-bin大约三十几兆),所以我们应该事先帮他下载好. 首先 ...

  9. vue项目中使用bpmn-番外篇(留言问题总结)

    前情提要 “vue项目中使用bpmn-xxxx”系列的七篇文章在上周已经更新完成,发表后,有小伙伴在使用时提出了一些文章中没有讲到的问题,此篇作为番外篇,将大家提出的共性问题解答一下,欢迎大家支持原创 ...

随机推荐

  1. 调试K3网页版需要注意的问题

    1.BIN目录下不能存放类名相同的多个文件,即使修改了dll名称也不可以,必须保持唯一性,多余的备份到其他目录 2.引用的标准dll集合需要与当前运行程序的标准dll集合保持一致,可以通过修改引用路径 ...

  2. WINDOWS SERVER 2012标准版密钥

    Windows Server 2012 R2 安装密钥(只适用安装,不支持激活) 标准版 = NB4WH-BBBYV-3MPPC-9RCMV-46XCB MMPXK-NBJDQ-JPM34-WX3FM ...

  3. 1093 字符串A+B (20 分)

    #include <iostream> using namespace std; int main() { int n; string s1, s2; getline(cin,s1); g ...

  4. 1.使用frp穿透内网

    1.前因后果 1.1弃用ngrok 为节约服务器成本,花了500多块买了一个华为云得1G 1核心 5M得云服务器.然后用ngrok来穿透内网.一直用得还  但是今天在弄nginx得时候发现 ngrok ...

  5. MB Star C3 vs MB Star C4

    New Mercedes Benz Star C3 is a professional diagnostic tool specially for mercedes benz cars. Merced ...

  6. 前端cookie、localStorage、sessionStorage缓存技术总结

    转载自:https://www.cnblogs.com/belove8013/p/8134067.html 1.Cookie JavaScript是运行在客户端的脚本,因此一般是不能够设置Sessio ...

  7. linux 安装python

    wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz #下载安装包 tar zxvf Python-3.6.0.tgz #解压 . ...

  8. Python文件的I/o

    文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 文件I/O 本章只讲述所有基本的的 ...

  9. 关于 vertical-align 的一些小知识

    引子 在日常开发过程中,我们经常会遇到如下的场景,一行中既有图片也有文字,而且图片还要和文字对齐.效果如下: 通常代码如下: <!DOCTYPE html> <html> &l ...

  10. Mybatis多参数

    转载自:一杯甜酒 http://blog.csdn.net/u012562943/article/details/52316071 据我目前接触到的传多个参数的方案有三种.第一种方案 DAO层的函数方 ...