前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一)

SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一)

作者头像
小帅丶
发布2018-02-09 17:40:07
2.4K0
发布2018-02-09 17:40:07
举报
文章被收录于专栏:XAIXAI
最新项目下载地址

访问地址

1.基于easyui的 增 删 改 查

2.基于poi的导出excel

3.基于 SpringMVC HandlerInterceptor验证

项目结构图

源代码和jar包等下会上传是网盘

http://yun.baidu.com/pcloud/album/info?query_uk=3724757956&album_id=3094796070610213829

一:web.xml代码

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>elve</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
            classpath:app-context.xml
    </param-value>
  </context-param>
  <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>demo.root</param-value>
  </context-param>
  
  
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
  <listener>
    <listener-class>
        com.xs.demo.listener.SessionListener
    </listener-class>
  </listener>
  <servlet>
    <servlet-name>app</servlet-name>
       <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:app-servlet.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>60</session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <error-page>
    <error-code>500</error-code>
    <location>/system/500.jsp</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/system/404.jsp</location>
  </error-page>
  <error-page>
    <error-code>403</error-code>
    <location>/system/403.jsp</location>
  </error-page>
</web-app>

1.UserController代码

代码语言:javascript
复制
package com.xs.demo.controller;

import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.bind.annotation.RequestMapping;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.xs.demo.entity.Userinfo;
import com.xs.demo.service.UserService;
import com.xs.demo.util.StringUtil;
/**
 * SpringMVC+Hibernate +MySql+ EasyUI ---CRUD
 * @author 宗潇帅
 * 类名称:UserController 
 * @date 2014-11-15 下午4:05:32 
 * 备注:
 */
@Controller
@RequestMapping(value="/user")
public class UserController {
    
    UserService userService;
    
    private static Log log = LogFactory.getLog(UserController.class);
    
    /**
     * index --list
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/index")
    public String index(HttpServletRequest request,
            HttpServletResponse response)throws Exception{
        return "/views/user/index";
    }
    /**
     * list method
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/list")
    public String list(HttpServletRequest request,
            HttpServletResponse response) throws Exception{
        int start = ServletRequestUtils.getIntParameter(request, "page", 1)-1;
        int size = ServletRequestUtils.getIntParameter(request, "rows", 0);
        String name = ServletRequestUtils.getStringParameter(request, "name","");
        String order = StringUtil.getOrderString(request);    //取得排序参数
        
        String result = null;
        try{
            result = userService.list(name,start, size, order);
        }catch (Exception e) {
            if(log.isErrorEnabled()){
                log.error("查询列表失败", e);
            }
            result = "";
        }
        String sortName = ServletRequestUtils.getStringParameter(request, "sort", "");
        String sortOrder = ServletRequestUtils.getStringParameter(request, "order", "");
        Map<String, Object> searchMap = new HashMap<String,Object>();
        searchMap.put("pageNumber", start+1);
        searchMap.put("rows", size);
        searchMap.put("sortName", sortName);
        searchMap.put("sortOrder", sortOrder);
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        String s = gson.toJson(searchMap);
        s = URLEncoder.encode(s,"UTF-8"); 
        
        StringUtil.writeToWeb(result, "html", response);
        return null;
    }
    /**
     * gotoAdd --page
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/gotoAdd")
    public String gotoAdd(HttpServletRequest request,
            HttpServletResponse response) throws Exception{
        return "views/user/add";
    }
    /**
     * add --method
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/add")
    public String add(HttpServletRequest request,
            HttpServletResponse response)throws Exception {
        String result = null;
        Userinfo userinfo = (Userinfo)StringUtil.requestToObject(request, Userinfo.class);
        Userinfo dbUserinfo =  userService.getUserByName(userinfo.getName());
        if(dbUserinfo!=null){
            result = "{\"success\":false,\"msg\":\"名称已存在!\"}";
            StringUtil.writeToWeb(result, "html", response);
            return null;
        }
        try{
            if(userinfo.getName().trim().length()<0){
                result = "{\"success\":false,\"msg\":\"名称不能为空!\"}";
                StringUtil.writeToWeb(result, "html", response);
                return null;
            }else if(null == userinfo.getAge()){
                result = "{\"success\":false,\"msg\":\"年龄参数有误!\"}";
                StringUtil.writeToWeb(result, "html", response);
                return null;
            }else{
                result = userService.save(userinfo);
            }
        }catch(Exception e){
            if(log.isErrorEnabled()){
                log.error("新增失败", e);
            }
            result = "{\"success\":false,\"msg\":\"系统错误,请稍候再试!\"}";
        }
        StringUtil.writeToWeb(result, "html", response);
        return null;
    }
    /**
     * gotoModify --page
     * @param request
     * @param response
     * @return
     */
    @RequestMapping(value="/gotoModify")
    public String gotoModify(HttpServletRequest request,
            HttpServletResponse response)throws Exception {
        Integer id = ServletRequestUtils.getIntParameter(request,"id");
        Userinfo userinfo = userService.get(Userinfo.class,id);
        request.setAttribute("userinfo", userinfo);
            return "views/user/modify";
    }
    /**
     * modify --method
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/modify")
    public String modify(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        Integer id = ServletRequestUtils.getIntParameter(request, "id");
        Userinfo dbUserinfo = userService.get(Userinfo.class, id);
        Userinfo userinfo = (Userinfo) StringUtil.requestToObject(request, Userinfo.class);
        String result;
        if(!dbUserinfo.getName().equals(userinfo.getName())){
            Userinfo hasUserinfo = userService.getUserByName(userinfo.getName());
            if(hasUserinfo!=null){
                result = "{\"success\":false,\"msg\":\"角色名称已存在!\"}";
                StringUtil.writeToWeb(result, "html", response);
                return null;
            }
        }
        try{
            result = userService.update(request,userinfo, id);
        }catch (Exception e ){
            if(log.isErrorEnabled()){
                log.error("修改失败", e);
            }
            result = "{\"success\":false,\"msg\":\"系统错误,请稍候再试!\"}";
        }
        StringUtil.writeToWeb(result, "html", response);
        return null;
    }
    /**
     * delete --method
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/delete")
    public String delete(HttpServletRequest request,
            HttpServletResponse response) throws Exception{
        Integer id = ServletRequestUtils.getIntParameter(request, "id");
        
        try{
            if(null != id){
                userService.delete(id);
            }
            String result = "{\"success\":true,\"msg\":\"删除成功\"}";
            StringUtil.writeToWeb(result, "html", response);
            return null;
        } catch (Exception e) {
            if(log.isErrorEnabled()){
                log.error("删除失败", e);
            }
            String result = "{\"success\":false,\"msg\":\"删除失败,请稍候再试!\"}";
            StringUtil.writeToWeb(result, "html", response);
            return null;
        }
    }
    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    
}

2.UserService代码

代码语言:javascript
复制
package com.xs.demo.service;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;





import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.xs.demo.dao.UserDao;
import com.xs.demo.entity.Userinfo;
import com.xs.demo.util.StringUtil;
/**
 *  SpringMVC+Hibernate +MySql+ EasyUI ---CRUD
 * @author 宗潇帅
 * 类名称:UserService 
 * @date 2014-11-15 下午4:14:37 
 * 备注:
 */
public class UserService extends BaseService {
    UserDao userDao;
    /**
     * list
     * @param name
     * @param start
     * @param size
     * @param order
     * @return
     */
    public String list(String name,int start, int size, String order){
        List<Map<String,Object>> list =userDao.list(name,start, size, order); 
        int count = count(name,start, size, order);
        
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("total", count);
        map.put("rows", list);
        
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
        String s = gson.toJson(map);
        return s;
    }
    /**
     * save
     * @param userinfo
     * @return
     */
    public String save(Userinfo userinfo) {
        String result = null;
        Date date = new Date();
        userinfo.setBirthday(date);
        userinfo.setPassword("888888");
        super.save(userinfo);
        result = "{\"success\":true,\"msg\":\"新增角色成功\"}";
        return result ;
    }
    /**
     * count
     * @param name
     * @param start
     * @param size
     * @param order
     * @return
     */
    public int count(String name,int start, int size, String order){
        return userDao.count(name,start, size, order);
    }
    /**
     * getuserbyname
     * @param name
     * @return
     */
    public Userinfo getUserByName(String name) {
        return userDao.getUserByName(name);
    }
    /**
     * update
     * @param request
     * @param userinfo
     * @param id
     * @return
     */
    public String update(HttpServletRequest request, Userinfo userinfo,
            Integer id) {
        Userinfo userinfoOld = super.get(Userinfo.class, id);
        if(null != userinfo){
            StringUtil.requestToObject(request, userinfoOld);
        }
        super.update(userinfoOld);
        String result = "{\"success\":true,\"msg\":\"更新成功!\"}";
        return result;
    }
    /**
     * delete
     * @param id
     */
    public void delete(Serializable id){
        userDao.delete(Userinfo.class,id);
    }
    
    
    
    /*------------------*/
    public UserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }



    
}

3.UserDao

代码语言:javascript
复制
package com.xs.demo.dao;

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


import com.xs.demo.entity.Userinfo;
/**
 * SpringMVC+Hibernate +MySql+ EasyUI ---CRUD
 * @author 宗潇帅
 * 类名称:UserDao 
 * @date 2014-11-15 下午4:34:51 
 * 备注:
 */
public class UserDao extends BaseDao{

    public List<Map<String, Object>> list(String name,int start, int size,
            String order) {
        List<Object> param = new ArrayList<Object>();
        String sql = "select u.* from userinfo u where 1=1 ";
        if(null != name && name.trim().length() > 0){
            sql += " and u.name like ? ";
            param.add("%"+name+"%");
        }
        if(null == order || order.length() == 0){
            order = " birthday asc";
        }
        return super.listByNative(sql, param.toArray(), start, size, order);
    }

    public int count(String name,int start, int size,
            String order) {
        List<Object> param = new ArrayList<Object>();
        String sql = "select count(*) from userinfo u where 1=1 ";
        if(null != name && name.trim().length() > 0){
            sql += " and u.name like ? ";
            param.add("%"+name+"%");
        }
        return super.countByNative(sql, param.toArray());
    }

    @SuppressWarnings("unchecked")
    public Userinfo getUserByName(String name) {
        String hql="select u from Userinfo u where u.name=? ";
        List<Userinfo> list=super.list(hql, new Object[]{name});
        if(list!=null&&list.size()>0){
            return list.get(0);
        }else{
            return null;
        }
    }

}

4.add.jsp

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page contentType="text/html;charset=UTF-8" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%@ include file="/common/meta.jsp"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SpringMVC+Hibernate +MySql+ EasyUI ---CRUD</title>
<script type="text/javascript">
    function doCancel(){
        document.location.href="${ctx }/user/index";
    }
    
    $(function(){
        $('#form1').form({
            onSubmit: function(){
                var v = $(this).form('validate');
                    if(v){
                        $("#doSubmit").unbind('click');
                    }
                    return v;
            },
            success:function(data){
                data = eval('(' + data + ')');
                if(data.success == true){
                    document.location.href="${ctx }/user/index";
                }else {
                        $("#doSubmit").bind("click",function(){
                       $('#form1').submit();
                    });
                    alert(data.msg);
                }
            }
        });
        $("#doSubmit").click(function() {
            $('#form1').submit();
            return false;
        });
    });
</script>
</head>
<body>
<div class="tables_title">Add New UserInfo</div>
<form action="${ctx }/user/add " id="form1" method="post">
    <div class="dengji_table">
        <div class="basic_table">
            <div class="clospan">
                <p class="basic_name">名称</p>
                <p>
                <input name="name"  id="name" type="text" class="easyui-validatebox"  data-options="required:true" placeholder="输入中文"/>
                </p>
             </div>
         </div>
         <div class="basic_table">
            <div class="clospan">
                <p class="basic_name" style=" border-right:none;">年龄</p>
                <p>
                <input name="age"  id="age" type="number"  min="18" max="99" class="easyui-validatebox"  data-options="required:true" placeholder="年龄不得小于18"/>
                </p>
        </div>
        </div>
        <div class="basic_table">
          <div class="clospan">
                <p class="basic_name" style=" border-right:none;">地址</p>
                <p>
                <input name="address"  id="address" type="text"  class="easyui-validatebox"  data-options="required:true" placeholder="市区名"/>
                </p>
        </div>
        </div>
             <div class="clospan_func">
                <div class="btns">
                    <a href="javascript:void(0);" id="doSubmit" class="blank_btn">保存</a>
                    <a href="javascript:void(0);" onclick="doCancel();" class="blank_btn">返回</a>
                </div>
            </div>
        </div>
      </form>
</body>
</html>

5.index.jsp

代码语言:javascript
复制
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%@ include file="/common/meta.jsp"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SpringMVC+Hibernate +MySql+ EasyUI ---CRUD</title>
<script type="text/javascript">
    var searchString;

    function resizeDg(){
        $('#dg').datagrid("resize", { width: $(window).width() * 0.4});
    }
    
    function getCookie(c_name){
         if (document.cookie.length>0){
          c_start=document.cookie.indexOf(c_name + "=");
          if (c_start!=-1){ 
            c_start=c_start + c_name.length+1;
            c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1) {
                c_end=document.cookie.length;
            }
            return document.cookie.substring(c_start,c_end);
           } 
          }
        return "";
    }
    
    var pageSize = 20;
    var pageNumber = 1;
    var sortName = '';
    var sortOrder = '';
    function initDate(){
        var s = getCookie("role");
        s = decodeURIComponent(s);
        if(s != null && s != ""){
            searchMap = eval('(' + s + ')');
            pageSize = searchMap.rows;
            if(pageSize == null || pageSize == ""){
                pageSize = 20;
            }
            pageNumber = searchMap.pageNumber;
            sortName = searchMap.sortName;
            sortOrder = searchMap.sortOrder;
            $("#name").val(searchMap.name );
        }
    }
    
    $(function(){
         $("#doSearch").click(function(){
            doSearch();
        });
        initDate();
        var name=$("#name").val();
        $('#dg').datagrid({
            url:"${ctx }/user/list",
            pagination:true,
            singleSelect:true,
            pageSize:pageSize,
            pageNumber:pageNumber,
            sortOrder:sortOrder,
            sortName:sortName,
            queryParams:{  
                name:name,
            },
            width:800,
               columns:[[
                   {field:'name',title:'名称', width:100, align:"center",sortable:true},
                   {field:'age',title:'年龄', width:50, align:"center",sortable:true},
                   {field:'address',title:'地址', width:50, align:"center",sortable:true},
                   {field:'operation',title:'操作', width:340, align:"center", sortable:false,
                       formatter:function(value,row,index){
                           var s ="";
                        s+="<a href=\"javascript:void(0)\"><span onclick=\"javaScript:gotoModify('"+row.id+"');\">修改</span></a>";
                           s += "|";
                        s+="<a href=\"javascript:void(0)\"><span onclick=\"javaScript:gotoDel('"+row.id+"');\">删除</span>&nbsp;&nbsp;</a>";
                        return s;
                       }
                   }
               ]]
        });
         var p = $('#dg').datagrid('getPager');    
         $(p).pagination({    
              pageList: [10,20,50,100]
          });  
        
        $("#doSearch").click(function(){
            doSearch();
        });
    });
    
    
    function gotoAdd(){
        var url = '${ctx }/user/gotoAdd';
        window.location.href=url;
    }
    function gotoModify(id){
        var url = '${ctx}/user/gotoModify?id='+id;
        window.location.href=url;
    }
    function gotoDel(id){
        if(!confirm('确定删除所选记录?')){
            return;
        }
        var url = '${ctx}/user/delete?id='+id;
        $.ajax({
            type : 'post',
            url : url,
            dataType: "json",
                success:function(data){
                    if(data.success == true){
                        doSearch();
                    }else{
                        alert(data.msg);
                    }
                }
            });
    }
        
    function doSearch(){
        var name=$("#name").val();
        /* var schoolId=$("#schoolId").val(); */
        $("#dg").datagrid('load',{  
            name:name
        }); //重新载入 
    }
        
</script>
</head>
<body onload="resizeDg();" onresize="resizeDg();" >
<div class="neirong">
<div class="add-content" style="margin-top:0">
    <div class="xinxi2">
           <div class="search_box">
           <p>名称: <input name="name" id="name" type="text" /></p>
           <a href="javascript:void(0);" id="doSearch" class="blank_btn">查询</a></div>
           <div class="btn_div">
           <a href="javascript:void(0);" onclick="gotoAdd();" id="xtsz_rygl_jsgl_add" class="blank_btn">新增</a>
           </div>
       </div>
    <div class="contant_list" >
        <!-- c_top start-->
        <table  width="100%">
            <tr>
                <td>
                    <table id="dg"></table>
                </td>
            </tr>
        </table>
    </div>
  </div>
</div>
</body>
</html>

6.modfiy.jsp

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page contentType="text/html;charset=UTF-8" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%@ include file="/common/meta.jsp"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>修改用户信息</title>
<script type="text/javascript">

    function doCancel(){
        document.location.href="${ctx }/user/index";
    }
    
    $(function(){
        $('#form1').form({
            onSubmit: function(){
                var v = $(this).form('validate');
                    if(v){
                        $("#doSubmit").unbind('click');
                    }
                    return v;
            },
            success:function(data){
                data = eval('(' + data + ')');
                if(data.success == true){
                    document.location.href="${ctx }/user/index";
                }else {
                        $("#doSubmit").bind("click",function(){
                       $('#form1').submit();
                    });
                    alert(data.msg);
                }
            }
        });
        $("#doSubmit").click(function() {
            $('#form1').submit();
            return false;
        });

    });
</script>
</head>
<body>
<div class="tables_title">修改用户</div>
<form action="${ctx }/user/modify" id="form1" method="post">
 <input type="hidden" name="id" value="${userinfo.id }"></input>
<div class="dengji_table">
        <div class="basic_table">
            <div class="clospan">
                <p class="basic_name">名称</p>
                <p>
                <input name="name"  id="name" type="text" class="easyui-validatebox"  data-options="required:true" value="${userinfo.name}"/>
                </p>
             </div>
         </div>
         <div class="basic_table">
            <div class="clospan">
                <p class="basic_name" style=" border-right:none;">年龄</p>
                <p>
                <input name="age"  id="age" type="number"  min="18" max="99" class="easyui-validatebox"  data-options="required:true" value="${userinfo.age}"/>
                </p>
        </div>
        </div>
        <div class="basic_table">
          <div class="clospan">
                <p class="basic_name" style=" border-right:none;">地址</p>
                <p>
                <input name="address"  id="address" type="text"  class="easyui-validatebox"  data-options="required:true" value="${userinfo.address}"/>
                </p>
        </div>
        </div>
             <div class="clospan_func">
                <div class="btns">
                    <a href="javascript:void(0);" id="doSubmit" class="blank_btn">保存</a>
                    <a href="javascript:void(0);" onclick="doCancel();" class="blank_btn">返回</a>
                </div>
            </div>
        </div>
      </form>
</body>
</html>

7.app-aop.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
        http://www.springframework.org/schema/jee 
        http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd"
    default-autowire="byName">
    
    
    <aop:config>
        <aop:pointcut id="testPointcut" expression="execution(* cn.com.elve.live..service..*.*(..))" />
    </aop:config>
    <!-- 普通的AOP,如果想得到被代理的方法参数,那么就必须在配置里提前写好,这样有非常大的局限性 -->
    <aop:config>
        <aop:aspect ref="testSchemaAop">
            <aop:before method="before" pointcut-ref="testPointcut"/>
            <aop:after-returning method="afterReturning" pointcut-ref="testPointcut" returning="object"/>
            <aop:after-throwing method="afterThrowing" pointcut-ref="testPointcut" throwing="object"/>
            <aop:after method="after" pointcut-ref="testPointcut"/>
        </aop:aspect>
    </aop:config>
    
    <!-- 基于advisor的代理,代理类需要实现spring提供的接口,然后就可以用到强大的功能了。 -->
    <aop:config>
        <aop:advisor pointcut-ref="testPointcut" advice-ref="afterReturn" />
    </aop:config>
    
    
    
    <!-- 需要由spring注入的bean定义 -->
    <bean id="afterReturn" class="com.xs.demo.aop.AfterReturn"/>
    <bean id="afterThrow" class="com.xs.demo.aop.AfterThrow"/>
    <bean id="before" class="com.xs.demo.aop.Before"/>
    <bean id="testSchemaAop" class="com.xs.demo.aop.TestSchemaAop"/>
    
    
    
</beans>

8.app-context.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
        http://www.springframework.org/schema/jee 
        http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd"
    default-autowire="byName">
    <!-- 使用annotation 自动注册bean -->
    <context:annotation-config/>
    <context:component-scan base-package="com.xs.demo">
        <context:include-filter type="regex" expression=".*Service"/>
        <context:include-filter type="regex" expression=".*Dao"/>
        <context:include-filter type="regex" expression=".*Job"/>
    </context:component-scan>
    
    
    <import resource="classpath:/app-db.xml"/>
    
    <!-- 配置文件读取 -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/jdbc.properties</value>
                <value>classpath:/hibernate.properties</value>
                <value>classpath:/log4j.properties</value>
            </list>
        </property>
    </bean>
    
    
    
    <!-- 开启AOP监听 只对当前配置文件有效 -->
    <aop:aspectj-autoproxy expose-proxy="true"/>
    
    <!-- 开启注解事务 只对当前配置文件有效 -->
      <tx:annotation-driven transaction-manager="txManager"/>

    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="create*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="modify*" propagation="REQUIRED" />
            <tx:method name="upload*" propagation="REQUIRED" />
            <tx:method name="merge*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="remove*" propagation="REQUIRED" />
            <tx:method name="move*" propagation="REQUIRED" />
            <tx:method name="change*" propagation="REQUIRED" />
            <tx:method name="put*" propagation="REQUIRED" />
            <tx:method name="use*" propagation="REQUIRED"/>
            <tx:method name="log*" propagation="REQUIRED"/>
            <tx:method name="sh*" propagation="REQUIRED"/>
            <tx:method name="bh*" propagation="REQUIRED"/>
            <tx:method name="sf*" propagation="REQUIRED"/>
            <tx:method name="bj*" propagation="REQUIRED"/>
            <tx:method name="tf*" propagation="REQUIRED"/>
            <tx:method name="mobileLogin" propagation="REQUIRED"/>
            <tx:method name="register*" propagation="REQUIRED"/>
            <tx:method name="goto*" propagation="REQUIRED"/>
            <tx:method name="active*" propagation="REQUIRED"/>
            <tx:method name="send*" propagation="REQUIRED"/>
            <tx:method name="handel*" propagation="REQUIRED"/>
            <tx:method name="attendance*" propagation="REQUIRED"/>
            <tx:method name="batch" propagation="REQUIRED"/>
            <!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->
            <tx:method name="get*" propagation="REQUIRED" read-only="true" />
            <tx:method name="count*" propagation="REQUIRED" read-only="true" />
            <tx:method name="find*" propagation="REQUIRED" read-only="true" />
            <tx:method name="list*" propagation="REQUIRED" read-only="true" />
            <tx:method name="*" read-only="true" />
        </tx:attributes>
    </tx:advice>
    <aop:config expose-proxy="true">
        <!-- 只对业务逻辑层实施事务 -->
        <aop:pointcut id="txPointcut" expression="execution(* com.xs.demo..service..*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>
    
    <!-- 自动扫描测试用service -->
<!--     <context:component-scan base-package="test.service"></context:component-scan> -->
    
    
    <!--    javaMailSender 
    <bean id="sender" class="org.springframework.mail.javamail.JavaMailSenderImpl" >
        <property name="host" value="smtp.qq.com"/>
        <property name="port" value="465"/>
        <property name="username" value="elve@elve.cn"/>
        <property name="password" value="654123.huo"/>
        <property name="javaMailProperties">
            <props> 
                <prop key="mail.smtp.auth">true</prop> 
                <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
            </props> 
        </property> 
    </bean> -->
    
    
    
</beans>

9.app-servlet.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>


<!-- 配置urlMapping -->
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
        http://www.springframework.org/schema/jee 
        http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd"
    default-autowire="byName">
    <!-- 启用基于注解的处理器映射,添加拦截器,类级别的处理器映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <list>
                <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />  
            </list>
        </property>
    </bean>
    
    <!-- 设置自动扫描的controller类的路径,可以写多个 -->
    <!-- 例<context:component-scan base-package="cn.com.elve.live.controller,cn.com.elve.live.xxx"/> -->
    <context:component-scan base-package="com.xs.demo.controller"/>
    <!-- 
    配置一个基于注解的定制的WebBindingInitializer,解决日期转换问题,方法级别的处理器映射,
    有人说该bean要放在context:component-scan前面,要不然不起作用,但我试的放后面也可以啊。
    -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="cacheSeconds" value="0" />
    </bean>
    
    <!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd -->
    <mvc:resources mapping="/images/**" location="/images/"/>
    <mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/css/**" location="/css/"/>
    <mvc:resources mapping="/swf/**" location="/swf/"/>
    <mvc:resources mapping="/file/**" location="/file/"/>
    <mvc:resources mapping="/FusionCharts/**" location="/FusionCharts/"/>
    
    <!-- viewResolver 视图解析器,将视图名(ModelAndView中的view)解析成URL-->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="suffix" value=".jsp" />
        <property name="prefix" value="/WEB-INF/"/>
        <property name="order" value="20"></property>
        <property name="viewClass"
            value="org.springframework.web.servlet.view.InternalResourceView" />
    </bean>
    
     <!-- 针对freemarker的视图配置 -->
    <bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="suffix" value=".ftl" />
        <property name="order" value="5"></property>    <!--resolver排序,本resolver会早于viewResolver-->
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
        <property name="contentType" value="text/html;charset=UTF-8"></property>
        <property name="requestContextAttribute" value="request" />
        <property name="exposeSpringMacroHelpers" value="true" />
        <property name="exposeRequestAttributes" value="true" />
        <property name="exposeSessionAttributes" value="true" />
    </bean>
    
    <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/" />
        <property name="freemarkerSettings">
            <props>
                <prop key="template_update_delay">0</prop>
                <prop key="default_encoding">UTF-8</prop>
                <prop key="number_format">0.##########</prop>
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                <prop key="classic_compatible">true</prop>
                <prop key="template_exception_handler">ignore</prop>
            </props>
        </property>
    </bean>
    
    
    <!--multipartResolver 支持分段文件上传 使用时form需要加上enctype="multipart/form-data"属性,且form的method设置为POST-->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="500400000" />
        <property name="maxInMemorySize" value="4096" />
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>
    
    <!-- 国际化配置 -->  
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" >
        <property name="cookieName" value="clientlanguage"/>
        <property name="cookieMaxAge" value="94608000"/>
    </bean>  
    
</beans>

 使用的SpringMVC HandlerInterceptor验证是否登陆。

代码语言:javascript
复制
package com.xs.demo.inteceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;


public class Test implements HandlerInterceptor{

    @Override
    public void afterCompletion(HttpServletRequest arg0,
            HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        System.out.println("最后执行");
    }
    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
            Object arg2, ModelAndView arg3) throws Exception {
        System.out.println("第二步执行");
    }
    @Override
    public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
            Object arg2) throws Exception {
        System.out.println("主要的业务逻辑");
        return false;
    }

}

代码很简单。判断session是否为空。且判断用户请求的url

代码语言:javascript
复制
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception {
        System.out.println("第一步");
        String path = request.getServletPath();
        if(path.startsWith("/user/")){
            Login userinfo = (Login) request.getSession().getAttribute(Constants.LOGIN_INFO);
            if(null == userinfo && !path.startsWith("/user/gotoAdd/")){
                response.sendRedirect(request.getContextPath()+"/system/login.jsp");
                return false;
            }else{
                System.out.println("else");
                return true;
            }
        }
        return true;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基于easyui的 增 删 改 查
  • 2.基于poi的导出excel
  • 3.基于 SpringMVC HandlerInterceptor验证
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档