java 常用工具类

1.SqlSessionUtil连接数据库

package untity;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * @description SqlSessionFactory 工厂构建,获取SqlSession对象
 * @auther: CDHONG.IT
 * @date: 2019/10/18-9:46
 **/
public class SqlSessionUtil {

    private static SqlSessionFactory sqlSessionFactory;

    static{
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }


    public static void main(String[] args) {
        System.out.println(SqlSessionUtil.getSqlSession());
    }


}
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="jdbc.properties" />
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${pwd}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>

        <mapper resource="StudentMapper.xml" />
        <mapper resource="mappers/AddInvitation.xml"/>
        <mapper resource="mappers/Invitation.xml"/>
        <mapper resource="mappers/Reply.xml"/>
        <mapper resource="mapper/MemberMapper.xml"/>
        <mapper resource="mapper/MemberReply.xml"/>
        <mapper resource="mapper/AdminMapper.xml"/>
        <mapper resource="mapper/UserMapper.xml"/>

        <mapper resource="mappers/LoginMapper.xml" />
        <mapper resource="mappers/RegisterMapper.xml" />
        <mapper resource="mappers/RretrievePwd.xml" />

    </mappers>
</configuration>

依赖
<dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
jdbc.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/fly_db?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false&zeroDateTimeBehavior=convertToNull
user=root
pwd=123

插件依赖

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>

2.GsonUtil json数据工具

package untity;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializer;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @description
 * @auther: CDHONG.IT
 * @date: 2019/10/18-14:31
 **/
public class GsonUtil {
    private static Gson gson = new GsonBuilder()
            .registerTypeAdapter(LocalDate.class, (JsonSerializer<LocalDate>) (localDate, type, jsonSerializationContext) -> new JsonPrimitive(localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))))
            .registerTypeAdapter(LocalDateTime.class, (JsonSerializer<LocalDateTime>) (localDateTime, type, jsonSerializationContext) ->  new JsonPrimitive(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))))
            .create();

    public static String toJson(Object object){
        return gson.toJson(object);
    }

    public static <T> T fromJson(String json,Class<T> clazz){
        return gson.fromJson(json,clazz);
    }


}
ResponseEntity 类
package entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @description
 * @auther: Lily
 * @date: 2019/10/17-10:57
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResponseEntity {
    private int code;
    private String msg;
    private Long count;
    private Object data;

    public static ResponseEntity isAdim(Object obj){
        return new   ResponseEntity(2,null,null,obj);
    }
    public static ResponseEntity ok(){
        return new ResponseEntity(0,null,null,null);
    }
    public static ResponseEntity ok(String msg){
        return new ResponseEntity(0,msg,null,null);
    }
    public static ResponseEntity error(String msg){
        return new ResponseEntity(1,msg,null,null);
    }

    public static ResponseEntity data(Object obj){
        return new ResponseEntity(0,null,null,obj);
    }

    public static ResponseEntity page(long count,Object obj){
        return new ResponseEntity(0,null,count,obj);
    }

    public static boolean isSuccess(ResponseEntity responseEntity){
        return responseEntity.getCode() == 2;
    }
    public static boolean isSucce(ResponseEntity responseEntity){
        return responseEntity.getCode() == 0;
    }

}

依赖

<dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>

3、BaseServlet类

package web;



import entity.ResponseEntity;
import untity.GsonUtil;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Objects;

/**
 * @description
 * @auther: Lily
 * @date: 2019/10/17-10:55
 **/
public class BaseServlet extends HttpServlet {

    protected HttpServletRequest request;
    protected HttpServletResponse response;
    protected HttpSession session;
    protected final String REDIRECT = "redirect:";

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        request = req;
        response = resp;
        session = req.getSession();
        //student/add   ,  student/add?name=aa
        String uri = req.getRequestURI();
        //StringBuffer url = req.getRequestURL();
        //System.out.println(uri);
        //System.out.println(url);
        //通过请求地址获取到对应的方法名称
        String methodName = uri.substring(uri.lastIndexOf("/") + 1);
        try {
            //使用反射获取指定方法名称的方法对象  Class
            Class<? extends BaseServlet> clazz = this.getClass();
            Method method = clazz.getDeclaredMethod(methodName);
            //打破规则,调用私有方法
            method.setAccessible(true);
            //执行方法,获取结果
            Object result = method.invoke(this);
            if(Objects.nonNull(result)){
                if(result instanceof ResponseEntity){
                    //JSON转换
                    String jsonStr = GsonUtil.toJson(result);
                    //设置返回格式
                    resp.setContentType("application/json;charset=utf-8");
                    //out输出
                    PrintWriter out = resp.getWriter();
                    out.write(jsonStr);
                    out.close();
                }else if(result instanceof String){
                    String path = result + ".jsp";
                    //重定向
                    if(path.startsWith(REDIRECT)){
                        path = path.substring(path.indexOf("/"));
                        resp.sendRedirect(path);
                        return;
                    }
                    req.getRequestDispatcher(path).forward(req,resp);
                }else{
                    throw new RuntimeException("数据格式不匹配,想清楚。。");
                }
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    }
}

依赖

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

4、邮箱工具

package untity;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 * @description
 * @auther: CDHONG.IT
 * @date: 2019/10/22-9:38
 **/
public class MailUtils {
    private static final String USER = ""; // 发件人称号,同邮箱地址
    private static final String PASSWORD = ""; // 如果是qq邮箱可以使户端授权码,或者登录密码

    /**
     *
     * @param to 收件人邮箱
     * @param text 邮件正文
     * @param title 标题
     */
    /* 发送验证信息的邮件 */
    public static boolean sendMail(String to, String text, String title){
        try {
            final Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.host", "smtp.qq.com");

            // 发件人的账号
            props.put("mail.user", USER);
            //发件人的密码
            props.put("mail.password", PASSWORD);

            // 构建授权信息,用于进行SMTP进行身份验证
            Authenticator authenticator = new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    // 用户名、密码
                    String userName = props.getProperty("mail.user");
                    String password = props.getProperty("mail.password");
                    return new PasswordAuthentication(userName, password);
                }
            };
            // 使用环境属性和授权信息,创建邮件会话
            Session mailSession = Session.getInstance(props, authenticator);
            // 创建邮件消息
            MimeMessage message = new MimeMessage(mailSession);
            // 设置发件人
            String username = props.getProperty("mail.user");
            InternetAddress form = new InternetAddress(username);
            message.setFrom(form);

            // 设置收件人
            InternetAddress toAddress = new InternetAddress(to);
            message.setRecipient(Message.RecipientType.TO, toAddress);

            // 设置邮件标题
            message.setSubject(title);

            // 设置邮件的内容体
            message.setContent(text, "text/html;charset=UTF-8");
            // 发送邮件
            Transport.send(message);
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }

    public static void main(String[] args) throws Exception { // 做测试用
            MailUtils.sendMail("","你好,这是一封测试邮件,无需回复。","测试邮件");
            System.out.println("发送成功");

    }
}
<dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.5.3</version>
        </dependency>

5、手机短信接受工具

package web;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;

import java.util.ResourceBundle;

/**
 * @Auther: mu_zi
 * @Date: 2019/10/31 14:19
 * @Description:
 */
public class SendSms {
    private static ResourceBundle rb = ResourceBundle.getBundle("sms");

    public static String sendSms(String tel,String code) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", rb.getString("accessKeyId"), rb.getString("secret"));
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendSms");
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", tel);
        request.putQueryParameter("TemplateParam", "{"code":""+code+""}");
        request.putQueryParameter("SignName", rb.getString("signName"));
        request.putQueryParameter("TemplateCode",  rb.getString("templateCode"));
        try {
            CommonResponse response = client.getCommonResponse(request);
            // System.out.println(response.getData());
            return response.getData();
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String code = String.valueOf(new Double(Math.random()*10000).intValue());
        String str = SendSms.sendSms("13628357343", code);
        System.out.println(str);
        //{"Message":"账户余额不足","RequestId":"887695F2-5601-4819-8019-E37F72155831","Code":"isv.AMOUNT_NOT_ENOUGH"}

    }

}

依赖

<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.0.3</version>
        </dependency>

6、图片验证码

package web;

import untity.SysUtil;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

/**
 * @description
 * @auther: CDHONG.IT
 * @date: 2019/10/22-9:11
 **/
@WebServlet("/verifyCodeImg")
public class VerifyCodeImg extends HttpServlet {

    private static final int WIDTH = 140;//设置验证码图片宽度
    private static final int HEIGHT = 45;//设置验证码图片高度
    private static final int RAND_CHAR_SIZE = 4;//设置验证码长度

    //验证码的字符库
    private static final String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    //通过随机数取字符库中的字符组合成4位验证码
    private static Random random = new Random();

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建画布
        BufferedImage bufferedImage = new BufferedImage(WIDTH+10, HEIGHT+20, BufferedImage.TYPE_INT_RGB);
        //获得画笔
        Graphics2D graphics = (Graphics2D)(bufferedImage.getGraphics());
        //填充背景颜色
        graphics.fillRect(0, 0, WIDTH+10, HEIGHT+20);
        //设置画笔颜色随机生成
        graphics.setColor(getRandColor());
        //声明变量存储生成的验证码
        StringBuilder code = new StringBuilder();
        //随机生成4个字符
        for (int i = 1; i <= RAND_CHAR_SIZE; i++) {
            graphics.setFont(new Font("华文新魏", Font.BOLD, 45));  //设置字体
            graphics.setColor(getRandColor());    //随机生成颜色
            //随机生成字符索引
            String cha = String.valueOf(str.charAt(random.nextInt(str.length())));
            //将随机生成的字符写入画布
            graphics.drawString(cha,WIDTH/5*i-20, random.nextInt((HEIGHT+8)/2) + (HEIGHT+8)/2);
            HttpSession session = req.getSession();
            code.append(cha);
        }

        System.out.println("验证码:"+code);
        //把生成的验证码存放在Session中
        req.getSession().setAttribute(SysUtil.VERIFY_CODE,code.toString());

        //画干扰线:
        graphics.setColor(getRandColor()); //随机生成画笔颜色
        graphics.setStroke(new BasicStroke(3.0f));
        //画干扰线到画布中
        graphics.drawLine(0, random.nextInt(HEIGHT), WIDTH, random.nextInt(HEIGHT));
        graphics.dispose();  //资源销毁

        //设置响应头通知浏览器以图片的形式打开
        resp.setContentType("image/jpeg");

        //设置响应头控制浏览器不要缓存
        resp.setDateHeader("expries", -1);
        resp.setHeader("Cache-Control", "no-cache");
        resp.setHeader("Pragma", "no-cache");

        //将画布写到浏览器中
        ImageIO.write(bufferedImage, "JPEG", resp.getOutputStream());
    }

    //生成随机颜色
    private Color getRandColor() {
        return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));
    }

}
       <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

7、例

package web;

import entity.ResponseEntity;
import entity.vo.User;
import mapper.RegisterMapper;
import service.RegisterService;
import untity.GsonUtil;
import untity.SysUtil;

import javax.servlet.annotation.WebServlet;
import java.util.List;
import java.util.Map;

/**
 * @Auther: mu_zi
 * @Date: 2019/10/31 10:04
 * @Description:
 */
@WebServlet("/register/*")
public class RegisterServlet extends  BaseServlet{


    private RegisterService registerService = new RegisterService();
  //图片验证
    public ResponseEntity checkedImgCode(){
        //从后端获取验证码,自动生成的验证码
        String  code =   request.getParameter("imgCode");
        //提取Session中的验证码,用户输入的验证码
        String code1 = (String) session.getAttribute(SysUtil.VERIFY_CODE);
        //忽略验证码的大小写进行判断
        System.out.println(code +"-->"+code1);
        if (!code.equalsIgnoreCase(code1)){
            return ResponseEntity.error("验证码输入有误");
        }
        return  ResponseEntity.ok();
    }

    //发短信
    public ResponseEntity sendSms(){
        //获取手机号
        String tel = request.getParameter("tel");
        //随机生成4位数的验证码
        String code = String.valueOf(new Double(Math.random()*10000).intValue());
        //调用发短信的帮助类
        String resultStr = SendSms.sendSms(tel, code);

        Map<String,String> resultMap = GsonUtil.fromJson(resultStr, Map.class);
        if(resultMap.get("Message").equals("OK")){
            session.setAttribute(SysUtil.TEL_CODE,code);
            return ResponseEntity.ok("短信发送成功,请注意查收");
        }
        return ResponseEntity.error("短信发送失败,60秒后重试");
    }

    //判断手机验证码是否正确
    public  ResponseEntity checkSms(){
        //获取前端传输的数据
        String telCode = request.getParameter("sms");
        //获取存储在Session中的手机验证码
        String code = (String) session.getAttribute(SysUtil.TEL_CODE);
        System.out.println(telCode+"-->"+code);
        //判断验证码是否相同
        if (telCode.equals(code)){
            return ResponseEntity.ok();
        }
        return ResponseEntity.error("输入的验证码不正确");
    }

    //手机号注册
    public ResponseEntity insert(){
        String tel = request.getParameter("tel");
        String nickName = request.getParameter("nickName");
        String pwd = request.getParameter("pwd");
        return registerService.regiter(tel,nickName,pwd);
    }

}

8、静态数据存储工具 eg

package untity;

/**
 * @description
 * @auther: CDHONG.IT
 * @date: 2019/10/22-9:15
 **/
public class SysUtil {

    public static final String VERIFY_CODE = "verifyCode";  //验证码
    public static final String CURRENT_USER = "currentUser"; //登录存储的用户
    public static final String EMAIL_TOKEN = "emailToken"; //邮箱激活码
    public static final String TEL_CODE = "telCode"; //手机验证 ;

    public interface UserStatus{
        int ENABLED = 0;  //启用
        int DISABELD = 1; //禁用
    }

    public interface Role{
        int  minus = -1; //为管理员
        int zero = 0;//普通用户
        int integer= 1; //版主

    }

}
原文地址:https://www.cnblogs.com/chahune/p/13213073.html