上一节我们实现了后台主页面,现在来看看后台的日志列表显示这一块如何实现;
目录
1.model层,写Diary类;
看一下数据库中t_diary这个表的字段属性等;
package com.java.model;
import java.util.Date;
public class Diary {
private int diaryId;
private String title;
private String content;
//给一个默认值为-1
private int typeId=-1;
private Date releaseDate;
public int getDiaryId() {
return diaryId;
}
public void setDiaryId(int diaryId) {
this.diaryId = diaryId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getTypeId() {
return typeId;
}
public void setTypeId(int typeId) {
this.typeId = typeId;
}
public Date getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(Date releaseDate) {
this.releaseDate = releaseDate;
}
}
2. dao层,写DiaryDao类;
这里主要是一个显示日志的方法;
package com.java.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.java.model.Diary;
import com.java.util.DateUtil;
public class DiaryDao {
//显示日志列表的方法
public List<Diary> diaryList(Connection con)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");
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(DateUtil.formatString(rs.getString("releaseDate"), "yyyy-MM-dd"));
diaryList.add(diary);
}
return diaryList;
}
}
3. 工具类;
这里要引入两个工具类,一个是日起对象与字符串对象的相互转换,另外一个是判断字符串是否为空;
DateUtil.java:
package com.java.util;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtil {
//将日期对象转换成字符串形式
public static String formatDate(Date date,String format){
String result="";
SimpleDateFormat sdf=new SimpleDateFormat(format);
if(date!=null){
result=sdf.format(date);
}
return result;
}
//将字符串形式转换成日期对象
public static Date formatString(String str,String format) throws Exception{
if(StringUtil.isEmpty(str)){
return null;
}
SimpleDateFormat sdf=new SimpleDateFormat(format);
return sdf.parse(str);
}
}
StringUtil.java:
package com.java.util;
public class StringUtil {
//判断字符串是否为空
public static boolean isEmpty(String str){
if("".equals(str)|| str==null){
return true;
}else{
return false;
}
}
//判断字符串是否不为空
public static boolean isNotEmpty(String str){
if(!"".equals(str)&&str!=null){
return true;
}else{
return false;
}
}
}
4.web层,写MainServlet类;
package com.java.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 com.java.dao.DiaryDao;
import com.java.model.Diary;
import com.java.util.DbUtil;
public class MainServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
private DbUtil dbUtil=new DbUtil();
private DiaryDao diaryDao=new DiaryDao();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置字符集编码
request.setCharacterEncoding("utf-8");
Connection con=null;
try {
con=dbUtil.getCon();
List<Diary> diaryList=diaryDao.diaryList(con);
//将所有日志信息全部存放起来
request.setAttribute("diaryList", diaryList);
//将得到的mainPage和diaryList连接起来
request.setAttribute("mainPage", "diary/diaryList.jsp");
//内部转发
request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
其中,核心代码只有几行:
5.页面,写diaryList.jsp;
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 使用JSTL标签需要引入的头文件 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- 使用fmt 对时间进行格式化的时候需要引入的头文件 -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="data_list">
<div class="data_list_title">
<img src="${pageContext.request.contextPath}/images/list_icon.png"/>日记列表
</div>
<div class="diary_datas">
<ul>
<c:forEach var="diary" items="${diaryList }">
<li>『<fmt:formatDate value="${diary.releaseDate }" type="date" pattern="yyyy-MM-dd"/>』<span> <a href="#">${diary.title }</a></span></li>
</c:forEach>
</ul>
</div>
</div>
</body>
</html>
效果如图: