留言板管理系统

我的完成效果图:

提交后:

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

创建留言板数据库:

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

<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. 【医学影像】《Identifying Medical Diagnoses and Treatable Diseases by Image-Based Deep Learning》论文笔记

    这篇论文的作者是张康教授为首的团队,联合国内外众多医院及科研机构,合力完成,最后发表在cell上,实至名归. 从方法的角度上来说,与上一篇博客中的论文很相似,采用的都是InceptionV3模型,同时 ...

  2. python(unittest)报告导出(二):使用 BeautifulReport导出

    BeautifulReport(导出的报告比HTMLTestRunner更全面) 下载地址及安装位置 https://github.com/TesterlifeRaymond/BeautifulRep ...

  3. 用Javac编译Java文件时出现“编码 GBK 的不可映射字符“的error

    前提:JDK版本 >= 1.6会出现编译报错, 1.6前只会是警告 以下是javac的document: 遇到这种情况的原因是: 文件编码格式与编译器编译所选的encoding不同,有非英文字符 ...

  4. mongoDB使用小记

    1.简介: MongoDB是由c++语言编写的,基于分布式文件存储的开源数据库系统.MongoDB将数据存储为一个文档,数据结构有键-值对,类似于JSON对象. MongoDB其中的一些概念如下: M ...

  5. Oracle远程数据建物化视图(materialized)创建简单记录,以及DBLINK的创建

    目的:实现远程数据库访问及其相应表的定时同步 一.远程数据库dblink的创建 select * from dba_db_links; select * from user_sys_privs;--查 ...

  6. 动态时间规整DTW(Dynamic Time Warping )

    动态时间规整DTW(Dynamic Time Warping ) 原文:https://blog.csdn.net/raym0ndkwan/article/details/45614813 算法笔记- ...

  7. 解决chrome浏览器对于自动填充的input表单添加的默认的淡黄色背景问题 && 一般的浏览器input和button的高度不一致问题

    解决chrome浏览器对于自动填充的input表单添加的默认的淡黄色背景问题 如果我们把一个表单设置位 autofocus ,这时这个表单在获取焦点后就会产生淡黄色的背景,我们就是使用!importa ...

  8. 卸载oracle10g

    网上搜集的.暂时先用着完全卸载Oracle方法:软件环境: 1.Windows XP + Oracle 10g 2.Oracle安装路径为:d:\Oracle 1.如果数据库配置了自动存储管理(ASM ...

  9. 游戏反编译工具dnSpy

    dnSpy使用的工具下载地址为: https://github.com/cnxy/dnSpy/archive/v4.0.0.zip 或 dnSpy官方下载地址: https://github.com/ ...

  10. Django级联删除的选项

    Django级联删除的选项 Django模型中的on_delete属性具有如下选项: CASCADE 级联删除,也就是被引用的实体被删除后,相关的记录信息都会被删除. PROTECT 阻止删除被引用的 ...