MVC框架简易留言板实例

MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC。

首先创建一个数据库
use master
--查看是否存在重名的数据库
if exists (select * from sysdatabases where name='Messages')
 drop database Messages
 --创建数据库
create database Messages
use Messages
--创建表
create table Message
(
messID int primary key identity(1,1),
messName varchar(10),
title varchar(200),
messDate datetime default getdate(),
content varchar(1000)
)
--插入数据
insert into Message(messName,title,content) values('张珊','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊1','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊2','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊3','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊4','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊5','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊6','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊7','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊8','中午开会','今天中午开会')
insert into Message(messName,title,content) values('张珊9','中午开会','今天中午开会')
select * from Message

 打开myeclipse,创建一个项目,再创建三个MVC框架的包
然后在javabean中创建连接数据库的类 BaseDao
这里边是连接数据库的通用方法还有 增删改查的通用方法,需要用数据库中的内容,一般离不开增删改查,在这里写上通用方法,可以方便后面的方法调用, 只需要继承这个类就行。

package com.ruanyuan.javabean;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BaseDao {
	//驱动
	private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
	//数据库的URL
	private static final String URL="jdbc:sqlserver://localhost:1433;DatabaseName=Messages";
	//数据库的用户名
	private static final String USERNAME="sa";
	//数据库的密码
	private static final String PASSWORD="sa";
	//连接对象
	protected Connection conn;
	//预编译PreparedStatement对象
	protected PreparedStatement pstmt;
	//结束集ResultSet对象
	protected ResultSet rs;
	
	// 数据库连接
	protected void getConnection() {
		try {
			// 注册sql驱动
			Class.forName(DRIVER);
			// 加载驱动并且得到连接对象
			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
		} catch (ClassNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}

	}
	// 释放资源
	protected void closeResource() {
		if (rs != null) {
			try {
				rs.close();// 释放结果集
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		if (pstmt != null) {
			try {
				pstmt.close();// 释放预编译的命令对象
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();// 释放连接对象
			} catch (SQLException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}

	}

	/**
	 * 增 删 改 的通用方法
	 * @param sql
	 * @param paras
	 * @return
	 */
	protected int execUpdate(String sql, String[] paras) {
		int count = 0;// 受影响的行数
		try {
			// 连接数据库
			this.getConnection();
			// 基于sql语句构建PreparedStatement对象
            pstmt=conn.prepareStatement(sql);
			// 遍历参数数组,并将值赋给PrepareStatement对象
			if (paras != null && paras.length > 0) {
				for (int i = 0; i < paras.length; i++) {
					pstmt.setString(i + 1, paras[i]);

				}
			}
			// 执行SQL语句
			count = pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			this.closeResource();
		}
		return count;
	}
	protected ResultSet execQuery(String sql,String[] paras){
		   
		try {
			//连接数据库
			this.getConnection();
			//基于SQL语句创建PreparedStantment对象
			pstmt = conn.prepareStatement(sql);
			//将SQL语句参数数组中的值依次赋给预执行语句
			if(paras!=null&¶s.length>0){
				for (int i = 0; i < paras.length; i++) {
					pstmt.setString(i + 1, paras[i]);

				}
			}
			//执行SQL语句
			rs = pstmt.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//返回结果集
		return rs;
	}
}

然后再写实体类

private int messID;
private String messName;
private String title;
private String content;
private java.sql.Date messDate;
然后再settergetter

然后是需要的方法(这里面用到了分页,但是先不介绍分页,后续再具体介绍分页)
package com.ruanyuan.oper;

import java.util.ArrayList;
import java.util.List;

import com.ruanyuan.javabean.BaseDao;
import com.ruanyuan.javabean.MessageBean;

public class ManageMes extends BaseDao {
	
	//添加
	public int addMessage(MessageBean messagebean){
		int count=0;
		String sql="insert into Message(messName,title,content) values(?,?,?)";
		String[] paras={messagebean.getMessName(),messagebean.getTitle(),messagebean.getContent()};
		try {
			count=super.execUpdate(sql, paras);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return count;
	}
	
	//查询
	public List<MessageBean> all(int pageNo){
		List<MessageBean> list=new ArrayList<MessageBean>();
		MessageBean messagebean=null;
		int pageSize=5;//每页最大记录数
		int rows=0;//表示每页之前的记录数
		if(pageNo >1){
			//计算每页之前记录数,例如第2页之前记录数(2-1)*5=5条
			rows=(pageNo -1)*pageSize;
		}
		try {
			String sql="select top "+pageSize+" * from Message where messID not in(select top "+rows+" messID from Message order by messID)order by messID";
			System.out.println(sql);
			rs=super.execQuery(sql, null);
			while(rs.next()){
			messagebean=new MessageBean();
			messagebean.setMessID(rs.getInt("messID"));
			messagebean.setMessName(rs.getString("messName"));
			messagebean.setTitle(rs.getString("title"));
			messagebean.setMessDate(rs.getDate("messDate"));
			messagebean.setContent(rs.getString("content"));
			list.add(messagebean);
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			super.closeResource();
		}
		return list;
	}
	//总数
	public int count(){
		int count=0;
		try {
			String sql="select count(*) from Message";
			rs=super.execQuery(sql, null);
			if(rs.next()){
				count=rs.getInt(1);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return count;
	}
}

接下来,搭建页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  	<form action="MessageServlet?fun=add" method="post">
    	<table width="50" border="1">
    		<tr bgcolor="#999999">
    			<td height="42" colspan="3">
    				<div align="center"><span>留言板</span></div>
    			</td>
    		</tr>
    		<tr>
    			<td width="28%" height="36">姓名:</td>
    			<td colspan="2"><input type="text" name="messName"/></td>
    		</tr>
    		<tr>
    			<td height="41">主题:</td>
    			<td colspan="2"><input type="text" name="title"/></td>
    		</tr>
    		<tr>
    			<td height="93">留言:</td>
    			<td colspan="2"><textarea name="content" row="8" cols="30"></textarea></td>
    		</tr>
    		<tr bgcolor="#999999">
    			<td height="60" colspan="3">
    				<label>
    					<div align="center">
    						<input type="submit" value="提交留言"/>    <input type="reset" value="重新编写"/>
    					</div>
    				</label>
    			</td>
    		</tr>
    	</table>
    </form>
  </body>
</html>

当填写好以后,点击提交 提交到servlet中,再这个里边进行判断,
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		ManageMes mm=new  ManageMes();
		MessageBean mesbean=new MessageBean();
		String fun=request.getParameter("fun")==null?"all":request.getParameter("fun");
		int pageNo=1;
		if(request.getParameter("pageNo")!=null){
			pageNo=Integer.parseInt(request.getParameter("pageNo"));
			}
		//如果输入参数小于1时pageNo等于1
		if(pageNo < 1){
			pageNo=1;
		}
	    int countMovie=mm.count();
	    request.setAttribute("count",countMovie);
		request.setAttribute("pageNo",pageNo);
		if(fun.equals("add")){
			String messName=request.getParameter("messName");
			String title=request.getParameter("title");
			String content=request.getParameter("content");
			if(messName == null || messName.length()<0){
				messName="";
			}
			if(title == null || title.length()<0){
				title="";
			}
			if(content == null || content.length()<0){
				content="";
			}
			
			mesbean.setMessName(messName);
			mesbean.setTitle(title);
			mesbean.setContent(content);
			int count=mm.addMessage(mesbean);
			if(count>0){//成功
				List<MessageBean> messList=mm.all(pageNo);
				HttpSession session=request.getSession();
				session.setAttribute("message",messList);
				request.getRequestDispatcher("viewMessage.jsp").forward(request, response);
			}else{//失败
				request.getRequestDispatcher("writeMessage.jsp").forward(request, response);
			}
		}
		if(fun.equals("all")){
			List<MessageBean> col=new ArrayList<MessageBean>();
			col=mm.all(pageNo);
			request.setAttribute("message", col);
			request.getRequestDispatcher("viewMessage.jsp").forward(request, response);
		}
	}
如果成功 跳转到 展示页面,如果失败,回到添加页面
这里用的是el表达式,更方便,  但是需要把所用到的东西 先存到作用域里边,这里才可以调用。
 <body>
    <c:forEach var="message" items="${message}">
    <table width="50%" border="1">
    	<tr>
    		<td width="29%" height="42" bgcolor="#99cc66"><span>主题:</span></td>
    		<td width="71%">${message.title}</td>
    	</tr>
    	<tr>
    		<td height="53" bgcolor="#99cc66"><span>留言人:</span></td>
    		<td>${message.messName}</td>
    	</tr>
    	<tr>
    		<td height="45" bgcolor="#99cc66"><span>留言时间:</span></td>
    		<td>${message.messDate}</td>
    	</tr>
    	<tr>
    		<td height="53" bgcolor="#99cc66"><span>留言内容:</span></td>
    		<td>${message.content}</td>
    	</tr>
    </table>
    </c:forEach>
  <jsp:include  page="ListByPage.jsp"></jsp:include>
  </body>


  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值