留言板管理系统

我的完成效果图:

提交后:

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

创建留言板数据库:

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

<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. css属性详解和浮动

    一.CSS属性组成和作用 属性:属性值 1)每个css样式都必须由两部分组成:选择符和声明 注:声明又包括属性和属性值 2)css属性:属性是指定选择符具有的属性,他是css的核心,css2共有150 ...

  2. java多线程-ReadWriteLock

    大纲: ReadWriteLock接口 ReentrantReadWriteLock ReentrantReadWriteLock使用 一.ReadWriteLock public interface ...

  3. Python 实现flatten功能

    from collections import Iterable def flatten(items): for x in items: if isinstance(x, Iterable) and ...

  4. (转)Linux:使用libgen.h:basename,dirname

    Linux:使用libgen.h:basename,dirname basename以及dirname是两个命令: [test1280@localhost ~]$ which basename /bi ...

  5. python中函数参数传递的几种方法

    转自  http://www.douban.com/note/13413855/ Python中函数参数的传递是通过“赋值”来传递的.但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题 ...

  6. 转 关于shell中if 语法结构的广泛误解

    转自 ttp://blog.csdn.net/security134/article/details/6742156 最近学习SHELL编程 这篇文章很好很重要.有些东西不能想当然.同时不是表面看起来 ...

  7. document.documentElement和document.body 与document.compatMode的关系

    首先我们看看document.compatMode(兼容模式): document.compatMode它有两种可能的返回值:BackCompat和CSS1Compat, document.compa ...

  8. JavaScript 函数用途

    在JavaScript中,函数可以:被赋值给一个变量,被赋值为对象的属性.作为参数被传入别的函数.作为函数的结果被返回.用字面量来创建. 1. 赋值给一个变量 //声明一个函数,接受两个参数 func ...

  9. C++的引用本质上等同于C的指针

    本文给出一个很小的例子,通过反汇编后观察认为,C++的引用本质上等同于C的指针. o foo1.cpp v.s. foo2.cpp o 对foo1.cpp 和foo2.cpp进行编译 $ g++ -g ...

  10. 原创:微信小程序亲测体验,公众号入口曝光!

    扫描即可体验知乐微信小程序,并且看到入口 你可以在这里看到相应的小程序:微信小程序商店 发现内有历史列表入口 真实小程序 搜索 操作栏 放置到桌面示意图必须搜索全称,才可以搜索到小程序 推荐给朋友,可 ...