1.消息的发布
通过页面表单提交数据,页面表单代码如下(这里插入一个fckeditor网页编辑器作为输入文本域)
<form action="/bbs/Publish" method="post"> <p> 消息标题: <input type="text" name="title" size="156"/>
</p> <p> 消息内容: <FCK:editor instanceName="content" basePath="/fckeditor" toolbarSet="myToolbar" height="300" width="970"></FCK:editor> </P> <p align="center"> <input type="submit" value="提交"/> <input type="reset" value="重置" /> </p> </form>
页面提交数据后,后台的业务逻辑就要进行相应的处理和前面的user相似,采用简单工厂模式处理业务逻辑
现在com.congbbs.dao中建立一个借口类提供处理业务的方法
package com.congbbs.dao;import com.congbbs.javabean.Message; public interface MessageDao { //添加消息 public void addMessage(Message message); }
然后再com.congbbs.dao.imple中创建一个实现类来实现该接口的方法
package com.congbbs.dao.imple; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp;import com.congbbs.dao.MessageDao; import com.congbbs.javabean.Message;import com.congbbs.util.DbConn; public class MessageDaoImpl implements MessageDao { //插入一条消息 @Override public void addMessage(Message message) {
//通过工具类获得数据库的链接 Connection conn = DbConn.getConnection();
//编写sql语句 String sql = "insert into tb_message(messageTitle, messageContent,userID, publishTime)"+ "values(?,?,?,?)"; PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); ps.setString(1, message.getMessageTitle()); //将传过来的数据对应装配到sql语句中 ps.setString(2, message.getMessageContent()); ps.setInt(3, message.getUserID()); ps.setTimestamp(4, new Timestamp(message.getPublishTime().getTime())); // 获取当前操作的时间 ps.execute(); //将数据提交到数据库中 } catch (Exception e) { e.printStackTrace(); }finally { //关闭相应的数据连接对象 DbConn.close(ps); DbConn.close(conn); } } }
在com.congbbs.factory创建相应的工厂类如下:(用户工厂类打创建方式是相似的作用也是一样)
package com.congbbs.factory; import com.congbbs.dao.MessageDao; import com.congbbs.dao.imple.MessageDaoImpl; public class MessageDaoFactory { public static MessageDao getMessageDaoInstance(){ return new MessageDaoImpl(); } }
接下来就是通过servlet将表单提交的数据接收并调用相应的业务逻辑处理方法进行处理
package com.congbbs.servlet; import java.io.IOException; import java.util.Date; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.congbbs.dao.MessageDao; import com.congbbs.factory.MessageDaoFactory; import com.congbbs.javabean.Message; import com.congbbs.javabean.User; public class Publish extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); //设置request请求的编码 response.setCharacterEncoding("UTF-8"); //设置response相应的编码 response.setContentType("text/html; charset=UTF-8"); //告知浏览器该页面的解析格式和编码 String title = request.getParameter("title"); //接收表单提交的数据,这里的"title"要了表单中的name属性一致 String content = request.getParameter("content"); //同理 ServletContext servletContext = getServletContext(); //获得servlet内置的上下文对象 RequestDispatcher dispatcher = null; //定义分发对象 User user = (User)request.getSession().getAttribute("user"); //获取登录时提交在session中的用户对象数据 //进行简单的验证,将信息反馈回页面 if(user == null){ request.setAttribute("error", "要发布消息必须先登录!!"); dispatcher = servletContext.getRequestDispatcher("/jsp/publish.jsp"); //转发回原界面 }else { if(title == null || "".equals(title)){ request.setAttribute("error", "必须要输入消息标题!!"); dispatcher = servletContext.getRequestDispatcher("/jsp/publish.jsp"); }else{ if(content == null || "".equals(content)){ request.setAttribute("error", "不能发布空消息!!!"); dispatcher = servletContext.getRequestDispatcher("/jsp/publish.jsp"); }else { Message message = new Message(); //通过数据验证后,将数据装配到一个message对象中传给后台 message.setUserID(user.getUserID()); message.setMessageTitle(title); message.setMessageContent(content); message.setPublishTime(new Date()); MessageDao messageDao = MessageDaoFactory.getMessageDaoInstance(); //获得message业务处理的实例 messageDao.addMessage(message); //调用插入方法 dispatcher = servletContext.getRequestDispatcher("/GetMessageList"); //插入成功转发到显示消息的servlet进行查询显示 } } } dispatcher.forward(request, response); //跳转页面 } }
进行相应的简单测试,在com.congbbs.test包中创建简单的测试方法进行测试,看看业务逻辑是否能正确的插入数据
@org.junit.Test public void testAddMessage(){ MessageDao messageDao = MessageDaoFactory.getMessageDaoInstance(); Message message = new Message(); message.setMessageTitle("测试信息"); message.setMessageContent("插入成功"); message.setUserID(Integer.parseInt("10086")); message.setPublishTime(new Date()); messageDao.addMessage(message); System.out.println("插入成功。。。。。。。。。"); }
看看数据库后台,看看是否成功插入数据,接下来就是分页查询并显示消息列表了