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; //版主 } }