【日记本系统】6–首页展示2

2016-12-19 10:42    582人浏览    标签:,     

内容显示:

blob.png

先建立Diary,DiaryType实体类

Diary.java(省略了属性的get和set方法)

public class Diary {
	private int diaryId;
	private String title;
	private String content;
	private int typeId=-1;
	private String typeName;
	private Date releaseDate;
	private String releaseDateStr;//日期字符型
	private int diaryCount;//日志分类总数
	
	public Diary(String title, String content, int typeId) {
		super();
		this.title = title;
		this.content = content;
		this.typeId = typeId;
	}
	public Diary() {
		super();
		// TODO Auto-generated constructor stub
	}
    
}	

DiaryType.java(省略了属性的get和set方法)

public class DiaryType {
	private int diaryTypeId;
	private String typeName;
	private int diaryCount;

	public DiaryType(String typeName) {
		super();
		this.typeName = typeName;
	}
	public DiaryType() {
		super();
		// TODO Auto-generated constructor stub
	}
}

要获取到日志列表还需要建立DiaryDao,在里面写方法用于获取数据库中的记录。

Dao

DiaryDao.java

package cn.javabb.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import cn.javabb.entity.Diary;
import cn.javabb.entity.PageBean;
import cn.javabb.util.BbUtil;
public class DiaryDao {
	/**
	 * 获取所有日志记录
	 * @param con
	 * @param pageBean
	 * @param s_diary
	 * @return
	 * @throws Exception
	 */
	public List<Diary> diaryList(Connection con,PageBean pageBean,Diary s_diary)throws Exception{
		List<Diary> diaryList=new ArrayList<Diary>();
		StringBuffer sb=new StringBuffer("select * from t_diary t1,t_diaryType t2 where t1.typeId=t2.diaryTypeId ");
		sb.append(" order by t1.releaseDate desc");
		if(pageBean!=null){
			sb.append(" limit "+pageBean.getStart()+","+pageBean.getPageSize());
		}
		PreparedStatement pstmt=con.prepareStatement(sb.toString());
		ResultSet rs=pstmt.executeQuery();
		while(rs.next()){
			Diary diary=new Diary();
			diary.setDiaryId(rs.getInt("diaryId"));
			diary.setTitle(rs.getString("title"));
			diary.setContent(rs.getString("content"));
			diary.setReleaseDate(BbUtil.String2Date(rs.getString("releaseDate"), "yyyy-MM-dd HH:mm:ss"));
			diaryList.add(diary);
		}
		return diaryList;
	}
	/**
	 * 获取日志记录总数
	 * @param con
	 * @param s_diary
	 * @return
	 * @throws Exception
	 */
	public int diaryCount(Connection con,Diary s_diary)throws Exception{
		StringBuffer sb=new StringBuffer("select count(*) as total from t_diary t1,t_diaryType t2 where t1.typeId=t2.diaryTypeId ");
		System.out.println(sb);
		PreparedStatement pstmt=con.prepareStatement(sb.toString());
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			return rs.getInt("total");
		}else{
			return 0;
		}
	}
	/**
	 * 按日志时间分类展示
	 * @param con
	 * @return
	 * @throws Exception
	 */
public List<Diary> diaryCountList(Connection con)throws Exception{
		List<Diary> diaryCountList=new ArrayList<Diary>();
		String sql="SELECT DATE_FORMAT(releaseDate,'%Y年%m月') as releaseDateStr ,COUNT(*) AS diaryCount  FROM t_diary GROUP BY DATE_FORMAT(releaseDate,'%Y年%m月') ORDER BY DATE_FORMAT(releaseDate,'%Y年%m月') DESC;";
		PreparedStatement pstmt=con.prepareStatement(sql);
		ResultSet rs=pstmt.executeQuery();
		while(rs.next()){
			Diary diary=new Diary();
			diary.setReleaseDateStr(rs.getString("releaseDateStr"));
			diary.setDiaryCount(rs.getInt("diaryCount"));
			diaryCountList.add(diary);
		}
		return diaryCountList;
	}
	/**
	 * 展示日志
	 * @param con
	 * @param diaryId
	 * @return
	 * @throws Exception
	 */
	public Diary diaryShow(Connection con,String diaryId)throws Exception{
		String sql="select * from t_diary t1,t_diaryType t2 where t1.typeId=t2.diaryTypeId and t1.diaryId=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, diaryId);
		ResultSet rs=pstmt.executeQuery();
		Diary diary=new Diary();
		if(rs.next()){
			diary.setDiaryId(rs.getInt("diaryId"));
			diary.setTitle(rs.getString("title"));
			diary.setContent(rs.getString("content"));
			diary.setTypeId(rs.getInt("typeId"));
			diary.setTypeName(rs.getString("typeName"));
			diary.setReleaseDate(BbUtil.String2Date(rs.getString("releaseDate"),"yyyy-MM-dd HH:mm:ss"));
		}
		return diary;
	}
	/**
	 * 日志添加
	 * @param con
	 * @param diary
	 * @return int 
	 * @throws Exception
	 */
	public int diaryAdd(Connection con,Diary diary)throws Exception{
		String sql="insert into t_diary values(null,?,?,?,now())";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, diary.getTitle());
		pstmt.setString(2, diary.getContent());
		pstmt.setInt(3, diary.getTypeId());
		return pstmt.executeUpdate();
	}
	/**
	 * 删除日志
	 * @param con
	 * @param diaryId
	 * @return int 
	 * @throws Exception
	 */
	public int diaryDelete(Connection con,String diaryId)throws Exception{
		String sql="delete from t_diary where diaryId=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, diaryId);
		return pstmt.executeUpdate();
	}
	/**
	 * 日志更新
	 * @param con
	 * @param diary
	 * @return int 
	 * @throws Exception
	 */
	public int diaryUpdate(Connection con,Diary diary)throws Exception{
		String sql="update t_diary set title=?,content=?,typeId=? where diaryId=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, diary.getTitle());
		pstmt.setString(2, diary.getContent());
		pstmt.setInt(3, diary.getTypeId());
		pstmt.setInt(4, diary.getDiaryId());
		return pstmt.executeUpdate();
	}
	/**
	 * 判断某一个日志类下是否存在日志,如果存在 返回true
	 * @param con
	 * @param typeId
	 * @return
	 * @throws Exception
	 */
	public boolean existDiaryWithTypeId(Connection con,String typeId)throws Exception{
		String sql="select * from t_diary where typeId=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, typeId);
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){
			return true;
		}else{
			return false;
		}
	}
}

一般的Dao类处理都会有几个方法:获取所有记录数,添加记录,删除记录,修改记录,查询记录,也就是常说数据库的CRUD操作。具体的类中的每个方法,可以看上面的代码,写别的类同样适用,无论什么工程底层与数据库打交道无非也就是这几个方法。

编写Servlet

通过用户登录获得请求,然后获取数据,并且实现分页

package cn.javabb.web;
import java.io.IOException;
import java.sql.Connection;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.javabb.dao.DiaryDao;
import cn.javabb.entity.Diary;
import cn.javabb.entity.PageBean;
import cn.javabb.util.BbUtil;
public class IndexServlet extends HttpServlet{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	DiaryDao diaryDao=new DiaryDao();
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		HttpSession session=request.getSession();
		String all=request.getParameter("all");
		String page=request.getParameter("page");
		Diary diary=new Diary();
		if(BbUtil.isEmpty(page)){
			page="1";
		}
		Connection con=null;
		PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(BbUtil.getValue("pageSize")));
		try {
			con=BbUtil.getCon();
			List<Diary> diaryList=diaryDao.diaryList(con,pageBean,diary);
			int total=diaryDao.diaryCount(con,diary);
			String pageCode=this.genPagation(total, Integer.parseInt(page), Integer.parseInt(BbUtil.getValue("pageSize")));//生成分页代码
			request.setAttribute("pageCode", pageCode);//将分页代码放到request中
			request.setAttribute("diaryList", diaryList);
			request.setAttribute("mainPage", "jsp/diary/diaryList.jsp");
			request.getRequestDispatcher("index.jsp").forward(request, response);//请求转向index.jsp页面
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				BbUtil.closeCon(con);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

并在其中实现日志记录分页功能,生成分页代码:

currentPage:当前页数

totalNum:总记录数

pageSize:每页共多少记录

private String genPagation(int totalNum,int currentPage,int pageSize){
		int totalPage=totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;
		StringBuffer pageCode=new StringBuffer();
		pageCode.append("<li><a href='Index?page=1'>首页</a></li>");
		if(currentPage==1){
			pageCode.append("<li class='disabled'><a href='#'>上一页</a></li>");
		}else{
			pageCode.append("<li><a href='Index?page="+(currentPage-1)+"'>上一页</a></li>");
		}
		for(int i=currentPage-2;i<=currentPage+2;i++){
			if(i<1||i>totalPage){
				continue;
			}
			if(i==currentPage){
				pageCode.append("<li class='active'><a href='#'>"+i+"</a></li>");
			}else{
				pageCode.append("<li><a href='Index?page="+i+"'>"+i+"</a></li>");
			}
		}
		if(currentPage==totalPage){
			pageCode.append("<li class='disabled'><a href='#'>下一页</a></li>");
		}else{
			pageCode.append("<li><a href='Index?page="+(currentPage+1)+"'>下一页</a></li>");
		}
		pageCode.append("<li><a href='Index?page="+totalPage+"'>尾页</a></li>");
		return pageCode.toString();
	}

配置servlet

 <servlet>
    <servlet-name>indexServlet</servlet-name>
    <servlet-class>cn.javabb.web.IndexServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>indexServlet</servlet-name>
    <url-pattern>/Index</url-pattern>
  </servlet-mapping>

为了登录的时候获取到后来的日志请求数据,将LoginServlet的登录转向改为转向IndexServlet,通过IndexServlet获取数据再转向到首页去。

源码地址:http://pan.baidu.com/s/1nvnpP4t

相关文章

留言评论

评论已关闭。