WEB-INF下创建views文件夹,并创建404.jsp, error.jsp,main.jsp,内容皆任意,
下面给出404和error页面的个人的设计:
404.jsp内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="<%=basePath %>favicon.ico">
<title>404错误页面</title>
<!-- Bootstrap core CSS -->
<link href="<%=basePath %>css/bootstrap.min.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="<%=basePath %>css/font-awesome.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<div class="container">
<div style="position: absolute;left:50%;top:50%;margin-left:-350px;margin-top: -100px;width:700px;height: 200px;line-height:200px;
text-align:center;
background: none repeat scroll 0% 0% #FFECEC;border: 1px solid #FFD2D2;">
页面未找到
</div>
</div><!-- /.container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="<%=basePath %>js/bootstrap.min.js"></script>
error.jsp内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="<%=basePath %>favicon.ico">
<title>错误信息显示页面</title>
<!-- Bootstrap core CSS -->
<link href="<%=basePath %>css/bootstrap.min.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="<%=basePath %>css/font-awesome.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<div class="container">
<div style="position: absolute;left:50%;top:50%;margin-left:-350px;margin-top: -100px;width:700px;height: 200px;
text-align:center;
background: none repeat scroll 0% 0% #FFECEC;border: 1px solid #FFD2D2;">
<div style="height: 125px;line-height: 125px;">
${errorMsg}
</div>
<div>
<button class="btn btn-primary" onclick="window.history.back();"><i class="fa fa-arrow-left"></i> 点击返回</button>
</div>
</div>
</div><!-- /.container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="<%=basePath %>js/bootstrap.min.js"></script>
在src根目录下创建hibernate.cfg.xml文件,内容如下:
<!--?xml version="1.0" encoding="UTF-8"?-->
<hibernate-configuration>
<session-factory>
<!-- 数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库连接信息 -->
<!-- 本地使用 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/wiki</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">server</property>
<!-- 服务器使用 -->
<!--
<property name="hibernate.connection.url">jdbc:mysql://127.4.222.2:3306/wiki?useUnicode=true&characterEncoding=utf-8</property>
<property name="hibernate.connection.username">adminNrQmBAY</property>
<property name="hibernate.connection.password">7uK_x3Cmqy4P</property>
-->
<!-- 打印SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 不格式化SQL语句 -->
<property name="hibernate.format_sql">false</property>
<!-- 为Session指定一个自定义策略 -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- C3P0 JDBC连接池 -->
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">true</property>
<!--
<property name="connection.autocommit">true</property>
-->
<!-- 映射文件 -->
<mapping resource="com/ais/cms/mapping/Bookmark.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
在src下创建包 com.ais.cms.controller,并创建BaseController类,内容如下:
package com.ais.cms.controller;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import com.ais.cms.exception.BusinessException;
public class BaseController extends SimpleMappingExceptionResolver {
@Override
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
// TODO Auto-generated method stub
String viewName = determineViewName(exception, request);
if (viewName != null) {
if (!(request.getHeader("accept").indexOf("application/json") > -1 || (request
.getHeader("X-Requested-With") != null && request.getHeader(
"X-Requested-With").indexOf("XMLHttpRequest") > -1))) {
// 非异步方式返回
Integer statusCode = determineStatusCode(request, viewName);
if (statusCode != null) {
applyStatusCodeIfPossible(request, response, statusCode);
// 跳转到提示页面
return getModelAndView(viewName, exception, request);
}
String errorMsg = null;
if (exception instanceof BusinessException) {
errorMsg = exception.getMessage();
} else {
errorMsg = "系统异常!";
}
request.getSession().setAttribute("errorMsg", errorMsg);
exception.printStackTrace();
return new ModelAndView("redirect:/error.do");
} else {
// 异步方式返回
try {
PrintWriter writer = response.getWriter();
writer.write(exception.getMessage());
response.sendError(404, exception.getMessage());
writer.flush();
} catch ( Exception e ) {
e.printStackTrace();
}
// 不进行页面跳转
return null;
}
}
return null;
}
@RequestMapping(value = "/error.do", method = RequestMethod.GET)
public ModelAndView error(HttpServletRequest request) {
String errorMsg = (String)request.getSession().getAttribute("errorMsg");
ModelAndView view = new ModelAndView("error");
view.addObject("errorMsg", errorMsg);
return view;
}
}
在src下创建包 com.ais.cms.dao,并创建IDAO接口,内容如下:
package com.ais.cms.dao;
import java.io.Serializable;
import java.util.Map;
import com.ais.cms.model.PageModel;
public interface IDAO {
public Serializable save(Object obj);
public void saveOrUpdate(Object obj);
public void update(Object obj);
public void delete(Serializable ... ids);
public T get(Serializable entityId);
public T load(Serializable entityId);
public Object uniqueResult(String hql, Object[] queryParams);
public long getCount();
public PageModel find(int pageNo, int maxResult);
public PageModel find(int pageNo, int maxResult,String where, Object[] queryParams);
public PageModel find(int pageNo, int maxResult,Map orderby);
public PageModel find(int pageNo, int maxResult, String where, Object[] queryParams,
Map orderby);
}
在src下创建包 com.ais.cms.dao.impl,并创建BookmarkDaoImpl类,内容如下:
/**
*
*/
package com.ais.cms.dao.impl;
import java.util.List;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.ais.cms.dao.BookmarkDao;
import com.ais.cms.model.BookmarkModel;
import com.ais.cms.model.PageModel;
@Repository("bookmarkDao")
@Transactional
public class BookmarkDaoImpl extends DaoSupport implements BookmarkDao
{
/*
* (non-Javadoc)
* @see com.ais.dao.BookmarkDao#findAll()
*/
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
public List findAll()
{
// TODO Auto-generated method stub
final PageModel pageModel = this.find(1, 100);
return pageModel.getList();
}
}
在src下创建包 com.ais.cms.dao.impl,并创建DaoSupport类,内容如下:
package com.ais.cms.dao.impl;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.ais.cms.model.PageModel;
import com.ais.cms.dao.IDAO;
import com.ais.cms.util.GenericsUtils;
@Transactional
@SuppressWarnings("unchecked")
public class DaoSupport implements IDAO{
protected Class entityClass = GenericsUtils.getGenericType(this.getClass());
@Autowired
protected HibernateTemplate template;
public HibernateTemplate getTemplate() {
return template;
}
@Override
public void delete(Serializable ... ids) {
for (Serializable id : ids) {
T t = (T) getTemplate().load(this.entityClass, id);
Session session = getTemplate().getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
tx.begin();
session.delete(session.merge(t));
tx.commit();
session.close();
// getTemplate().delete(t);
}
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public T get(Serializable entityId) {
return (T) getTemplate().get(this.entityClass, entityId);
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public T load(Serializable entityId) {
return (T) getTemplate().load(this.entityClass, entityId);
}
/**
* NO USE
*/
@SuppressWarnings("rawtypes")
@Override
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public Object uniqueResult(final String hql,final Object[] queryParams) {
return getTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(hql);
setQueryParams(query, queryParams);
return query.uniqueResult();
}
});
}
/**
* NO USE
*/
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public long getCount() {
String hql = "select count(*) from " + GenericsUtils.getGenericName(this.entityClass);
return (Long)uniqueResult(hql,null);
}
@Override
public Serializable save(Object obj) {
return getTemplate().save(obj);
}
@Override
public void saveOrUpdate(Object obj) {
Session session = getTemplate().getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
tx.begin();
session.saveOrUpdate(session.merge(obj));
tx.commit();
session.close();
// getTemplate().saveOrUpdate(obj);
}
@Override
public void update(Object obj) {
getTemplate().update(obj);
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public PageModel find(final int pageNo, int maxResult) {
return find(pageNo, maxResult, null, null, null);
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public PageModel find(int pageNo, int maxResult,
Map orderby) {
return find(pageNo, maxResult, null, null, orderby);
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public PageModel find(int pageNo, int maxResult, String where,
Object[] queryParams) {
return find(pageNo, maxResult, where, queryParams, null);
}
@SuppressWarnings("rawtypes")
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public PageModel find(final int pageNo, final int maxResult,
final String where, final Object[] queryParams,
final Map orderby) {
final PageModel pageModel = new PageModel();
pageModel.setPageNo(pageNo);
pageModel.setPageSize(maxResult);
getTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String hql = new StringBuffer().append("from ")
.append(GenericsUtils.getGenericName(entityClass))
.append(" ")
.append(where == null ? "" : where)
.append(createOrderBy(orderby))
.toString();
Query query = session.createQuery(hql);
setQueryParams(query,queryParams);
List list = null;
if(maxResult < 0 && pageNo < 0){
list = query.list();
}else{
list = query.setFirstResult(getFirstResult(pageNo, maxResult))
.setMaxResults(maxResult)
.list();
hql = new StringBuffer().append("select count(*) from ")
.append(GenericsUtils.getGenericName(entityClass))
.append(" ")
.append(where == null ? "" : where)
.toString();
query = session.createQuery(hql);
setQueryParams(query,queryParams);
int totalRecords = ((Long) query.uniqueResult()).intValue();
pageModel.setTotalRecords(totalRecords);
}
pageModel.setList(list);
return null;
}
});
return pageModel;
}
protected int getFirstResult(int pageNo,int maxResult){
int firstResult = (pageNo-1) * maxResult;
return firstResult < 0 ? 0 : firstResult;
}
protected void setQueryParams(Query query, Object[] queryParams){
if(queryParams!=null && queryParams.length>0){
for(int i=0; i orderby){
StringBuffer sb = new StringBuffer("");
if(orderby != null && orderby.size() > 0){
sb.append(" order by ");
for(String key : orderby.keySet()){
sb.append(key).append(" ").append(orderby.get(key)).append(",");
}
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
protected Session getSession(){
return (!this.template.isAllowCreate() ?
SessionFactoryUtils.getSession(this.template.getSessionFactory(), false) :
SessionFactoryUtils.getSession(
this.template.getSessionFactory(),
this.template.getEntityInterceptor(),
this.template.getJdbcExceptionTranslator()));
}
}
在src下创建包 com.ais.cms.exception,并创建BusinessException类,内容如下:
package com.ais.cms.exception;
public class BusinessException extends Exception {
/**
*
*/
private static final long serialVersionUID = 1L;
public BusinessException(String msg) {
super(msg);
}
public BusinessException(Throwable ex, String msg) {
super(msg, ex);
}
}
在src下创建包 com.ais.cms.model,并创建PageModel类,内容如下:
package com.ais.cms.model;
import java.util.List;
public class PageModel {
private int totalRecords;
private List list;
private int pageNo;
private int pageSize;
public int getTopPageNo() {
return 1;
}
public int getPreviousPageNo() {
if (pageNo <= 1) {
return 1;
}
return pageNo -1;
}
public int getNextPageNo() {
if (pageNo >= getTotalPages()) {
return getTotalPages() == 0 ? 1 : getTotalPages();
}
return pageNo + 1;
}
public int getBottomPageNo() {
return getTotalPages() == 0 ? 1 : getTotalPages();
}
public int getTotalPages() {
return (totalRecords + pageSize - 1) / pageSize;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}
在src下创建包 com.ais.cms.util,并创建GenericsUtils类,内容如下:
package com.ais.cms.util;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericsUtils {
@SuppressWarnings("rawtypes")
public static Class getGenericType(Class clazz){
Type genType = clazz.getGenericSuperclass();
Type[] types = ((ParameterizedType) genType).getActualTypeArguments();
if (!(types[0] instanceof Class)) {
return Object.class;
}
return (Class) types[0];
}
@SuppressWarnings("rawtypes")
public static String getGenericName(Class clazz){
return clazz.getSimpleName();
}
}