个人常用的工具

系列文章目录

常用工具总结,可能不全,这是博主使用过得。如果有啥错误,请指教,不能直接复制粘贴使用,需要注意自己的命名等情况,核心代码是一样的。请勿喷。



注意:项目所需jar包的地址,需要自取。

链接: https://pan.baidu.com/s/1KI_MAwtjpA7QjOshgKVFSA 提取码: p12c

一、Java的工具

1、通过传递的全包名路径,加载对应包下的所有类,变成存储字节码对象(class对象)的set集合的的工具类

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class PakegeToClassTools {

    public static Set<Class<?>> getClasses(String pack) {

        // 第一个class类的集合
        Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
        // 是否循环迭代
        boolean recursive = true;
        // 获取包的名字 并进行替换
        String packageName = pack;
        String packageDirName = packageName.replace('.', '/');
        // 定义一个枚举的集合 并进行循环来处理这个目录下的things
        Enumeration<URL> dirs;
        try {
            dirs = Thread.currentThread().getContextClassLoader().getResources(packageDirName);
            // 循环迭代下去
            while (dirs.hasMoreElements()) {
                // 获取下一个元素
                URL url = dirs.nextElement();
                // 得到协议的名称
                String protocol = url.getProtocol();
                // 如果是以文件的形式保存在服务器上
                if ("file".equals(protocol)) {
                    // 获取包的物理路径
                    String filePath = URLDecoder.decode(url.getFile(), "UTF-8");
                    // 以文件的方式扫描整个包下的文件 并添加到集合中
                    findClassesInPackageByFile(packageName, filePath, recursive, classes);
                } else if ("jar".equals(protocol)) {
                    // 如果是jar包文件
                    // 定义一个JarFile
                    System.out.println("jar类型的扫描");
                    JarFile jar;
                    try {
                        // 获取jar
                        jar = ((JarURLConnection) url.openConnection()).getJarFile();
                        // 从此jar包 得到一个枚举类
                        Enumeration<JarEntry> entries = jar.entries();
                        findClassesInPackageByJar(packageName, entries, packageDirName, recursive, classes);
                    } catch (IOException e) {
                        // log.error("在扫描用户定义视图时从jar包获取文件出错");
                        e.printStackTrace();
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return classes;
    }

    private static void findClassesInPackageByJar(String packageName, Enumeration<JarEntry> entries, String packageDirName, final boolean recursive, Set<Class<?>> classes) {
        // 同样的进行循环迭代
        while (entries.hasMoreElements()) {
            // 获取jar里的一个实体 可以是目录 和一些jar包里的其他文件 如META-INF等文件
            JarEntry entry = entries.nextElement();
            String name = entry.getName();
            // 如果是以/开头的
            if (name.charAt(0) == '/') {
                // 获取后面的字符串
                name = name.substring(1);
            }
            // 如果前半部分和定义的包名相同
            if (name.startsWith(packageDirName)) {
                int idx = name.lastIndexOf('/');
                // 如果以"/"结尾 是一个包
                if (idx != -1) {
                    // 获取包名 把"/"替换成"."
                    packageName = name.substring(0, idx).replace('/', '.');
                }
                // 如果可以迭代下去 并且是一个包
                if ((idx != -1) || recursive) {
                    // 如果是一个.class文件 而且不是目录
                    if (name.endsWith(".class") && !entry.isDirectory()) {
                        // 去掉后面的".class" 获取真正的类名
                        String className = name.substring(packageName.length() + 1, name.length() - 6);
                        try {
                            // 添加到classes
                            classes.add(Class.forName(packageName + '.' + className));
                        } catch (ClassNotFoundException e) {
                            // .error("添加用户自定义视图类错误 找不到此类的.class文件");
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }

    private static void findClassesInPackageByFile(String packageName, String packagePath, final boolean recursive, Set<Class<?>> classes) {
        // 获取此包的目录 建立一个File
        File dir = new File(packagePath);
        // 如果不存在或者 也不是目录就直接返回
        if (!dir.exists() || !dir.isDirectory()) {
            // log.warn("用户定义包名 " + packageName + " 下没有任何文件");
            return;
        }
        // 如果存在 就获取包下的所有文件 包括目录
        File[] dirfiles = dir.listFiles(new FileFilter() {
            // 自定义过滤规则 如果可以循环(包含子目录) 或则是以.class结尾的文件(编译好的java类文件)
            @Override
            public boolean accept(File file) {
                return (recursive && file.isDirectory()) || (file.getName().endsWith(".class"));
            }
        });
        // 循环所有文件
        for (File file : dirfiles) {
            // 如果是目录 则继续扫描
            if (file.isDirectory()) {
                findClassesInPackageByFile(packageName + "." + file.getName(), file.getAbsolutePath(), recursive, classes);
            } else {
                // 如果是java类文件 去掉后面的.class 只留下类名
                String className = file.getName().substring(0, file.getName().length() - 6);
                try {
                    // 添加到集合中去
                    // classes.add(Class.forName(packageName + '.' +
                    // className));
                    // 经过回复同学的提醒,这里用forName有一些不好,会触发static方法,没有使用classLoader的load干净
                    classes.add(Thread.currentThread().getContextClassLoader().loadClass(packageName + '.' + className));
                } catch (ClassNotFoundException e) {
                    // log.error("添加用户自定义视图类错误 找不到此类的.class文件");
                    e.printStackTrace();
                }
            }
        }
    }

}

二、JavaWeb的工具

1、验证码的生成至页面

  • 验证码工具类

    /**
    	需要导入 commons-io-1.4.jar  io传入包
    	下载地址:
    */
    public class VerifyCode {
    	//验证码的宽度
    	private int w = 70;
    	//验证码的高度
    	private int h = 35;
     	private Random r = new Random();
     	//随机字体
    	private String[] fontNames  = {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"};
     	//随机字符
    	private String codes  = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
     	//背景颜色
    	private Color bgColor  = new Color(240, 240, 240);
    	//记录生成的验证码字符
    	private String text ;
    	/*
    		生成随机颜色
    	*/
    	private Color randomColor () {
    		int red = r.nextInt(256);
    		int green = r.nextInt(256);
    		int blue = r.nextInt(256);
    		return new Color(red, green, blue);
    	}
    	/*
    		生成随机字体
    	*/
    	private Font randomFont () {
    		int index = r.nextInt(fontNames.length);
    		String fontName = fontNames[index];
    		int style = r.nextInt(4);
    		int size = r.nextInt(5) + 24; 
    		return new Font(fontName, style, size);
    	}
    	/*
    		生成随机的干扰线条
    	*/
    	private void drawLine (BufferedImage image) {
    		int num  = 5;
    		Graphics2D g2 = (Graphics2D)image.getGraphics();
    		for(int i = 0; i < num; i++) {
    			int x1 = r.nextInt(w);
    			int y1 = r.nextInt(h);
    			int x2 = r.nextInt(w);
    			int y2 = r.nextInt(h); 
    			g2.setStroke(new BasicStroke(1.5F)); 
    			g2.setColor(Color.BLUE); 
    			g2.drawLine(x1, y1, x2, y2);
    		}
    	}
    	/*
    		生成随机的字符
    	*/
    	private char randomChar () {
    		int index = r.nextInt(codes.length());
    		return codes.charAt(index);
    	}
    	/*
    		创建图片 但未生成验证码
    	*/
    	private BufferedImage createImage () {
    		BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); 
    		Graphics2D g2 = (Graphics2D)image.getGraphics(); 
    		g2.setColor(this.bgColor);
    		g2.fillRect(0, 0, w, h);
     		return image;
    	}
    	/*
    		创建图片 写入验证码
    	*/
    	public BufferedImage getImage () {
    		BufferedImage image = createImage(); 
    		Graphics2D g2 = (Graphics2D)image.getGraphics();
    		StringBuilder sb = new StringBuilder();
    		// 向图片中画4个字符
    		for(int i = 0; i < 4; i++)  {
    			//产生随机字符
    			String s = randomChar() + ""; 
    			sb.append(s); 
    			float x = i * 1.0F * w / 4; 
    			//设置字体
    			g2.setFont(randomFont()); 
    			//设置字体颜色
    			g2.setColor(randomColor()); 
    			//设置字符的位置
    			g2.drawString(s, x, h); 
    		}
    		//存储验证码的字符
    		this.text = sb.toString(); 
    		//画干扰线条
    		drawLine(image); 
    		return image;		
    	}
    	/*
    		获取验证码的上的字符
    	*/
    	public String getText () {
    		return text;
    	}
    	
    	/*
    		生成验证码到输出流中
    	*/
    	public static void output (BufferedImage image, OutputStream out) 
    				throws IOException {
    		ImageIO.write(image, "JPEG", out);
    	}
    }
    
  • 将验证码响应给前台页面的servlet

    //如果未是使用注解 需要配置 web.xml
    @WebServlet("/verifyCodeServlet")
    public class VerifyCodeServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request,response);
        }
    	
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            ServletOutputStream outputStream = response.getOutputStream();
            VerifyCode verifyCode = new VerifyCode();
            //获取验证码图片
            BufferedImage image = verifyCode.getImage();
            //存储到session域中,用户登陆或注册时的验证
            request.getSession().setAttribute("verifyCodeText",verifyCode.getText());
            //以流的方式响应给浏览器
            VerifyCode.output(image,outputStream);
        }
    }
    

    web.xml配置如下:(servlet-class中的得换成自己的包名)

     <servlet>
        	<servlet-name>verifyCodeServlet</servlet-name>
        	<servlet-class>com.shopping.servlet.VerifyCodeServlet</servlet-class>
     </servlet>
     <servlet-mapping>
      		<servlet-name>verifyCodeServlet</servlet-name>
      	    <url-pattern>/verifyCodeServlet</url-pattern>
     </servlet-mapping>
    
  • 前台刷新接收代码

    <a href="javascript:exchangeVerifyCode();" id="hrefVerifyCode1">
    	<img src="${pageContext.request.contextPath}/verifyCodeServlet" id="verifyCode">
    </a>
    <script type="text/javascript">
    		/*使用的是jq的方式 更改验证码  后面跟参数的原因是:动态改变参数值,防止缓存的存在,避免刷新不了验证码*/
    		function exchangeVerifyCode() { 
    			$("#verifyCode").attr('src', "${pageContext.request.contextPath}/verifyCodeServlet?yyy=" + new Date().getTime());
    		}
    </<script>
    
  • 效果如下:
    -

2、省级联动

  • 前提注意:该功能,只写入了前端传递更改的代码,后台数据库如何查询未写出(数据库设计不同或者有的用xml文件等表示地址),且返回的字符必须为json能使用。城市下拉框的内容会在进入页面时,就已经显示完成,需要提前查找处来(Java web的处理方式,写一个拦截器拦截当前页面,查询出城市,渲染到页面上即可)

  • jsp代码(只写入关键代码,得导入 jstl.jar,使用jstl表达式)

    <!--引入jstl标签-->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
       <div class="addr_item">
        <span class="label_n"><span class="c_red">*</span>所在地区:</span>
        <select class="city" name="province" id="province">
            <option value="0">请选择省份</option>
            <%--刚进这个页面时,需要显示所有的省份城市--%>
            <c:forEach items="${provinces}" var="province">
                <option value="${province.id}">${province.cityName}</option>
            </c:forEach>
        </select>
        <select class="city" name="city" id="city">
            <option value="0">请选择城市</option>
        </select>
        <select class="city" name="county" id="county">
            <option value="0">请选择区县</option>
        </select>
        <div class="addr_msg">
            <span id="error_statename"></span>
        </div>
    </div>
    <!--引入jq-->
    <script src="js/jquery-1.8.3.js" type="text/javascript" charset="utf-8"></script>
    <script>
    	
        //选中的省改变触发这个函数  改变城市的选项
        $("select[name='province']").change(
            function () {
            	//获取选中的 城市的下拉框的值
                var provinceId = $("#province").val();
                //发送ajax请求
                $.ajax({
                	//请求方式
                    type: "post",
                    //请求路径  该路径返回json串 渲染到页面上
                    url: "${pageContext.request.contextPath}/cityChangeServlet",
                    //告诉浏览器返回的是json串
                    dataType: "json",
                    //传递过去的参数为 省份的id  可根据省份的id查找对应的城市
                    data: {
                        "provinceId": provinceId
                    },
                    //请求成功处理的函数  data为返回的数据 也就是json串 
                    success: function (data) {
                        //首先清除掉城市下拉框和区县下拉框下的内容,保留第一个(防止城市区县一直叠加,如果不清除,选择一个省份后,在选另一个省份,会进行叠加,导致错误选项出现)
                        $("#city").find("option").not(":first").remove();
                        $("#county").find("option").not(":first").remove();
                        //循环遍历数据  渲染到城市的下拉框上
                        $.each(data,
                            function (name, value) {
                                $("#city").append(
                                    "<option value=" + value.id + ">" + value.cityName + "</option>");
                            });
                    }
                });
            });
        //选中的城市改变触发这个函数  改变区县的选项
        $("select[name='city']")
            .change(
                function () {
                    var cityId = $("#city").val();
                    $.ajax({
                        type: "post",
                        url: "${pageContext.request.contextPath}/countyChangeServlet",
                        dataType: "json",
                         //传递过去的参数为 城市的id  可根据城市的id查找对应的县区
                        data: {
                            "cityId": cityId
                        },
                        success: function (data) {
                            //首先清除掉区县下拉框下的内容,保留第一个(防止区县一直叠加,如果不清除,选择一个城市后,在选另一个城市,会进行叠加,导致错误选项出现) 
                            $("#county").find("option").not(":first").remove();
                            //循环遍历数据  渲染到城市的下拉框上
                            $.each(data,
                                function (name, value) {
                                    $("#county").append(
                                        "<option value=" + value.id + ">" + value.cityName + "</option>");
                                });
                        }
                    });
                });
    </script>
    
  • 效果
    在这里插入图片描述

3、将一个map转成一个bean对象。

  • 需要导入commons-beanutils-1.9.2.jar包。

  • 代码如下:

    /**
     * 将map转成实体类对象,要求:map封装的key 与 实体类的属性名必须一致
     * @param clasz  需要转成的对象class
     * @param map  存储的键值对
     * @param <T>  转成的对象
     * @return  返回bean对象
     */
    public class BeanUtilsDemo {
        public static <T> T beanMap(Class<T> clasz , Map map){
            T bean = null;
            try {
                 bean = clasz.newInstance();
                 BeanUtils.populate(bean,map);
                 return bean;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bean;
        }
    }
    
  • 测试代码,以Address实体类为例。

     <form id="address_from" method="post">
        <div class="new_addr">
            <div class="addr_item">
                <span class="label_n"><span class="c_red">*</span>收货人:</span>
                <input class="itxt" name="name" id="name" type="text">
            </div>
            <div class="addr_item">
                <div class="addr_item">
                    <span class="label_n"><span class="c_red">*</span>所在地区:</span>
                    <select class="city" name="province" id="province">
                        <option value="0">请选择省份</option>
                        <c:forEach items="${provinces}" var="province">
                            <option value="${province.id}">${province.cityName}</option>
                        </c:forEach>
                    </select>
                    <select class="city" name="city" id="city">
                        <option value="0">请选择城市</option>
                    </select>
                    <select class="city" name="county" id="county">
                        <option value="0">请选择区县</option>
                    </select>
                </div>
                <span class="label_n"><span class="c_red">*</span>详细地址:</span>
                <input placeholder="详细地址" name="address" class="itxt itxtaddr" id="address" type="text">
            </div>
            <div class="addr_item">
                <span class="label_n"><span class="c_red">*</span>手机号码:</span>
                <input placeholder="手机号码" name="telphone" class="itxt itxt_tel" id="telphone" type="text">
            </div>
            <div class="addr_item btn_item">
                <input type="submit" class="btn_addaddr" id="addresssubmit" value="添加">
            </div>
        </div>
    </form>
    
    //获取前端提交(post提交)的所有参数,封装成map,key为输入框的name属性的值,value为自己输入的值。
     Map<String, String[]> map = request.getParameterMap();
     //将封装的map对象转成bean对象。
     Address address = BeanUtilsDemo.beanMap(Address.class, map);
    
    public class Address {
        private String id;
        private String name;
        private String address;
        private String telphone;
        private User user;
    ...get()set()tosSring()等方法
    }
    
  • 效果如下:
    在这里插入图片描述

4、邮件的发送。

  • 导入mail.jar包。

  • 工具类代码。

    public class SendEmail {
        /**
         * 发送邮件
         * @param email  收件人的邮箱
         * @param request
         */
        public static void sendEmail(String email, HttpServletRequest request){
            //设置发送端的地址和密码
            String host ="自己的邮箱";
            //(一般需要登陆邮箱后,生成一个密文密码,各个邮箱生成不同,可自行查找)
            String password= "密码";
            //创建Properties 集合
            Properties properties = new Properties();
            //设置服务器主机名
            properties.setProperty("mail.host","smtp.qq.com");
            //设置需要验证
            properties.setProperty("mail.smtp.auth","true");
            //校验客户端的身份
            Authenticator auth = new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    //发件人  密码
                    return new PasswordAuthentication(host,password);
                }
            };
            //获取邮箱session会话
            Session session = Session.getDefaultInstance(properties, auth);
    
            //创建MimeMessage对象
            MimeMessage msg = new MimeMessage(session);
            //设置发信人地址、收信人地址、主题以及邮件正文
            try {
            	//设置发信人
                msg.setFrom(new InternetAddress(host));
                //设置收信人
                msg.addRecipients(Message.RecipientType.TO,email); 
                //设置抄送
                msg.addRecipients(Message.RecipientType.CC,host); 
                //设置单个暗关
                msg.addRecipients(Message.RecipientType.BCC,host);
    
    			//设置主题  自己设置
                msg.setSubject("书城管理注册激活邮件");
                //设置正文  自己写自己的正文内容
                msg.setContent("点击激活,即可注册完毕,<a href=http://localhost:8080"+request.getContextPath()+"/activateServlet>激活</a>,请在30分钟内点击,否则无法激活!!","text/html;charset=utf-8");
                Transport.send(msg); //发送邮件
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    }
    
  • 测试代码。

    //获取前端传递的参数
    String email = request.getParameter("email");
     //发送邮件
    SendEmail.sendEmail(email,request);
    
  • 效果图
    在这里插入图片描述

5、获取C3P0数据源的工具类。

  • 导入c3p0-0.9.1.2.jar、commons-collections-3.2.2.jar包。
  • C3P0Utils 工具类代码。
    public class C3P0Utils {
    	//创建数据源
    	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
    	/*
    		获取数据源的连接
    	*/
    	public static Connection getConnection() {
    		try {
    			return dataSource.getConnection();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	/*	
    		获取数据源
    	*/
    	public static DataSource getDataSource() {
    		return dataSource;
    	}
    	/*
    		关闭资源(用于更新、删除、插入操作时)
    	*/
    	public static void close(Connection con , Statement st ) {
    		if(st != null) {
    			try {
    				st.close() ;
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    
    		if(con != null) {
    			try {
    				con.close() ;
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    	/*
    		关闭资源(用于查找操作时)
    	*/
    	public static void close(Connection con , Statement st , ResultSet rs) {
    		if (rs!=null){
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		if(st != null) {
    			try {
    				st.close() ;
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    
    		if(con != null) {
    			try {
    				con.close() ;
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    }
    

二、js的工具

1.validate.js 各种输入框的验证工具

  • 前提:HTML 必须先引入jquery。如:
    <script src="js/jquery-2.1.1.min.js"></script>
    <script src="js/jquery.validate.min.js"></script>
    
  • 以表单提交为例。
      <form id="register_form" method="post">
        <div class="item">
            <input placeholder="请输入用户名" class="itxt" name="username" id="username" type="text">
        </div>
    
        <div class="item item2">
            <input placeholder="请输入密码" class="itxt" name="password" id="password"
            type="password">
        </div>
    
        <div class="item item2">
            <input placeholder="确认密码" class="itxt" name="truePassword" id="truePassword"
            type="password">
        </div>
    
        <div class="item item2">
            <input class="itxt" username="sex" id="sex" type="radio" value="0" style="width: 20px;">&nbsp;&nbsp;&nbsp;
            <input class="itxt" username="sex" id="sex2" type="radio" value="1" style="width: 20px;"></div>
    
        <div class="item">
            <input placeholder="请输入手机号码" class="itxt" name="telephone" id="telephone" type="text">
        </div>
    
        <div class="item">
            <input placeholder="请输入邮箱" class="itxt" name="email" id="email" type="text">
        </div>
    
        <div class="item items">
            <div style="display: block" id="verify">
                <input id="verifyCodeText" name="verifyCodeText" class="itxt itxt_yzm onfocustxt" username="mobile_code"
                       id="mobile_code" type="text">
    
                <a href="javascript:exchangeVerifyCode();" id="hrefVerifyCode1" style="margin-left: 18px;">
                    <img src="${pageContext.request.contextPath}/verifyCodeServlet" id="verifyCode">
                </a>
            </div>
            <div class="err_box">
                <div class="err_msg2 msg" style="display: none;" id="errorMsg"></div>
            </div>
        </div>
    
        <div class="item item5">
            <div class="login-btn">
                <input type="submit" id="registersubmit" value="立即注册">
            </div>
            <div class="agree">
                <input class="jdcheckbox" tabindex="8" name="agree" id="agree" type="checkbox">
                <label>同意快乐购<span><a href="" target="_blank">《用户服务协议》</a></span>条款</label>
            </div>
        </div>
    </form>
    <script src="js/jquery-2.1.1.min.js"></script>
    <script src="js/jquery.validate.min.js"></script>
    <script type="text/javascript">
    	// 单击验证码刷新  具体代码可见 验证码的生成至页面 章节
        function exchangeVerifyCode() {
            $("#verifyCode").attr('src', "${pageContext.request.contextPath}/verifyCodeServlet?yyy=" + new Date().getTime());
        }
    	//添加自定义的验证方式 
    	// 第一个参数: isMobile为验证的名称 第二个参数: function ()处理方式   第三个参数:提示消息
        $.validator.addMethod("isMobile", function (value, element) {
            var length = value.length;
            var mobile = /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$/;
            return this.optional(element) || (length == 11 && mobile.test(value));
        }, "请正确填写您的手机号码");
        $(function () {
        	//表单验证实现方式
            $("#register_form").validate({
            	//验证 如果改验证码出错  则会显示下面message对象中对应的消息
                rules: {
                	//验证输入框id为username 的输入框
                    username: {
                    	//验证输入必须存在  
                        required: true, 
                        //验证输入最小长度
                        minlength: 2,
                        //验证输入最大长度
                         maxlength: 6,
                         //发送ajax异步请求 验证用户名是否存在
                        remote: {
                        	//请求方式
                            type: "post",
                            //ajax请求的路径
                            url: "${pageContext.request.contextPath}/judgeServlet",
                            data: {
                            	//传送的参数
                                username: $("#username").value
                            }
                        }/* ajax调用后台功能*/
                    },
                   	//验证输入框id为password的输入框
                    password: {
                    	required: true,
                    	//验证输入长度在 6 - 20 之间
                     	rangelength: [6, 20]
                     },
                     //验证输入框id为truePassword的输入框
                    truePassword: {
                        // 验证输入 与id为password输入框的值相同
                    	equalTo: "#password"
                    },
                    //验证输入框id为email的输入框
                    email: {
                        required: true, 
                         // 验证输入 与是否是邮件的格式
                        email: true,
                         //发送ajax异步请求 验证邮箱是否存在
                        remote: {
                            type: "post", //请求的方式
                            url: "${pageContext.request.contextPath}/judgeServlet",  // 请求的url路径
                            data: { //传递的参数
                                email: $("#email").value
                            }
                        }/* ajax调用后台功能*/
                    },
                     //验证输入框id为telephone的输入框
                    telephone: {
                    	required: true,
                    	//验证输入是否是纯数字
                    	number: true,
                    	//使用自定义的验证方式 判断是否是正确的手机号码
                    	isMobile: true,
                    	rangelength: [11, 11]
                    },
                    //验证输入框id为verifyCodeText的输入框
                    verifyCodeText: {
                        required: true, rangelength: [4, 4],
                         //发送ajax异步请求 验证验证码是否正确
                        remote: {
                            type: "post", //请求的方式
                            url: "${pageContext.request.contextPath}/judgeServlet",  // 请求的url路径
                            data: { //传递的参数
                                verifyCodeText: $("#verifyCodeText").value
                            }
                        }/* ajax调用后台功能*/
                    },
                    sex: {required: true}
                },
                //验证未成功的提示消息   如果某项未成功对应的某项就会显示错误消息。如: username输入框未输入,则会显示 username输入框对应的required的提示消息
                messages: {
                    username: {
                        required: "用户名必填",
                        minlength: "用户名至少2位",
                        maxlength: "用户名不能超过6位",
                        remote: "用户已存在"
                    },
                    password: {
                        required: "密码必填",
                        digits: "密码必须是整数",
                        rangelength: "密码6位到20位"
                    },
                    truePassword: {
                        equalTo: "两次密码不一致"
                    },
                    email: {
                        required: "邮箱必填",
                        email: "邮箱格式错误",
                        remote: "邮箱已存在"
                    },
                    telephone: {
                        required: "手机号码必填",
                        number: "必须为数字",
                        rangelength: "手机号码长度为11位",
                        isMobile: "请输入正确的手机格式"
                    },
                    verifyCodeText: {
                        required: "验证码必填",
                        rangelength: "验证码长度为4位",
                        remote: "验证码错误"
                    },
                    sex: {
                        required: "请选择性别"
                    }
                },
            });
        });
    </script>
    
  • 效果如下
    在这里插入图片描述

三、SSM的工具

1、SSM项目的搭建。

  • 创建web项目。
     <!--字符编码过滤器-->
        <filter>
            <filter-name>CharacterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    
        <!--REST过滤器-->
        <filter>
            <filter-name>HiddenHttpMethodFilter</filter-name>
            <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>HiddenHttpMethodFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <!--实例化spring容器的监听器-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
        <!--springmvc前段控制器-->
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    

1、Mybatis常用全局配置。

四、SpringBoot的工具

五、SpringBoot的工具

1.引入库

2.读入数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值