zoukankan      html  css  js  c++  java
  • java框架-Springmvc-quzrtz-jasperreport-pio-pdfbox-jedis

      1  代码区

      

    1. spring 整合 quartz  框架 service层 注入不了job 类里面问题

    package com.zhouwuji.controller;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.annotation.Resource;
    import javax.management.ListenerNotFoundException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JasperCompileManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
    import net.sf.jasperreports.engine.export.JRPdfExporter;
    import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
    
    import org.aspectj.util.FileUtil;
    import org.eclipse.jdt.internal.compiler.batch.Main;
    import org.jfree.io.FileUtilities;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpRequest;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.zhouwuji.pojo.Student;
    import com.zhouwuji.pojo.User;
    import com.zhouwuji.service.UserService;
    import com.zhouwuji.util.JasperUtils;
    import com.zhouwuji.util.JasperLocalUtils;
    import com.zhouwuji.util.RandomParam;
    
    
    
    /** 
     * Title: MyDemo<br> 
     * Description: 下载数据库中的建立信�?br> 
     * Copyright: Copyright (c) 2018 <br> 
     * Create DateTime: 2018�?�?4�?下午3:38:26 <br>
     * @author lvlin
     */
    @Controller
    public class JasperReportController {
       
        @Resource
        private UserService userService;
        
        @RequestMapping("downloadpdf.do")
        public void previewPdf(HttpServletRequest request,HttpServletResponse response) throws JRException, IOException{
            List<User> lists=userService.selectUser();
            Map<String,Object> params=new HashMap<String, Object>();
            params.put("author", "张三");
             //下载文件的名字
            String defaultFilename="1111";
             //读入的jrxml文件的位置路径
            String resoureFilePath="report2.jasper";
            System.out.println("===="+resoureFilePath);
            JasperUtils.exportmain("pdf", resoureFilePath, params, lists, defaultFilename, null, request, response);
        }
        
        @RequestMapping("downloadword.do")
        public void previewword(HttpServletRequest request,HttpServletResponse response) throws JRException, IOException{
            List<User> lists=userService.selectUser();
            Map<String,Object> params=new HashMap<String, Object>();
            params.put("author", "张三");
            //下载文件的名字
            String defaultFilename="1111";
            //读入的jrxml文件的位置路径
            String resoureFilePath="report2.jasper";
            System.out.println("===="+resoureFilePath);
            JasperUtils.exportmain("word", resoureFilePath, params, lists, defaultFilename, null, request, response);
        }
        
        @RequestMapping("downloadhtml.do")
        public void previewhtml(HttpServletRequest request,HttpServletResponse response) throws JRException, IOException{
            List<User> lists=userService.selectUser();
            String pageno=request.getParameter("pageno");
            Map<String,Object> params=new HashMap<String, Object>();
            params.put("author", "张三");
            //下载文件的名字
            String defaultFilename="1111";
            //读入的jrxml文件的位置路径
            String resoureFilePath="report2.jasper";
            System.out.println("===="+resoureFilePath);
            JasperUtils.exportmain("html", resoureFilePath, params, lists, defaultFilename, pageno, request, response);
        }
        @RequestMapping("downloadexcel.do")
        public void previewexcel(HttpServletRequest request,HttpServletResponse response) throws JRException, IOException{
            List<User> lists=userService.selectUser();
            Map<String,Object> params=new HashMap<String, Object>();
            params.put("author", "张三");
            //下载文件的名字
            String defaultFilename="1111";
            //读入的jrxml文件的位置路径
            String resoureFilePath="report2.jasper";
            System.out.println("===="+resoureFilePath);
            JasperUtils.exportmain("excel", resoureFilePath, params, lists, defaultFilename, null, request, response);
        }    
    }
    JasperReportController
    package com.zhouwuji.controller;
    
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import com.zhouwuji.pojo.User;
    import com.zhouwuji.service.UserService;
    
    @Controller
    public class LoginController {
    
        @Autowired
        UserService userService;
    
        @RequestMapping("/login.do")
        @ResponseBody
        public String indexTest(HttpServletRequest request){
            System.out.println("=================="+request.getServletContext().getRealPath("/"));
            //userService.insert(new User("李四", "123456"));
            return  "success";
        }
        @RequestMapping("/select.do")
        @ResponseBody
        public List<User> selectString(){
            List<User> users=userService.selectUser();
            return  users;
        }
        
        @RequestMapping("/index.do")
        public String selectStrings(){
            return  "index";
        }
    }
    LoginController
    package com.zhouwuji.controller;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.commons.CommonsMultipartFile;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.zhouwuji.service.UserService;
    
    @Controller
    public class PIOController {
        
        @Resource
        private UserService userService;
        /**
         *  批量导入表单数据
         * @param myFile
         * @return
         */
           @RequestMapping(value="/importExcel",method=RequestMethod.POST)
           @ResponseBody
           public String importExcel(@RequestParam("uploadfile")CommonsMultipartFile file) {
                ModelAndView modelAndView = new ModelAndView();
                try {
                    Integer num = userService.importExcel(file);
                    System.out.println(num);
                } catch (Exception e) {
                    return "数据导入失败";
                }
                return "数据导入成功";
            }
            
            @RequestMapping(value="/exportExcel",method=RequestMethod.GET)
            public void exportExcel(HttpServletResponse response) {    
                try {
                    userService.exportExcel(response);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
        
        
    }
    PIOController
    package com.zhouwuji.dao;
    
    import java.util.List;
    
    import com.zhouwuji.pojo.User;
    
    
    
    public interface UserDao {
         List<User> selectUser(); 
         int   insert(User user);
         
    }
    UserDao
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.zhouwuji.dao.UserDao">
        <select id="selectUser" resultType="com.zhouwuji.pojo.User">
            select * from user
        </select>
        
        <insert id="insert" parameterType="com.zhouwuji.pojo.User" useGeneratedKeys="true">
            insert into user(name,pwd) values(#{name},#{pwd})
        </insert>
        
        <delete id="remove">
            deletes from user where id=#{id}
        </delete>
    </mapper>
    user.mapper.xml
    package com.zhouwuji.pojo;
    /** 
     * Title: MyDemo<br> 
     * Description: <br> 
     * Copyright: Copyright (c) 2018 <br> 
     * Create DateTime: 2018骞?鏈?4鏃?涓嬪崍4:30:32 <br>
     * @author lvlin
     */
    
    public class Student {
    private String id;
    private String name;
    private String sex;
    private int age;
    private String address;
    private String tel;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getTel() {
        return tel;
    }
    public void setTel(String tel) {
        this.tel = tel;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", address=" + address + ", tel="
                + tel + "]";
    }
    
    
    }
    Student
    package com.zhouwuji.pojo;
    
    public class User   {
        private Integer id;
        private String name;
        private String pwd;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
        public User(String name,Integer id,  String pwd) {
            super();
            this.id = id;
            this.name = name;
            this.pwd = pwd;
        }
        public User(String name, String pwd) {
            super();
            this.name = name;
            this.pwd = pwd;
        }
        @Override
        public String toString() {
            return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
        }
        public User() {
            super();
        }
        
    
    }
    User
    package com.zhouwuji.service;
    
    import java.io.IOException;
    import java.util.List;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.multipart.MultipartFile;
    
    import com.zhouwuji.pojo.User;
    
    
    public interface UserService {
        List<User> selectUser();
        int    insert(User user);
        int    importExcel(MultipartFile myFile) throws Exception;
        void   exportExcel(HttpServletResponse response) throws IOException;
    }
    UserService
    package com.zhouwuji.service;
    
    import java.util.HashMap;
    import java.util.List;
    
    import javax.annotation.Resource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.zhouwuji.dao.UserDao;
    import com.zhouwuji.pojo.User;
    
    
    /** 
    * Title: QuartzService<br> 
    * @author Tubu.Zhang
    * @Description: 定时器执行调度服务类<br>  
    * @version: 1.0
    * @Copyright: Copyright (c) 2018 <br> 
    * @Create DateTime: Jan 18, 2018 4:17:24 PM <br>
    */
    @Service
    public class QuartzService {
    
        @Resource
        private UserDao userDao;
        /**
        * Title: sendInfoToYxtByQuartz<br> 
        * @author 
        * @Description: 调度执行向云学堂发�?信息<br> 
    
        */
        public void sendInfoToYxtByQuartz(){
            
            System.out.println("调度一");
        };
        
        /**
        * Title: deleteLogFileByQuartz<br> 
        * @author Tubu.Zhang
        * @Description: 调度执行删除本地APP下log文件<br> 
        * @param: 
        * @return: 
        * @version: 1.0
        * @Copyright: Copyright (c) 2018 <br> 
        * @Create DateTime: Jan 18, 2018 4:16:45 PM <br>
        */
        public void deleteLogFileByQuartz(){
            
            System.out.println("任务调度二");
            
        };
        
    }
    QuartzService
    package com.zhouwuji.service.impl;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.sql.Date;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.List;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.lang.StringUtils;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.springframework.cache.annotation.CacheEvict;
    import org.springframework.cache.annotation.Cacheable;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.zhouwuji.dao.UserDao;
    import com.zhouwuji.pojo.User;
    import com.zhouwuji.service.UserService;
    
    @Service
    public class UserServiceImpl implements UserService {
        private final static String XLS = "xls";
        private final static String XLSX = "xlsx";
        
        @Resource
        private UserDao userDao;
    
        public List<User> selectUser() {
            return userDao.selectUser();
        }
    
        public int insert(User user) {
            return userDao.insert(user);
        }
    
        public int importExcel(MultipartFile myFile) throws Exception {
            //        4、对Cell对象读写。
            //获得文件名  
            Workbook workbook = null ;
            String fileName = myFile.getOriginalFilename(); 
            if(fileName.endsWith(XLS)){  
                //  1、用HSSFWorkbook打开或者创建“Excel文件对象”
                workbook = new HSSFWorkbook(myFile.getInputStream());  
            }else if(fileName.endsWith(XLSX)){  
                //2007  
                workbook = new XSSFWorkbook(myFile.getInputStream());  
            }else{
                throw new Exception("文件不是Excel文件");
            }
            //2、用HSSFWorkbook对象返回或者创建Sheet对象
            Sheet sheet = workbook.getSheet("Sheet1");
            int rows = sheet.getLastRowNum();// 指的行数,一共有多少行+
            if(rows==0){
                throw new Exception("请填写数据");
            }
            for (int i = 1; i <= rows+1; i++) {
                // 读取左上端单元格
                Row row = sheet.getRow(i);
                // 行不为空
                if (row != null) {
                    // **读取cell**
                   User user = new User();
                     //用户id
                     //3、用Sheet对象返回行对象,用行对象得到Cell对象
                    String id = getCellValue(row.getCell(0));
                   // user.setId(Integer.valueOf(id));
                    //名称
                    String name = getCellValue(row.getCell(1));
                    user.setName(name);
                    //用户密码
                    String pwd = getCellValue(row.getCell(2));
                    if (!StringUtils.isEmpty(pwd)) {
                        Integer score = Integer.parseInt(pwd);
                        user.setPwd(pwd);
                    }
                    /*//考试时间
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//小写的mm表示的是分钟  
                    String dateString = getCellValue(row.getCell(3));  
                    if (!StringUtils.isEmpty(dateString)) {
                        Date date=(Date) sdf.parse(dateString);  
                        student.setTime(date);
                    }*/
                   insert(user);
                }
            }
            
            return  rows-1;
        }
         /**
         * 获得Cell内容
         * 
         * @param cell
         * @return
         */
        public String getCellValue(Cell cell) {
            String value = "";
            if (cell != null) {
                // 以下是判断数据的类型
                switch (cell.getCellType()) {
                case HSSFCell.CELL_TYPE_NUMERIC: // 数字
                    value = cell.getNumericCellValue() + "";
                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                        Date date = (Date) cell.getDateCellValue();
                        if (date != null) {
                            value = new SimpleDateFormat("yyyy-MM-dd").format(date);
                        } else {
                            value = "";
                        }
                    } else {
                        value = new DecimalFormat("0").format(cell.getNumericCellValue());
                    }
                    break;
                case HSSFCell.CELL_TYPE_STRING: // 字符串
                    value = cell.getStringCellValue();
                    break;
                case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
                    value = cell.getBooleanCellValue() + "";
                    break;
                case HSSFCell.CELL_TYPE_FORMULA: // 公式
                    value = cell.getCellFormula() + "";
                    break;
                case HSSFCell.CELL_TYPE_BLANK: // 空值
                    value = "";
                    break;
                case HSSFCell.CELL_TYPE_ERROR: // 故障
                    value = "非法字符";
                    break;
                default:
                    value = "未知类型";
                    break;
                }
            }
            return value.trim();
        }
        
        public void exportExcel(HttpServletResponse response) throws IOException {
             // 第一步,创建一个webbook,对应一个Excel文件  
            HSSFWorkbook wb = new HSSFWorkbook();  
            // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  
            HSSFSheet sheet = wb.createSheet("Sheet1");  
            // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short  
            HSSFRow row = sheet.createRow(0);  
            // 第四步,创建单元格,并设置值表头 设置表头居中  
            HSSFCellStyle style = wb.createCellStyle();  
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式  
    
            HSSFCell cell = row.createCell(0);
            cell.setCellValue("id");  
            cell.setCellStyle(style);  
            cell = row.createCell(1);  
            cell.setCellValue("name");  
            cell.setCellStyle(style);  
            cell = row.createCell(2);  
            cell.setCellValue("pwd");  
            cell.setCellStyle(style);  
           /* cell = row.createCell(3);  
            cell.setCellValue("时间");  
            cell.setCellStyle(style);  */
    
            // 第五步,写入实体数据 实际应用中这些数据从数据库得到,  
            List<User> list = userDao.selectUser();  
    
            for (int i = 0; i < list.size(); i++){  
                row = sheet.createRow(i + 1);  
                User stu = list.get(i);  
                // 第四步,创建单元格,并设置值  
                row.createCell(0).setCellValue(stu.getId());  
                row.createCell(1).setCellValue(stu.getName());  
                row.createCell(2).setCellValue(stu.getPwd());  
               /* cell = row.createCell(3);  
                cell.setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(stu.getTime()));  */
            }          
            //第六步,输出Excel文件
            OutputStream output=response.getOutputStream();
            response.reset();
            long filename = System.currentTimeMillis();
            SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
            String fileName = df.format(new Date(filename));// new Date()为获取当前系统时间
            response.setHeader("Content-disposition", "attachment; filename="+fileName+".xls");
            response.setContentType("application/msexcel");        
            wb.write(output);
            output.close();
        }  
    
        }
    UserServiceImpl
    package com.zhouwuji.util;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    
    import net.sf.jasperreports.engine.JRAbstractExporter;
    import net.sf.jasperreports.engine.JRDataSource;
    import net.sf.jasperreports.engine.JREmptyDataSource;
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JRExporterParameter;
    import net.sf.jasperreports.engine.JasperCompileManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
    import net.sf.jasperreports.engine.export.JRPdfExporter;
    import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
    import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
    import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
    import net.sf.jasperreports.engine.util.JRLoader;
    
    public class JasperLocalUtils {
         /**
         *   JRXlsxExporter 导出excel表格  不是JRXlsExporter
         * @param jasperPrint
         * @param defaultFilename
         * @param request
         * @param response
         * @throws IOException
         * @throws JRException
         */
         public static void exportExcel(List lists,Map<String,Object> params,String defaultFilename, String resoureFilePath,
                 HttpServletResponse response) throws IOException, JRException {
             JasperReport report=judgejrxmlAndjasper(resoureFilePath);
             response.setContentType("application/vnd.ms-excel;charset=GBK"); // 设置头文件信息
             String defaultname = null;
             if (defaultFilename.trim() != null && defaultFilename != null) {
                 defaultname = defaultFilename + ".xlsx";
             } else {
                 defaultname = "export.xlsx";
             }
             String fileName = new String(defaultname.getBytes("gbk"), "utf-8");
             response.setHeader("Content-disposition", "attachment; filename="
                     + fileName);
             
             JasperPrint jasperPrint = JasperFillManager.fillReport(report, params,judgeDataSourceIsNull(lists));
    
             ServletOutputStream ouputStream = response.getOutputStream();
             JRXlsxExporter   exporter = new JRXlsxExporter();
             exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
             exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
             exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); 
             exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS,Boolean.TRUE); 
             //设置Excel表格的背景颜色为默认的白色  
             exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);
             exporter.exportReport();
             ouputStream.flush();
             ouputStream.close();
         }
         
         /**
          *  读取文件导出到本地xlsx文件   并且导出多个sheet数据
          * @param lists              包装的数据 
          * @param defaultFilename    输出文件的名字
          * @param resoureFilePath    读取源文件
          * @param params             包装的参数
          * @throws IOException
          * @throws JRException
          */
         public static void exportLocalExcel(List lists,Map<String,Object> params,String resoureFilePath,String filePathPDF) throws IOException, JRException {
             
             JasperReport report =judgejrxmlAndjasper(resoureFilePath);
             ByteArrayOutputStream outPut=new ByteArrayOutputStream();  
             FileOutputStream outputStream=null;  
             try { 
                 
                 JasperPrint jasperPrint = JasperFillManager.fillReport(report, params,judgeDataSourceIsNull(lists));
                 List<JasperPrint> jasperPrints=new ArrayList<JasperPrint>();
                 jasperPrints.add(jasperPrint);
                 jasperPrints.add(jasperPrint);
                 
                 JRXlsxExporter   exporter = new JRXlsxExporter();
                // exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrints);  导出一个
                /**
                 * sheetNames 为自定义的数组类型,如:String[] sheetNames = {"自定义1","自定义2","自定义3"};如不需要也可以不配置此项。
                 *  JRExporterParameter.JASPER_PRINT_LIST,传入一个listJasperPrint的集合,每个JasperPrint即一个Sheet页。
                 */
                 exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrints);
                
                 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outPut);
                  //去除两行之前的空白
                 exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); 
                 exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS,Boolean.TRUE); 
                  //设置为true,即可在一个excel中,每个单独的jasper对象放入到一个sheet页中
                 exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.TRUE);
                  //自定义sheet名称  sheetNames = {"自定义1","自定义2","自定义3"}
                 String[] naneString={"sheet1","sheet2"};
                 exporter.setParameter(JRXlsExporterParameter.SHEET_NAMES, naneString);
                 //设置Excel表格的背景颜色为默认的白色  
                 exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);
                  //自动选择格式
                 exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
                 exporter.exportReport(); 
                 // File file=new File("D:/xp/report.pdf");  
                  File file=new File(filePathPDF);  
                  outputStream=new FileOutputStream(file);  
                  outputStream.write(outPut.toByteArray());  
             } catch (JRException e) {  
                 e.printStackTrace();  
             }catch (Exception e) {  
                 e.printStackTrace();  
             }finally{  
                 try {  
                     outPut.flush();  
                     outPut.close();  
                 } catch (Exception e) {  
                     e.printStackTrace();  
                 }  
             }  
         }
         
         
         
         
         
         /**
          *  判断集合是否为空,返回JRDataSource
          * @param fieldValues
          * @return
          */
         
         public  static JRDataSource  judgeDataSourceIsNull(List fieldValues ){
             JRDataSource dataSource = null;
                if (fieldValues != null && fieldValues.size() > 0) {
                    dataSource = new JRBeanCollectionDataSource(fieldValues);
                } else {
                    dataSource = new JREmptyDataSource();
                }
             return dataSource;
         }
         
         
         /**
          *    
          * @param resoureFilePath 判断是jrxml文件还是jasper文件
          * @return
          */
         public static  JasperReport  judgejrxmlAndjasper(String  resoureFilePath){
            
             JasperReport report =null;
             
             try {
                if (resoureFilePath.endsWith(".jrxml")) {
                  report = JasperCompileManager.compileReport(resoureFilePath);
                  } else if (resoureFilePath.endsWith(".jasper")){
                  report =(JasperReport) JRLoader.loadObjectFromFile(resoureFilePath);
                  }
            } catch (JRException e) {
                e.printStackTrace();
            }
             return  report;
         }
         
     
         /**  
          *  导出pdf,注意此处中文问题, 这里应该详细说:主要在ireport里变下就行了。看图
          * 1)在ireport的classpath中加入iTextAsian.jar 2)在ireport画jrxml时,看ireport最左边有个属性栏
          *  设置字体 font name  为宋体
          *  下边的设置就在点字段的属性后出现。 pdf font name :STSong-Light ,pdf encoding :UniGB-UCS2-H
          */
         public static void exportPdf(List lists,Map<String,Object> params,String defaultFilename, String resoureFilePath,
                 HttpServletResponse response) throws IOException, JRException {
             
             response.setContentType("application/pdf;charset=UTF-8");
            
             String defaultname = null;
             if (defaultFilename.trim() != null && defaultFilename != null) {
                 defaultname = defaultFilename + ".pdf";
             } else {
                 defaultname = "export.pdf";
             }
             String fileName = new String(defaultname.getBytes("GBK"), "utf-8");
             response.setHeader("Content-disposition", "attachment; filename="
                     + fileName);
            
             JasperReport report=judgejrxmlAndjasper(resoureFilePath);
             
             JasperPrint jasperPrint = JasperFillManager.fillReport(report, params,judgeDataSourceIsNull(lists));
             ServletOutputStream ouputStream = response.getOutputStream();
             JRPdfExporter pdfExporter = new JRPdfExporter();
             pdfExporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);
             pdfExporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, ouputStream);
             pdfExporter.exportReport();
             ouputStream.flush();  
             ouputStream.close();  
         }
         
         
          /**
           *   读取文件并打印出pdf文件到本地
           * @param lists   
           * @param params
           * @param resoureFilePath 读取文件的地址
           * @param filePathPDF     生成文件的地址
           */
         public static void  exportLocalPDF(List lists,Map<String,Object> params,String resoureFilePath,String filePathPDF){
             JasperReport report =judgejrxmlAndjasper(resoureFilePath);
             ByteArrayOutputStream outPut=new ByteArrayOutputStream();  
             FileOutputStream outputStream=null;  
             try { 
                 
                 JasperPrint jasperPrint = JasperFillManager.fillReport(report, params,judgeDataSourceIsNull(lists));
                 
                 JRAbstractExporter exporter=new JRPdfExporter();  
                 //创建jasperPrint  
                 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);  
                 //生成输出流  
                 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outPut);  
                 //屏蔽copy功能  
                 exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED,Boolean.TRUE);  
                 //加密  
                 exporter.setParameter(JRPdfExporterParameter.IS_128_BIT_KEY,Boolean.TRUE);  
                  exporter.exportReport();  
                 // File file=new File("D:/xp/report.pdf");  
                   File file=new File(filePathPDF);  
                  outputStream=new FileOutputStream(file);  
                  outputStream.write(outPut.toByteArray());  
             } catch (JRException e) {  
                 e.printStackTrace();  
             }catch (Exception e) {  
                 e.printStackTrace();  
             }finally{  
                 try {  
                     outPut.flush();  
                     outPut.close();  
                 } catch (Exception e) {  
                     e.printStackTrace();  
                 }  
             }  
         }
     
      
    }
    JasperLocalUtils
    package com.zhouwuji.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.lang.reflect.Field;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import net.sf.jasperreports.engine.JRDataSource;
    import net.sf.jasperreports.engine.JREmptyDataSource;
    import net.sf.jasperreports.engine.JRException;
    import net.sf.jasperreports.engine.JRExporter;
    import net.sf.jasperreports.engine.JRExporterParameter;
    import net.sf.jasperreports.engine.JasperCompileManager;
    import net.sf.jasperreports.engine.JasperExportManager;
    import net.sf.jasperreports.engine.JasperFillManager;
    import net.sf.jasperreports.engine.JasperPrint;
    import net.sf.jasperreports.engine.JasperReport;
    import net.sf.jasperreports.engine.base.JRBaseReport;
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
    import net.sf.jasperreports.engine.export.JRHtmlExporter;
    import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
    import net.sf.jasperreports.engine.export.JRRtfExporter;
    import net.sf.jasperreports.engine.export.JRXlsExporter;
    import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
    import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
    import net.sf.jasperreports.engine.util.JRLoader;
    
    import org.apache.commons.lang.StringUtils;
    
    @SuppressWarnings("unchecked")
    public class JasperUtils {
    
        public static final String PRINT_TYPE = "print";
        public static final String PDF_TYPE = "pdf";
        public static final String EXCEL_TYPE = "excel";
        public static final String HTML_TYPE = "html";
        public static final String WORD_TYPE = "word";
    
        /**
         * 如果导出的是excel,则需要去掉周围的margin
         * 
         * @param jasperReport
         * @param type
         */
        public static void prepareReport(JasperReport jasperReport, String type) {
            if ("excel".equals(type))
                try {
                    Field margin = JRBaseReport.class
                            .getDeclaredField("leftMargin");
                    margin.setAccessible(true);
                    margin.setInt(jasperReport, 0);
                    margin = JRBaseReport.class.getDeclaredField("topMargin");
                    margin.setAccessible(true);
                    margin.setInt(jasperReport, 0);
                    margin = JRBaseReport.class.getDeclaredField("bottomMargin");
                    margin.setAccessible(true);
                    margin.setInt(jasperReport, 0);
                    Field pageHeight = JRBaseReport.class
                            .getDeclaredField("pageHeight");
                    pageHeight.setAccessible(true);
                    pageHeight.setInt(jasperReport, 2147483647);
                } catch (Exception exception) {
    
                }
    
        }
    
        /**
         * 导出Excel
         * 
         * @param jasperPrint
         * @param defaultFilename
         * @param request
         * @param response
         * @throws IOException
         * @throws JRException
         */
        public static void exportExcel(JasperPrint jasperPrint,
                String defaultFilename, HttpServletRequest request,
                HttpServletResponse response) throws IOException, JRException {
            response.setContentType("application/vnd.ms-excel"); // 设置头文件信息
            String defaultname = null;
            if (defaultFilename.trim() != null && defaultFilename != null) {
                defaultname = defaultFilename + ".xlsx";
            } else {
                defaultname = "export.xlsx";
            }
            String fileName = new String(defaultname.getBytes("gbk"), "utf-8");
            response.setHeader("Content-disposition", "attachment; filename="
                    + fileName);
            ServletOutputStream ouputStream = response.getOutputStream();
            JRXlsxExporter   exporter = new JRXlsxExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
            exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE); 
            exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS,Boolean.TRUE); 
            //设置Excel表格的背景颜色为默认的白色  
            exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);
            exporter.exportReport();
            ouputStream.flush();
            ouputStream.close();
        }
    
        /**
         * 导出pdf,注意此处中文问题, 这里应该详细说:主要在ireport里变下就行了。看图
         * 1)在ireport的classpath中加入iTextAsian.jar 2)在ireport画jrxml时,看ireport最左边有个属性栏。
         * 下边的设置就在点字段的属性后出现。 pdf font name :STSong-Light ,pdf encoding :UniGB-UCS2-H
         */
        private static void exportPdf(JasperPrint jasperPrint,
                String defaultFilename, HttpServletRequest request,
                HttpServletResponse response) throws IOException, JRException {
            response.setContentType("application/pdf");
            String defaultname = null;
            if (defaultFilename.trim() != null && defaultFilename != null) {
                defaultname = defaultFilename + ".pdf";
            } else {
                defaultname = "export.pdf";
            }
            String fileName = new String(defaultname.getBytes("GBK"), "utf-8");
            response.setHeader("Content-disposition", "attachment; filename="
                    + fileName);
            ServletOutputStream ouputStream = response.getOutputStream();
            JasperExportManager.exportReportToPdfStream(jasperPrint, ouputStream);
            ouputStream.flush();
            ouputStream.close();
        }
    
        /**
         * 导出html
         * 
         * @param pageIndexStr
         */
    
        private static void exportHtml(JasperPrint jasperPrint,
                String defaultFilename, HttpServletRequest request,
                HttpServletResponse response, String pageIndexStr)
                throws IOException, JRException {
            response.setContentType("text/html");
            ServletOutputStream ouputStream = response.getOutputStream();
            JRHtmlExporter exporter = new JRHtmlExporter();
            Integer pageIndex = getPageIndex(jasperPrint, request, pageIndexStr); // 得到当前页码
            if (pageIndex != null) { // 如果页码不为空 则设置分页页码
                exporter.setParameter(JRExporterParameter.PAGE_INDEX, pageIndex);
            }
            exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
                    Boolean.FALSE);
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
            exporter.exportReport();
            ouputStream.flush();
            ouputStream.close();
    
        }
    
       
        /**
         * 导出word
         */
    
        private static void exportWord(JasperPrint jasperPrint,
                String defaultFilename, HttpServletRequest request,
                HttpServletResponse response) throws JRException, IOException {
            response.setContentType("application/msword;charset=utf-8");
            String defaultname = null;
            if (defaultFilename.trim() != null && defaultFilename != null) {
                defaultname = defaultFilename + ".doc";
            } else {
                defaultname = "export.doc";
            }
            String fileName = new String(defaultname.getBytes("GBK"), "utf-8");
            response.setHeader("Content-disposition", "attachment; filename="
                    + fileName);
            JRExporter exporter = new JRRtfExporter();
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response
                    .getOutputStream());
            exporter.exportReport();
        }
        /**
         * description:通过传进来的pageIndexStr 得到当前页码 Date 2013-1-18 上午10:49:38
         * 
         * @param @param jasperPrint
         * @param @param request
         * @param @param pageIndexStr
         * @param @return
         * @return Integer
         */
        private static Integer getPageIndex(JasperPrint jasperPrint,
                HttpServletRequest request, String pageIndexStr) {
            if (pageIndexStr == null || StringUtils.isBlank(pageIndexStr)) { // 如果pageIndexStr为空或空字符串则返回null
                return null;
            }
            Integer pageIndex = 0;
            int lastPageIndex = 0;
            if (jasperPrint.getPages() != null) { // 得到最后一页的 页码
                lastPageIndex = jasperPrint.getPages().size() - 1;
            }
            if ("lastPage".equals(pageIndexStr)) { // 如果字符串==lastPage
                // 则反lastPageIndex的值赋给pageIndex
                // 并返回pageIndex
                pageIndex = lastPageIndex;
                return pageIndex;
            }
            try {
                pageIndex = Integer.parseInt(pageIndexStr);
                if (pageIndex > 0) { // 从ireport
                    // 传来的PageIndex是从1开始,而JRExporterParameter.PAGE_INDEX是从0开始的
                    pageIndex = pageIndex - 1;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (pageIndex < 0) {
                pageIndex = 0;
            }
            if (pageIndex > lastPageIndex) {
                pageIndex = lastPageIndex;
            }
            return pageIndex;
        }
    
    
        /**
         * 导出入口 (分页显示 导出传入的pageIndex 页的数据)
         * 
         * @param exportType
         *            导出文件的类型
         * @param jaspername
         *            jasper文件的名字 如: xx.jasper
         * @param lists
         *            导出的数据
         * @param request
         * @param response
         * @param defaultFilename默认的导出文件的名称
         * @param pageIndex
         *            需要导出数据的页码 当pageIndex = null时导出所有数据
         */
    
        @SuppressWarnings("deprecation")
        public static void exportmain(String exportType, String jaspername, Map<String,Object> params,
                List lists, String defaultFilename, String pageIndexStr,HttpServletRequest request,HttpServletResponse response) {
           
            String filenurl = request.getServletContext().getRealPath("jasper/"+ jaspername);
            File file = new File(filenurl);
            InputStream is = null;
            try {
                is = new FileInputStream(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            export(lists, exportType,params, defaultFilename, is, request, response,
                    pageIndexStr);
        }
    
        /**
         * 按照类型导出不同格式文件
         * 
         * @param datas
         *            数据
         * @param type
         *            文件类型
         * @param is
         *            jasper文件的来源
         * @param request
         * @param response
         * @param defaultFilename默认的导出文件的名称
         */
    
        private static void export(Collection datas, String type,Map<String,Object> params,
                String defaultFilename, InputStream is, HttpServletRequest request,
                HttpServletResponse response, String pageIndexStr) {
            try {
                
                JasperReport jasperReport = (JasperReport) JRLoader.loadObject(is);
                
                prepareReport(jasperReport, type);
                
                JRDataSource ds = new JRBeanCollectionDataSource(datas, false);
                JasperPrint jasperPrint = JasperFillManager.fillReport(
                        jasperReport, params, ds);
                if (EXCEL_TYPE.equals(type)) {
                    exportExcel(jasperPrint, defaultFilename, request, response);
                } else if (PDF_TYPE.equals(type)) {
                    exportPdf(jasperPrint, defaultFilename, request, response);
                } else if (HTML_TYPE.equals(type)) {
                    exportHtml(jasperPrint, defaultFilename, request, response,
                            pageIndexStr);
                } else if (WORD_TYPE.equals(type)) {
                    exportWord(jasperPrint, defaultFilename, request, response);
                }
                
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
       
        
        
        
    
    }
    JasperUtils
    package com.zhouwuji.util;
    
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Iterator;
    import java.util.List;
    
    import javax.imageio.IIOImage;
    import javax.imageio.ImageIO;
    import javax.imageio.ImageWriter;
    import javax.imageio.stream.ImageOutputStream;
    
    import org.apache.pdfbox.cos.COSArray;
    import org.apache.pdfbox.cos.COSString;
    import org.apache.pdfbox.exceptions.COSVisitorException;
    import org.apache.pdfbox.pdfparser.PDFStreamParser;
    import org.apache.pdfbox.pdfwriter.ContentStreamWriter;
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.pdmodel.PDPage;
    import org.apache.pdfbox.pdmodel.common.PDStream;
    import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
    import org.apache.pdfbox.pdmodel.font.PDFont;
    import org.apache.pdfbox.pdmodel.font.PDType1Font;
    import org.apache.pdfbox.util.PDFOperator;
    import org.apache.pdfbox.util.PDFTextStripper;
    
    public class PDFboxUtil {
        
        //创建pdf 文件
         public static void createHelloPDF() {
                     
                     PDDocument doc = null;
                     PDPage page = null;
             
                     try {
                         doc = new PDDocument();
                         page = new PDPage();
                         doc.addPage(page);
                         PDFont font = PDType1Font.HELVETICA_BOLD;
                         PDPageContentStream content = new PDPageContentStream(doc, page);
                         content.beginText();
                         content.setFont(font, 12);
                         content.moveTextPositionByAmount(100, 700);
                         content.drawString("hello");
             
                         content.endText();
                         content.close();
                         doc.save("D:/xp/pdfwithText.pdf");
                         doc.close();
                     } catch (Exception e) {
                         System.out.println(e);
                     }
                 }
         
         //读取pdf文件
         public static void readPDF() {
                     PDDocument helloDocument = null;
                     try {
                         helloDocument = PDDocument.load(new File(
                                 "D:/xp/test.pdf"));
                         PDFTextStripper textStripper = new PDFTextStripper("GBK");
                         System.out.println(textStripper.getText(helloDocument));
                         helloDocument.close();
                     } catch (IOException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                     }
                 }
         //修改pdf
         public static void doIt( String inputFile, String outputFile, String strToFind, String message)
           throws IOException, COSVisitorException
             {
           // the document
           PDDocument doc = null;
           try
           {
               doc = PDDocument.load(inputFile);
               PDFTextStripper stripper=new PDFTextStripper("ISO-8859-1");
               List pages = doc.getDocumentCatalog().getAllPages();
               for( int i=0; i<pages.size(); i++ )
               {
                   PDPage page = (PDPage)pages.get( i );
                   PDStream contents = page.getContents();
                   PDFStreamParser parser = new PDFStreamParser(contents.getStream() );
                   parser.parse();
                   List tokens = parser.getTokens();
                   for( int j=0; j<tokens.size(); j++ )
                   {
                       Object next = tokens.get( j );
                       if( next instanceof PDFOperator )
                       {
                           PDFOperator op = (PDFOperator)next;
                           //Tj and TJ are the two operators that display
                           //strings in a PDF
                           if( op.getOperation().equals( "Tj" ) )
                           {
                               //Tj takes one operator and that is the string
                               //to display so lets update that operator
                               COSString previous = (COSString)tokens.get( j-1 );
                               String string = previous.getString();
                               string = string.replaceFirst( strToFind, message );
                               System.out.println(string);
                               System.out.println(string.getBytes("GBK"));
                               previous.reset();
                               previous.append( string.getBytes("GBK") );
                           }
                           else if( op.getOperation().equals( "TJ" ) )
                           {
                               COSArray previous = (COSArray)tokens.get( j-1 );
                               for( int k=0; k<previous.size(); k++ )
                               {
                                   Object arrElement = previous.getObject( k );
                                   if( arrElement instanceof COSString )
                                   {
                                       COSString cosString = (COSString)arrElement;
                                       String string = cosString.getString();
                                       string = string.replaceFirst( strToFind, message );
                                       cosString.reset();
                                       cosString.append( string.getBytes("GBK") );
                                   }
                               }
                           }
                       }
                   }
                   //now that the tokens are updated we will replace the
                   //page content stream.
                   PDStream updatedStream = new PDStream(doc);
                   OutputStream out = updatedStream.createOutputStream();
                   ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
                   tokenWriter.writeTokens( tokens );
                   page.setContents( updatedStream );
               }
               doc.save( outputFile );
           }
           finally
           {
               if( doc != null )
               {
                   doc.close();
               }
           }
       }
          //pdf转成图片
         public static void toImage() {
                try {
                    PDDocument doc = PDDocument
                            .load("D:/xp/pdfwithText.pdf");
                    int pageCount = doc.getPageCount();
                    System.out.println(pageCount);
                    List pages = doc.getDocumentCatalog().getAllPages();
                    for (int i = 0; i < pages.size(); i++) {
                        PDPage page = (PDPage) pages.get(i);
                        BufferedImage image = page.convertToImage();
                        Iterator iter = ImageIO.getImageWritersBySuffix("jpg");
                        ImageWriter writer = (ImageWriter) iter.next();
                        File outFile = new File("D:/xp/pdf.jpg");
                        FileOutputStream out = new FileOutputStream(outFile);
                        ImageOutputStream outImage = ImageIO
                                .createImageOutputStream(out);
                        writer.setOutput(outImage);
                        writer.write(new IIOImage(image, null, null));
                    }
                    doc.close();
                    System.out.println("over");
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }     
         
         
         
         
         
         
    }
    PDFboxUtil
    package com.zhouwuji.util;
    import java.util.Random;
    import java.util.UUID;
    
    /**
     * Title: MyDemo<br>
     * Description: <br>
     * Copyright: Copyright (c) 2018 <br>
     * Create DateTime: 2018年1月14日 下午3:44:07 <br>
     * @author lvlin
     */
    
    public class RandomParam {
        static Random r = new Random();
    
        public static String getId() {
            return UUID.randomUUID().toString();
        }
    
       /*public static String getName() {
            // String[] n1={"赵","钱","孙","李","周","吴","郑","王","冯","陈","诸","魏"};
            // String[]
            // n2={"一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四"};
            String[] n1 = { "张", "王" };
            String[] n2 = { "一", "二" };
            return n1[r.nextInt(n1.length)] + n2[r.nextInt(n2.length)];
        }
    
        public static String getSex() {
            String[] sex = { "男", "女" };
            return sex[r.nextInt(2)];
        }
    
        public static int getAge() {
            return r.nextInt(15) + 18;
        }
    
        public static String getTel() {
            String[] tel = { "133", "136", "138", "152", "177", "188" };
            return tel[r.nextInt(tel.length)] + "****" + (r.nextInt(10) - 1) + (r.nextInt(10)) + (r.nextInt(10))
                    + (r.nextInt(10));
        }
    
        public static String getAdd() {
            String[] add = { "北京", "河北", "山西", "内蒙", "辽宁", "吉林", "黑龙江", "上海", "江苏" };
            return add[r.nextInt(add.length)];
        }*/
    }
    RandomParam
    package com.zhouwuji.util;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.ResourceBundle;
    import java.util.Set;
    
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    import org.apache.log4j.Logger;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    import redis.clients.jedis.JedisShardInfo;
    import redis.clients.jedis.ShardedJedis;
    import redis.clients.jedis.ShardedJedisPool;
    
    public class RedisUtil {
            private static final Logger log = Logger.getLogger(RedisUtil.class);
            private static JedisPool jedisPool = null;
            private static ShardedJedisPool shardedJedisPool = null;
            /**
             * 初始化Redis连接池
             */
            static {
                try {
                    // 加载redis配置文件
                    ResourceBundle bundle = ResourceBundle.getBundle("redis");
                    if (bundle == null) {
                        throw new IllegalArgumentException(
                                "[redis.properties] is not found!");
                    }
                    int maxActivity = Integer.valueOf(bundle
                            .getString("redis.pool.maxActive"));
                    int maxIdle = Integer.valueOf(bundle
                            .getString("redis.pool.maxIdle"));
                    long maxWait = Long.valueOf(bundle.getString("redis.pool.maxWait"));
                    boolean testOnBorrow = Boolean.valueOf(bundle
                            .getString("redis.pool.testOnBorrow"));
                    boolean onreturn = Boolean.valueOf(bundle
                            .getString("redis.pool.testOnReturn"));
                    // 创建jedis池配置实例
                    JedisPoolConfig config = new JedisPoolConfig();
                    // 设置池配置项值
                    config.setMaxTotal(maxActivity);
                    config.setMaxIdle(maxIdle);  //最大空闲连接数
                    config.setMaxWaitMillis(maxWait);
                    config.setTestOnBorrow(testOnBorrow);
                    config.setTestOnReturn(onreturn);
                    jedisPool=new JedisPool(config, bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port")), 200, "123456");
                    // slave链接
                    List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
                    JedisShardInfo shardInfo=new JedisShardInfo(bundle.getString("redis.ip"), Integer
                            .valueOf(bundle.getString("redis.port1")));
                    shardInfo.setPassword("123456");
                    shards.add(shardInfo);
                    shardedJedisPool = new ShardedJedisPool(config, shards);
                    log.info("初始化Redis连接池success");
                } catch (Exception e) {
                    log.error("初始化Redis连接池 出错!", e);
                }
            }
    
            /**
             * 获取Jedis实例
             * 
             * @return
             */
            public synchronized static Jedis getJedis() {
                try {
                    if (jedisPool != null) {
                        Jedis resource = jedisPool.getResource();
                        return resource;
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    log.error("Redis缓存获取Jedis实例 出错!", e);
                    return null;
                }
            }
    
            /**
             * 获取shardedJedis实例
             * 
             * @return
             */
            public static ShardedJedis getShardedJedis() {
                try {
                    if (shardedJedisPool != null) {
                        ShardedJedis resource = shardedJedisPool.getResource();
                        return resource;
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    log.error("Redis缓存获取shardedJedis实例 出错!", e);
                    return null;
                }
            }
    
            /**
             * 释放jedis资源
             * 
             * @param jedis
             */
            public static void returnResource(final Jedis jedis) {
                if (jedis != null) {
                    jedisPool.returnResource(jedis);
                }
            }
    
            /**
             * 释放shardedJedis资源
             * 
             * @param jedis
             */
            public static void returnResource(final ShardedJedis shardedJedis) {
                if (shardedJedis != null) {
                    shardedJedisPool.returnResource(shardedJedis);
                }
            }
    
            /**
             * 向缓存中设置字符串内容
             * 
             * @param key
             *            key
             * @param value
             *            value
             * @return
             * @throws Exception
             */
            public static boolean set(String key, String value) {
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    if(jedis != null){
                        jedis.set(key, value);
                    }
                    return true;
                } catch (Exception e) {
                    log.error("Redis缓存设置key值 出错!", e);
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * 判断key是否存在
             */
            public static boolean exists(String key){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if (jedis == null) {
                        return false;
                    } else {
                        return jedis.exists(key);
                    }
                } catch (Exception e) {
                    log.error("Redis缓存判断key是否存在 出错!", e);
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * 删除缓存中的对象,根据key
             * @param key
             * @return
             */
            public static boolean del(String key) {
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.del(key);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            
            //*******************key-value****************start
            
            /**
             * 向缓存中设置对象
             * 
             * @param key
             * @param value
             * @return
             */
            public static boolean set(String key, Object value) {
                Jedis jedis = null;
                try {
                    String objectJson = JSONObject.fromObject(value).toString();
                    jedis = getJedis();
                    if (jedis != null) {
                        jedis.set(key, objectJson);
                    }
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
    
            /**
             * 根据key 获取内容
             * 
             * @param key
             * @return
             */
            public static Object get(String key) {
                ShardedJedis jedis = null;
                try {
                    jedis = shardedJedisPool.getResource();
                    Object value = jedis.get(key);
                    return value;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    shardedJedisPool.returnResource(jedis);
                }
            }
            
            /**
             * 根据key 获取对象
             * 
             * @param key
             * @return
             */
            @SuppressWarnings("unchecked")
            public static <T> T get(String key, Class<T> clazz) {
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if (jedis != null) {
                        return (T) JSONObject.toBean(JSONObject.fromObject(jedis.get(key)), clazz);
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            //*******************key-value****************end
            
            //*************** 操作list****************start
            /**
             * 向缓存中设置对象 
             * @param key
             * @param list
             * T string calss
             * @return
             */
            public static <T> boolean setList(String key,List<T> list){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    if (jedis != null) {
                        for (T vz : list) {
                            if (vz instanceof String) {
                                jedis.lpush(key, (String) vz);
                            } else {
                                String objectJson = JSONObject.fromObject(vz).toString();
                                jedis.lpush(key, objectJson);
                            }
                        }
                        return true;
                    } else {
                        return false;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            
            @SuppressWarnings("unchecked")
            public static <T> List<T> getListEntity(String key,Class<T> entityClass){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if (jedis != null) {
                        List<String> valueJson = jedis.lrange(key, 0, -1);
                        JSONArray json = new JSONArray();
                        json.addAll(valueJson);
                        JSONArray jsonArray = JSONArray.fromObject(json.toString());
                        return (List<T>) JSONArray.toCollection(jsonArray, entityClass);
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            public static List<String> getListString(String key){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if (jedis != null) {
                        return jedis.lrange(key, 0, -1);
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            //*************** 操作list****************end
            
            //*************** 操作map****************start
            public static <K,V> boolean setMap(String key,Map<String,V> map){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    if (jedis != null) {
                        Set<Map.Entry<String, V>> entry = map.entrySet();
                        for (Iterator<Map.Entry<String, V>> ite = entry.iterator(); ite.hasNext();) {
                            Map.Entry<String, V> kv = ite.next();
                            if (kv.getValue() instanceof String) {
                                jedis.hset(key, kv.getKey(), (String) kv.getValue());
                            }else if (kv.getValue() instanceof List) {
                                jedis.hset(key, kv.getKey(), JSONArray.fromObject(kv.getValue()).toString());
                            } else {
                                jedis.hset(key, kv.getKey(), JSONObject.fromObject(kv.getValue()).toString());
                            }
                        }
                        return true;
                    } else {
                        return false;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            public static boolean setMapKey(String key,String mapKey,Object value){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    if (jedis != null) {
                        if (value instanceof String) {
                            jedis.hset(key, mapKey, String.valueOf(value));
                        } else if (value instanceof List) {
                            jedis.hset(key, mapKey, JSONArray.fromObject(value).toString());
                        } else {
                            jedis.hset(key, mapKey, JSONObject.fromObject(value).toString());
                        }
                        return true;
                    } else {
                        return false;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * seconds key和value 保存的有效时间(单位:秒)
             * @return
             */
            public static boolean setMapKeyExpire(String key,String mapKey,Object value, int seconds){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    if (jedis != null) {
                        if (value instanceof String) {
                            jedis.hset(key, mapKey, String.valueOf(value));
                        } else if (value instanceof List) {
                            jedis.hset(key, mapKey, JSONArray.fromObject(value).toString());
                        } else {
                            jedis.hset(key, mapKey, JSONObject.fromObject(value).toString());
                        }
                        jedis.expire(key, seconds);
                        return true;
                    } else {
                        return false;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            @SuppressWarnings("unchecked")
            public static <K,V> Map<String,V> getMap(String key){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if (jedis != null) {
                        Map<String, V> map = (Map<String, V>) jedis.hgetAll(key);
                        return map;
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            @SuppressWarnings("unchecked")
            public static <K,V> Map<String,V> getMapEntityClass(String key,Class<V> clazz){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if (jedis != null) {
                        Map<String, V> map = (Map<String, V>) jedis.hgetAll(key);
                        Set<Map.Entry<String, V>> entry = map.entrySet();
                        for (Iterator<Map.Entry<String, V>> ite = entry.iterator(); ite.hasNext();) {
                            Map.Entry<String, V> kv = ite.next();
                            map.put(kv.getKey(), (V) JSONObject.toBean(JSONObject.fromObject(kv.getValue()), clazz));
                        }
                        return map;
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            @SuppressWarnings("unchecked")
            public static <K,V> Map<String,List<V>> getMapList(String key,Class<V> clazz){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if (jedis != null) {
                        Map<String, V> map = (Map<String, V>) jedis.hgetAll(key);
                        Set<Map.Entry<String, V>> entry = map.entrySet();
                        for (Iterator<Map.Entry<String, V>> ite = entry.iterator(); ite.hasNext();) {
                            Map.Entry<String, V> kv = ite.next();
                            JSONArray jsonArray = JSONArray.fromObject(kv.getValue());
                            map.put(kv.getKey(), (V) JSONArray.toCollection(jsonArray, clazz));
                        }
                        return (Map<String, List<V>>) map;
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            @SuppressWarnings("unchecked")
            public static <T> List<T> getMapKeyListEntity(String key,String mapKey,
                    Class<T> entityClass){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if (jedis != null) {
                        String valueJson = jedis.hget(key, mapKey);
                        JSONArray jsonArray = JSONArray.fromObject(valueJson);
                        return (List<T>) JSONArray.toCollection(jsonArray, entityClass);
                    } else {
                        return null;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            @SuppressWarnings("unchecked")
            public static <T> T getMapKeyEntity(String key,String mapKey,
                    Class<T> entityClass){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if(jedis != null){
                    String valueJson=jedis.hget(key, mapKey);
                    return (T) JSONObject.toBean(JSONObject.fromObject(valueJson), entityClass);
                    }else{return null;}
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            public static Object getMapKey(String key,String mapKey){
                ShardedJedis jedis = null;
                try {
                    jedis = getShardedJedis();
                    if(jedis != null){
                    return jedis.hget(key, mapKey);
                    }else{return null;}
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            public static boolean delMapKey(String key,String mapKey){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.hdel(key, mapKey);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            public static boolean hexists(String key,String mapKey){
                ShardedJedis jedis = null;
                try {
                    jedis = shardedJedisPool.getResource();
                    return jedis.hexists(key,mapKey);
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    shardedJedisPool.returnResource(jedis);
                }
            }
            //*************** 操作map****************end
            
            //***************计数器应用INCR,DECR****************begin
            //Redis的命令都是原子性的,你可以轻松地利用INCR,DECR命令来构建计数器系统
            
            /**
             * incr(key):名称为key的string增1操作
             */
            public static boolean incr(String key){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.incr(key);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * incrby(key, integer):名称为key的string增加integer
             */
            public static boolean incrBy(String key, int value){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.incrBy(key, value);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * decr(key):名称为key的string减1操作
             */
            public static boolean decr(String key){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.decr(key);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * decrby(key, integer):名称为key的string减少integer
             */
            public static boolean decrBy(String key, int value){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.decrBy(key, value);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            //***************计数器应用INCR,DECR****************end
            
            //***************使用sorted set(zset)甚至可以构建有优先级的队列系统***************begin
            /**
             * 向名称为key的zset中添加元素member,score用于排序。
             * 如果该元素已经存在,则根据score更新该元素的顺序
             */
            public static boolean zadd(String key, double score, String member){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.zadd(key, score, member);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * 删除名称为key的zset中的元素member
             */
            public static boolean zrem(String key, String... members){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.zrem(key, members);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * 返回集合中score在给定区间的元素
             */
            public static Set<String> zrangeByScore(String key, double min, double max){
                ShardedJedis jedis = null;
                try {
                    jedis = shardedJedisPool.getResource();
                    return jedis.zrangeByScore(key, min, max);
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            //***************使用sorted set(zset)甚至可以构建有优先级的队列系统***************end
            
            //***************sorted set 处理***************************************begin
            //zset 处理
            public static boolean zaddObject(String key, double score, Object value){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    String objectJson = JSONObject.fromObject(value).toString();
                    jedis.zadd(key, score, objectJson);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * score值递减(从大到小)次序排列。
             * @param key
             * @param max score
             * @param min score
             * @param entityClass
             * @return
             */
            @SuppressWarnings("unchecked")
            public static  <T> List<T> zrevrangeByScore(String key,double max,double min, 
                    Class<T> entityClass){
                ShardedJedis jedis = null;
                try {
                    jedis =shardedJedisPool.getResource();
                    Set<String> set=jedis.zrevrangeByScore(key, max, min);
                    List<T> list=new ArrayList<T>();
                    for (String str : set) {  
                        list.add((T) JSONObject.toBean(JSONObject.fromObject(str), entityClass));
                    } 
                    return list;
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            /**
             * score值递减(从大到小)次序排列。
             * @param key
             * @param max score
             * @param min score
             * @param offset count (类似mysql的 LIMIT)
             * @param entityClass
             * @return
             */
            @SuppressWarnings("unchecked")
            public static  <T> List<T> zrevrangeByScore(String key,double max,double min,
                    int offset, int count,Class<T> entityClass){
                ShardedJedis jedis = null;
                try {
                    jedis =shardedJedisPool.getResource();
                    Set<String> set=jedis.zrevrangeByScore(key, max, min,offset,count);
                    List<T> list=new ArrayList<T>();
                    for (String str : set) {  
                        list.add((T) JSONObject.toBean(JSONObject.fromObject(str), entityClass));
                    } 
                    return list;
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                } finally {
                    returnResource(jedis);
                }
            }
            
            
            //得到总记录数
            public static long zcard(String key){
                ShardedJedis jedis = null;
                try {
                    jedis =shardedJedisPool.getResource();
                    return jedis.zcard(key);
                } catch (Exception e) {
                    e.printStackTrace();
                    return 0;
                } finally {
                    returnResource(jedis);
                }
            }
            
            //删除 元素
            public static  boolean zremObject(String key, Object value){
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    String objectJson = JSONObject.fromObject(value).toString();
                    jedis.zrem(key, objectJson);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
            
            //统计zset集合中score某个范围内(1-5),元素的个数
            public static long zcount(String key,double min, double max){
                ShardedJedis jedis = null;
                try {
                    jedis =shardedJedisPool.getResource();
                    return jedis.zcount(key,min,max);
                } catch (Exception e) {
                    e.printStackTrace();
                    return 0;
                } finally {
                    returnResource(jedis);
                }
            }
            
            //查看zset集合中元素的score
            public static double zscore(String key,Object value){
                ShardedJedis jedis = null;
                try {
                    jedis =shardedJedisPool.getResource();
                    String objectJson = JSONObject.fromObject(value).toString();
                    return jedis.zscore(key,objectJson);
                } catch (Exception e) {
                    e.printStackTrace();
                    return 0;
                } finally {
                    returnResource(jedis);
                }
            }
            //**************sorted set******************************************end
            
            //***********************Redis Set集合操作**************************begin
            /**
             * sadd:向名称为Key的set中添加元素,同一集合中不能出现相同的元素值。(用法:sadd set集合名称 元素值)
             * @param key
             * @param value
             * @return
             */
            public static boolean sadd(String key, String value) {
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.sadd(key, value);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
    
            /**
             * srem:删除名称为key的set中的元素。(用法:srem set集合名称 要删除的元素值)
             * 
             * @param key
             * @param value
             * @return
             */
            public static boolean srem(String key, String value) {
                Jedis jedis = null;
                try {
                    jedis = getJedis();
                    jedis.srem(key, value);
                    return true;
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
    
            /**
             * sdiff:返回所有给定key与第一个key的差集。(用法:sdiff set集合1 set集合2)
             * 
             * @param key1
             * @param key2
             * @return
             */
            public static Set<String> sdiff(String key1, String key2) {
                Jedis jedis = null;
                Set<String> diffList = null;
                try {
                    jedis = getJedis();
                    diffList = jedis.sdiff(key1, key2);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    returnResource(jedis);
                }
                return diffList;
            }
    
            /**
             * sismember:判断某个值是否是集合的元素。(用法:sismember 集合1 指定的元素值)
             * 
             * @param key
             * @param value
             * @return
             */
            public static boolean sismember(String key, String value) {
                ShardedJedis jedis = null;
                try {
                    jedis = shardedJedisPool.getResource();
                    return jedis.sismember(key, value);
                } catch (Exception e) {
                    e.printStackTrace();
                    return false;
                } finally {
                    returnResource(jedis);
                }
            }
    
            /**
             * smembers(key) :返回名称为key的set的所有元素
             * 
             * @param key
             * @return
             */
            public static Set<String> smembers(String key) {
                Jedis jedis = null;
                Set<String> list = null;
                try {
                    jedis = getJedis();
                    list = jedis.smembers(key);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    returnResource(jedis);
                }
                return list;
            }
            
            //***********************Redis Set集合操作****************************end
    }
    RedisUtil
    package com.zhouwuji.util;
    import redis.clients.jedis.Jedis;  
    import redis.clients.jedis.JedisPool;  
    import redis.clients.jedis.JedisPoolConfig; 
    public class RedisUtils {
         //Redis服务器IP  
        private static String ADDR = "100.105.7.167";  
         //Redis的端口号  
        private static int PORT = 6379;  
        //可用连接实例的最大数目,默认值为8;  
        //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。  
        private static int MAX_ACTIVE = 24;  
        //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。  
        private static int MAX_IDLE = 2;  
        //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;  
        private static int MAX_WAIT = 10;  
              
        //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;  
        private static boolean TEST_ON_BORROW = true;  
        private static JedisPool jedisPool = null;  
        /** 
         * 初始化Redis连接池 
         */  
         static {  
             try {  
                  JedisPoolConfig config = new JedisPoolConfig();  
                  config.setMaxTotal(MAX_ACTIVE);  
                  config.setMaxIdle(MAX_IDLE);  
                  config.setMaxWaitMillis(MAX_WAIT);  
                  config.setTestOnBorrow(TEST_ON_BORROW); 
                  jedisPool=new JedisPool(config, ADDR, PORT, 200, "123456");
             } catch (Exception e) {  
                  e.printStackTrace();  
             }  
         }  
           
         /** 
          * 获取Jedis实例 
          * @return 
          */  
         public synchronized static Jedis getJedis() {  
             try {  
                 if (jedisPool != null) {  
                     Jedis resource = jedisPool.getResource();  
                     return resource;  
                 } else {  
                     return null;  
                 }  
             } catch (Exception e) {  
                 e.printStackTrace();  
                 return null;  
             }  
         }  
                
         /** 
          * 释放jedis资源 
          * @param jedis 
          */  
          public static void returnResource(final Jedis jedis) {  
              if (jedis != null) {  
                   jedisPool.returnResourceObject(jedis);  
              }  
          }  
    }
    RedisUtils
    package com.zhouwuji.util;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.apache.xmlbeans.impl.xb.xsdschema.Public;
    
    import com.bea.xml.stream.StaticAllocator;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    import redis.clients.jedis.ShardedJedis;
    import redis.clients.jedis.Transaction;
    
    public class RedisTest {
        /**
         * 通俗点讲,watch 命令就是标记一个键,如果标记一个键
         * 在提交事务前如果该键被别人修改过,拿实物就会失败,这种情况通常可以在程序中
         * 重新在尝试一次
         * 首先标记了键balance, 然后检查余额是否足够,不足就取消标记,并不做扣减;
         * 足够的话,就启动事务进行更新操作
         * 如果在此期间balance 被其他人修改,那在提交事务,执行(exec)时就会报错
         * 程序中通常可以捕获这类错误在重新执行一次,直到成功 
         * @param args
         */
        public static void main(String[] args) {
            Jedis jedis = RedisUtils.getJedis();
             Transaction transaction= jedis.multi();
             transaction.set("k11", "v11");
             transaction.exec();
            
            System.out.println(jedis.get("k11")); 
            
        }
        public boolean transaction(){
            Jedis jedis = RedisUtils.getJedis();
            int balance;//可用余额
            int debt;//前额
            int amtToSubtract=10;//实刷金额
            jedis.watch("balance");
            //jedis.set("balance", "5");//
            balance=Integer.parseInt(jedis.get("balance"));
            if (balance<amtToSubtract) {
                jedis.unwatch();
                System.out.println("modify");
                return false;
            } else {
               System.out.println("transaction");
                Transaction transaction=jedis.multi();
                transaction.decrBy("balance",amtToSubtract);
                transaction.incrBy("DEBT", amtToSubtract);
                transaction.exec();
                balance=Integer.parseInt(jedis.get("balance"));
                debt=Integer.parseInt(jedis.get("debt"));
                return true;            
            }
        }
        public static void testRedis() {
            /*
             * Jedis jedis=RedisUtil.getJedis();
             * System.out.println(jedis.keys("*")); String values=
             * RedisUtil.getShardedJedis().get("k1"); System.out.println(values);
             */
            Jedis jedis = RedisUtils.getJedis();
            Set<String> keysSet = jedis.keys("*");
            Iterator<String> vlues = keysSet.iterator();
            for (Iterator iterator = keysSet.iterator(); iterator.hasNext();) {
                String string = (String) iterator.next();
                System.out.println(string);
            }
    
            System.out.println(jedis.ttl("k1"));
    
            System.out.println(jedis.get("k1"));
    
            jedis.set("k4", "v4");
            System.out.println(jedis.get("k4"));
    
            jedis.mset("k5", "v5", "k6", "v6");
            System.out.println(jedis.mget("k5", "k6", "k7"));
    
            // list
            // jedis.lpush("mylist","list1","v1","list2","v2");
            List<String> list = jedis.lrange("mylist", 0, -1);
            for (String string : list) {
                System.out.println("list数据类型" + string);
            }
    
            // set
            jedis.sadd("set1", "v1");
            jedis.sadd("set1", "v2");
            jedis.sadd("set1", "v3");
            Set<String> set1 = jedis.smembers("set1");
            for (Iterator iterator = set1.iterator(); iterator.hasNext();) {
                String string = (String) iterator.next();
                System.out.println("set数据类型" + string);
            }
    
            // hash
            jedis.hset("hash1", "username", "admin");
            jedis.hset("hash1", "password", "123456");
            System.out.println("hash数据类型" + jedis.hget("hash1", "username"));
    
            Map<String, String> maps = new HashMap<String, String>();
            maps.put("sex", "man");
            maps.put("age", "18");
            jedis.hmset("hash1", maps);
            List<String> result = jedis.hmget("hash1", "sex", "username",
                    "password", "age");
            System.out.println(result.size());
            for (String string : result) {
                System.out.println(result);
            }
            // zset
            jedis.zadd("zset1", 62d, "v1");
            jedis.zadd("zset1", 72d, "v2");
            jedis.zadd("zset1", 82d, "v3");
            Set<String> s1 = jedis.zrange("zset1", 0, -1);
            for (Iterator iterator = s1.iterator(); iterator.hasNext();) {
                String string = (String) iterator.next();
                System.out.println("zset数据" + string);
            }
        }
    
    }
    RedisTest
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/orcl
    jdbc.username=root
    jdbc.password=123456
    jdbc.properties
    <?xml version="1.0" encoding="UTF-8"?>  
      
    <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->  
    <!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->  
    <!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->  
      
      
    <!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,
    默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。   
        debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->  
    <configuration scan="true" scanPeriod="60 seconds" debug="false">  
        <!-- 定义日志文件 输入位置 -->  
        <property name="log_dir" value="/logs" />  
        <!-- 日志最大的历史 30天 -->  
        <property name="maxHistory" value="30"/>  
        <!-- ConsoleAppender 控制台输出日志 -->  
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
            <!-- 对日志进行格式化 -->  
            <encoder>  
                <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>  
            </encoder>  
        </appender>  
          
          
        <!-- ERROR级别日志 -->  
        <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->  
        <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <!-- 过滤器,只记录WARN级别的日志 -->  
            <filter class="ch.qos.logback.classic.filter.LevelFilter">  
                <level>ERROR</level>  
                <onMatch>ACCEPT</onMatch>  
                <onMismatch>DENY</onMismatch>  
            </filter>  
            <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <!--日志输出位置  可相对、和绝对路径 -->  
                <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error-log.log</fileNamePattern>  
                <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,  
                则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->  
                <maxHistory>${maxHistory}</maxHistory>  
            </rollingPolicy>  
              
            <!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。   
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">     
              <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>     
              <minIndex>1</minIndex>     
              <maxIndex>3</maxIndex>     
            </rollingPolicy>   -->  
            <!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动   
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">     
                <maxFileSize>5MB</maxFileSize>     
            </triggeringPolicy>   -->  
              
            <encoder>  
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  
            </encoder>  
        </appender>  
          
          
          
        <!-- WARN级别日志 appender -->  
        <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <!-- 过滤器,只记录WARN级别的日志 -->  
            <filter class="ch.qos.logback.classic.filter.LevelFilter">  
                <level>WARN</level>  
                <onMatch>ACCEPT</onMatch>  
                <onMismatch>DENY</onMismatch>  
            </filter>  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <!-- 按天回滚 daily -->  
                <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log  
                </fileNamePattern>  
                <!-- 日志最大的历史 60天 -->  
                <maxHistory>${maxHistory}</maxHistory>  
            </rollingPolicy>  
            <encoder>  
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  
            </encoder>  
        </appender>  
          
          
          
          
        <!-- INFO级别日志 appender -->  
        <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <!-- 过滤器,只记录INFO级别的日志 -->  
            <filter class="ch.qos.logback.classic.filter.LevelFilter">  
                <level>INFO</level>  
                <onMatch>ACCEPT</onMatch>  
                <onMismatch>DENY</onMismatch>  
            </filter>  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <!-- 按天回滚 daily -->  
                <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log  
                </fileNamePattern>  
                <!-- 日志最大的历史 60天 -->  
                <maxHistory>${maxHistory}</maxHistory>  
            </rollingPolicy>  
            <encoder>  
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  
            </encoder>  
        </appender>  
          
          
          
          
        <!-- DEBUG级别日志 appender -->  
        <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <!-- 过滤器,只记录DEBUG级别的日志 -->  
            <filter class="ch.qos.logback.classic.filter.LevelFilter">  
                <level>DEBUG</level>  
                <onMatch>ACCEPT</onMatch>  
                <onMismatch>DENY</onMismatch>  
            </filter>  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <!-- 按天回滚 daily -->  
                <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log  
                </fileNamePattern>  
                <!-- 日志最大的历史 60天 -->  
                <maxHistory>${maxHistory}</maxHistory>  
            </rollingPolicy>  
            <encoder>  
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  
            </encoder>  
        </appender>  
          
          
          
          
        <!-- TRACE级别日志 appender -->  
        <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">  
            <!-- 过滤器,只记录ERROR级别的日志 -->  
            <filter class="ch.qos.logback.classic.filter.LevelFilter">  
                <level>TRACE</level>  
                <onMatch>ACCEPT</onMatch>  
                <onMismatch>DENY</onMismatch>  
            </filter>  
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
                <!-- 按天回滚 daily -->  
                <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace-log.log  
                </fileNamePattern>  
                <!-- 日志最大的历史 60天 -->  
                <maxHistory>${maxHistory}</maxHistory>  
            </rollingPolicy>  
            <encoder>  
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  
            </encoder>  
        </appender>  
      
        <logger name="java.sql.PreparedStatement" value="DEBUG" />    
        <logger name="java.sql.Connection" value="DEBUG" />    
        <logger name="java.sql.Statement" value="DEBUG" />    
        <logger name="com.ibatis" value="DEBUG" />    
        <logger name="com.ibatis.common.jdbc.SimpleDataSource" value="DEBUG" />    
        <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG"/>    
        <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" value="DEBUG" />    
          
          
          
        <!-- root级别   DEBUG -->  
        <root level="debug">  
            <!-- 控制台输出 -->  
            <appender-ref ref="STDOUT" />  
            <!-- 文件输出 -->  
            <appender-ref ref="ERROR" />  
            <appender-ref ref="INFO" />  
            <appender-ref ref="WARN" />  
            <appender-ref ref="DEBUG" />  
            <appender-ref ref="TRACE" />  
        </root>  
    </configuration>  
    logback.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
         
        <!-- 定时上传STFP Server上send文件夹下文件、移动send至bak文件夹下文件和本地APP上logs写入文件 begin -->
        <bean id="sendInfoToYxtJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
            <property name="targetObject">
                <ref bean="quartzService"/>
            </property>
            <property name="targetMethod">
                <value>sendInfoToYxtByQuartz</value>
            </property>
            <property name="concurrent">
                <value>false</value>
            </property>
        </bean>
        
        <bean id="sendInfoToYxtJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" >
            <property name="jobDetail">
                <ref bean="sendInfoToYxtJobDetail"/>
            </property>
            <property name="cronExpression">
                <!-- 每3秒执行一次 (0/3 * * * * ?) -->
                <!-- 每天20:00执行 (0 0 20 * * ?) -->
                <value>0 0 20 * * ?</value>
            </property>
        </bean>
        <!-- 定时上传STFP Server上send文件夹下文件、移动send至bak文件夹下文件和本地APP上logs写入文件 end -->
            
        <!-- 定时删除本地APP上logs文件夹下文件 begin --> 
        <bean id="deleteLogFilesJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
            <property name="targetObject">
                <ref bean="quartzService"/>
            </property>
            <property name="targetMethod">
                <value>deleteLogFileByQuartz</value>
            </property>
            <property name="concurrent">
                <value>false</value>
            </property>
        </bean>
        
        <bean id="deleteLogFilesJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" >
            <property name="jobDetail">
                <ref bean="deleteLogFilesJobDetail"/>
            </property>
            <property name="cronExpression">
                <!-- 每3秒执行一次 (0/3 * * * * ?) -->
                <!-- 每天20:05执行 (0 5 20 * * ?) -->
                <value>0 0 20 * * ?</value>
            </property>
        </bean>
        <!-- 定时删除本地APP上logs文件夹下文件 begin -->
        
        <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
        <bean id="startQuertz" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="sendInfoToYxtJobTrigger"/>
                    <ref bean="deleteLogFilesJobTrigger"/>
                </list>
            </property>
        </bean>
    </beans>
    quartzu.xml
    #最大连接数
    redis.pool.maxActive=100
    #最大空闲数
    redis.pool.maxIdle=20
    #获取连接时的最大等待毫秒数(如果设置为阻塞是BlockExhausted),如果超时就抛异常,小于零,阻塞不确定的时间默认-1 。
    redis.pool.maxWait=3000
    #最小空闲连接数
    redis.pool.minIdle=0
    #在获取连接的时候检查有效性,默认false
    redis.pool.testOnBorrow=false
    #
    redis.pool.testOnReturn=false
    
    
    redis.ip=100.105.7.167
    #redis.ip=127.0.0.1
    redis.port=6379
    redis.port1=6379
    redis.password=123456
    redis.properties
    <?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:context="http://www.springframework.org/schema/context"
        xmlns:cache="http://www.springframework.org/schema/cache"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.1.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
       <bean id="stringConverter"
            class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>text/plain;charset=UTF-8</value>
                </list>
            </property>
        </bean>
        <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
        <bean  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <ref bean="stringConverter" />
                    <ref bean="jsonConverter" />
                </list>
            </property>
        </bean> 
       
        <context:property-placeholder location="classpath:jdbc.properties"/>
        
        <!-- 配置数据源 -->
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driverClassName}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
        </bean>
        
        <!-- 声明式事务配置 开始 -->
        <!-- 配置事务管理器 -->
        <bean id="txManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
        
         <!-- 配置事务通知 -->
        <tx:advice id="txAdvice" transaction-manager="txManager">
            <tx:attributes>
            <!--     配置哪些方法使用什么样的事务,配置事务的传播特性 -->
                <tx:method name="add" propagation="REQUIRED" />
                <tx:method name="insert" propagation="REQUIRED" />
                <tx:method name="update" propagation="REQUIRED" />
                <tx:method name="delete" propagation="REQUIRED" />
                <tx:method name="remove*" propagation="REQUIRED" />
                <tx:method name="get" read-only="true" />
                <tx:method name="*" propagation="REQUIRED" />
            </tx:attributes>
        </tx:advice>
        <aop:config>
            <aop:pointcut expression="execution(* com.zhouwuji.service.impl.*.*(..))"
                id="pointcut" />
            <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />
        </aop:config> 
        
        <!-- 声明式事务配置 结束 -->
        <!-- 配置sqlSessionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="mapperLocations" value="classpath:com/zhouwuji/dao/*.mapper.xml"></property>
        </bean>
        
        <context:component-scan base-package="com.zhouwuji" />
        
        <!-- 6.spring和mybaits整合,自动扫映射输入参数 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.zhouwuji.dao" />
        </bean>
        
          <!-- 定义视图解析器 -->
        <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                     <property name="prefix" value="/WEB-INF/view/" />
                    <property name="suffix" value=".jsp" />
        </bean> 
        <!-- 静态映射对应的文件 
        <mvc:resources location="js/**" mapping="/WEB-INF/view/js"/>-->
        <mvc:default-servlet-handler/>
        <mvc:annotation-driven/>
        <!-- 定时功能清理机制,包含临时文档删除 -->
        <import resource="classpath:quartzu.xml"/>
        
        
        
         <!-- 1.springMVC上传文件时,需要配置CommonsMultipartResolver处理器 -->
        <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <!-- 设置默认的编码格式 -->
            <property name="defaultEncoding" value="UTF-8" />
            <property name="maxInMemorySize" value="10240" /> <!-- 最大内存大小 (10240) -->
            <!-- 指定所上传文件的总的大小不能超过200kb, 注意maxUploadSize属性点 限制 不是针对单个文件, 而是所有文件的容量总和 -->
            <property name="maxUploadSize" value="-1" /><!-- 最大文件大小,-1为无限止(-1) -->
        </bean>
        <!-- 2.springMVC在超出上传文件限制时,会抛出 org.springframework.web.multipart.MaxUploadSizeExceededException 
            该异常时SpringMVC在检查上传文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->
         <bean id="exceptionResolver"
            class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props>
                    <!-- 在遇到MaxUploadSizeExceededException异常时,自动跳到xxx面 -->
                    <prop
                        key="org.springframework.web.multipart.MaxUploadSizeExceededException">error.jsp</prop>
                </props>
            </property>
        </bean>
        
    </beans>
    springMVV-servlet.xml
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@  taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!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>
        <center>
            <form action="<%=basePath%>importExcel" method="post"
                enctype="multipart/form-data">
                     上传文件:<input  type="file" name="uploadfile"> 
                  <input type="submit"  value="上传">
            </form>
        </center>
    </body>
    </html>
    index.jsp
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!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">
    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.3.min.js"></script>
    <!-- <script type="text/javascript" src="js/jquery-1.8.3.js"></script> -->
    <script type="text/javascript">
    $(function(){
        var msg="${msg}";
        if(msg!=null&&msg!=""){
            alert(msg);
        } 
    })
    </script>
    <title>页面</title>
    </head>
    <body>
    <h2>您好:${customer.name}!</h2><br>
    <h1><font color="red"><a href="/MyDemo/02?name=${customer.name}">Quartz</a></font>---此刷新按钮每分钟最多刷新两次!!!</h1>
    <br/><br/>
    <h1>JasperReport</h1><br>
    <a href="/MyDemo/03">下载</a>
    <h1>pdfbox</h1><br>
    <a href="/MyDemo/04">下载</a>|<a href="/MyDemo/05">上传</a>
    </body>
    </html>
    01.jsp
    <?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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
        <context-param>  
            <param-name>logbackConfigLocation</param-name>  
            <param-value>classpath:logback.xml</param-value>  
        </context-param>  
        <listener>  
            <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  
        </listener>  
        <servlet>
            <servlet-name>servletdispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springMVV-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>servletdispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    web.xml
    <?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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
        <context-param>  
            <param-name>logbackConfigLocation</param-name>  
            <param-value>classpath:logback.xml</param-value>  
        </context-param>  
        <listener>  
            <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>  
        </listener>  
        <servlet>
            <servlet-name>servletdispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springMVV-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>servletdispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    pom.xml
    /*
    Navicat MySQL Data Transfer
    
    Source Server         : test
    Source Server Version : 50520
    Source Host           : localhost:3306
    Source Database       : orcl
    
    Target Server Type    : MYSQL
    Target Server Version : 50520
    File Encoding         : 65001
    
    Date: 2018-03-11 11:58:15
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for `user`
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `name` varchar(10) DEFAULT NULL,
      `id` int(20) NOT NULL AUTO_INCREMENT,
      `pwd` varchar(30) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    INSERT INTO `user` VALUES ('name', '1', '123');
    INSERT INTO `user` VALUES ('min', '2', 'ad');
    INSERT INTO `user` VALUES ('uanem', '3', '123');
    INSERT INTO `user` VALUES ('uanem', '16', '123');
    INSERT INTO `user` VALUES ('name', '44', '123');
    INSERT INTO `user` VALUES ('min', '45', '123');
    INSERT INTO `user` VALUES ('uanem', '46', '123');
    INSERT INTO `user` VALUES ('uanem', '47', '123');
    user.sql
  • 相关阅读:
    赛孚耐(SafeNet)加密狗 C#调用代码
    转 RMAN-20033
    MyBatis <foreach>
    MySQL InnoDB锁问题
    MySQL MyISAM表锁
    MySQL锁概述
    MySQL 优化表数据类型
    MySQL 优化分页思路
    MySQL EXPLAIN
    MySQL 开启慢查询日志
  • 原文地址:https://www.cnblogs.com/ou-pc/p/8543667.html
Copyright © 2011-2022 走看看