开源工具使用-Thumbnailator-penggle验证码-multipart

前言:内容基本是视频笔记,偶尔会加些个人补充,仅作为复习巩固用途。如有错误,请指出,谢谢。
提示:后续更深理解在补充

前序、使用过程出现的问题

注意:发现问题解决问题比学习新知识更重要

1、jackson使用问题:mapper.readValue()将JSON字符串转反序列化为对象失败或异常

参考博客:jackson使用问题
问题根源:
1、转化目标实体类的属性要与被转JSON字符串总的字段 一 一对应!字符串里可以少字段,但绝对不能多字段。
2、出现未匹配上的原因可能是属性名写错了
3、问题代码,mapper.readValue(shopStr, Shop.class)忘了返回对象了,卧槽卧槽

    String shopStr = HttpServletRequestUtil.getString(request, "shopStr");
    ObjectMapper mapper = new ObjectMapper();
    // 拿到shop
    Shop shop = null;
    try {
    	mapper.readValue(shopStr, Shop.class);// 问题地方
        //shop = mapper.readValue(shopStr, Shop.class);
    } catch (Exception e) {
        modelMap.put("success", false);
        modelMap.put("errMsg", e.getMessage());
    }

一、Thumbnailator简单使用

Thumbnailator在github上面的地址
参考博客:
1、Thumbnailator使用简介
2、Java使用google开源工具Thumbnailator实现图片压缩

1、pom.xml导入依赖

<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.8</version>
</dependency>

2、利用工具类使用Thumbnailator

//待补充

二、penggle之kaptcha验证码简单使用

1、pom.xml导入依赖

<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

2、web.xml配置servlet生成验证码

    <!--利用servlet生成验证码-->
    <servlet>
        <servlet-name>Kaptcha</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
        <!-- 是否有边框 -->
        <init-param>
            <param-name>kaptcha.border</param-name>
            <param-value>no</param-value>
        </init-param>
        <!-- 字体颜色 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.color</param-name>
            <param-value>red</param-value>
        </init-param>
        <!-- 图片宽度 -->
        <init-param>
            <param-name>kaptcha.image.width</param-name>
            <param-value>135</param-value>
        </init-param>
        <!-- 使用哪些字符生成验证码 -->
        <init-param>
            <param-name>kaptcha.textproducer.char.string</param-name>
            <param-value>ACDEFHKPRSTWX345679</param-value>
        </init-param>
        <!-- 图片高度 -->
        <init-param>
            <param-name>kaptcha.image.height</param-name>
            <param-value>50</param-value>
        </init-param>
        <!-- 字体大小 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.size</param-name>
            <param-value>43</param-value>
        </init-param>
        <!-- 干扰线的颜色 -->
        <init-param>
            <param-name>kaptcha.noise.color</param-name>
            <param-value>black</param-value>
        </init-param>
        <!-- 字符个数 -->
        <init-param>
            <param-name>kaptcha.textproducer.char.length</param-name>
            <param-value>4</param-value>
        </init-param>
        <!-- 字体 -->
        <init-param>
            <param-name>kaptcha.textproducer.font.names</param-name>
            <param-value>Arial</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Kaptcha</servlet-name>
        <url-pattern>/Kaptcha</url-pattern>
    </servlet-mapping>

3、前端的验证码部分,使用了jQuery WeUI前端框架,但不影响理解

html代码:
    <!--验证码-->
    <div class="weui-cell weui-cell_vcode">
        <div class="weui-cell__hd">
            <label class="weui-label">验证码</label>
        </div>
        <div class="weui-cell__bd">
            <input class="weui-input" type="text" id="j-kaptcha" placeholder="请输入验证码">
        </div>
        <div class="weui-cell__bd" >
            <img class="weui-vcode-img" id="kaptcha" onclick="changeVerifyCode()" src="/Kaptcha">
        </div>
        <div class="weui-cell__ft" >
            <button class="weui-vcode-btn" onclick="changeVerifyCode()">点击更换验证码</button>
        </div>
    </div>
js代码:
function changeVerifyCode() {
    // 随机数目的是重新请求验证码,因为浏览器一般会缓存图片
    var kaptcha_url ="/Kaptcha?"+ Math.floor(Math.random()*1000);
    $("#kaptcha").attr("src", kaptcha_url);
};

4、后端的一个验证过程

注意:
1、关键在从session中取出保存的验证码,从提交的表单中取出输入的验证码,然后对比
2、Constants.KAPTCHA_SESSION_KEY这是一个类,保存了一些验证码信息
3、com.google.code.kaptcha.Constants 类源码

package com.google.code.kaptcha;

public class Constants {
    public static final String KAPTCHA_SESSION_KEY = "KAPTCHA_SESSION_KEY";
    public static final String KAPTCHA_SESSION_DATE = "KAPTCHA_SESSION_DATE";
    public static final String KAPTCHA_SESSION_CONFIG_KEY = "kaptcha.session.key";
    public static final String KAPTCHA_SESSION_CONFIG_DATE = "kaptcha.session.date";
    public static final String KAPTCHA_BORDER = "kaptcha.border";
    public static final String KAPTCHA_BORDER_COLOR = "kaptcha.border.color";
    public static final String KAPTCHA_BORDER_THICKNESS = "kaptcha.border.thickness";
    public static final String KAPTCHA_NOISE_COLOR = "kaptcha.noise.color";
    public static final String KAPTCHA_NOISE_IMPL = "kaptcha.noise.impl";
    public static final String KAPTCHA_OBSCURIFICATOR_IMPL = "kaptcha.obscurificator.impl";
    public static final String KAPTCHA_PRODUCER_IMPL = "kaptcha.producer.impl";
    public static final String KAPTCHA_TEXTPRODUCER_IMPL = "kaptcha.textproducer.impl";
    public static final String KAPTCHA_TEXTPRODUCER_CHAR_STRING = "kaptcha.textproducer.char.string";
    public static final String KAPTCHA_TEXTPRODUCER_CHAR_LENGTH = "kaptcha.textproducer.char.length";
    public static final String KAPTCHA_TEXTPRODUCER_FONT_NAMES = "kaptcha.textproducer.font.names";
    public static final String KAPTCHA_TEXTPRODUCER_FONT_COLOR = "kaptcha.textproducer.font.color";
    public static final String KAPTCHA_TEXTPRODUCER_FONT_SIZE = "kaptcha.textproducer.font.size";
    public static final String KAPTCHA_TEXTPRODUCER_CHAR_SPACE = "kaptcha.textproducer.char.space";
    public static final String KAPTCHA_WORDRENDERER_IMPL = "kaptcha.word.impl";
    public static final String KAPTCHA_BACKGROUND_IMPL = "kaptcha.background.impl";
    public static final String KAPTCHA_BACKGROUND_CLR_FROM = "kaptcha.background.clear.from";
    public static final String KAPTCHA_BACKGROUND_CLR_TO = "kaptcha.background.clear.to";
    public static final String KAPTCHA_IMAGE_WIDTH = "kaptcha.image.width";
    public static final String KAPTCHA_IMAGE_HEIGHT = "kaptcha.image.height";

    public Constants() {
    }
}

辅助验证工具类,verifyCodeActual 是从提交的到后台的表单中取到的

public class CodeUtil {
    public static boolean checkVerifyCode(HttpServletRequest request){
        String verifyCodeExpected = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
        String verifyCodeActual = HttpServletRequestUtil.getString(request, "verifyCodeActual");
        if(verifyCodeActual == null || verifyCodeActual.equals(verifyCodeExpected)){
            return false;
        }
        return true;
    }
}

/**
 * 工具类,从HttpServletRequest中根据key取出值
 */
public class HttpServletRequestUtil {
    public static String getString(HttpServletRequest request, String key){
        try{
            String result = request.getParameter(key);
            if(result != null){
                // 这个是去除字符串前后的空格
                result.trim();
            }
            if("".equals(result)){
                result = null;
            }
            return result;
        }catch (Exception e){
            return null;
        }
    }
    // 其他取整数,长整型,double可以自己定义
}

三、multipart file upload简单使用

注意:
这个就是为了解析前端上传formData格式,否则后端request里面拿不到表单文件,出现null

1、pom.xml导入依赖

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>

2、spring-web.xml配置文件上传解析器

	<!-- 文件上传解析器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8"></property>
		<!-- 1024 * 1024 * 20 = 20M -->
		<property name="maxUploadSize" value="20971520"></property>
		<property name="maxInMemorySize" value="20971520"></property>
	</bean>

controller中java部分代码,用到了commonsMultipartResolver
注意:这里commonsMultipartResolver 不仅仅是用到了上传文件,而且最重要是解析整个formData表单

// shopImg 表示上传的图片
   CommonsMultipartFile shopImg = null;
   CommonsMultipartResolver commonsMultipartResolver =
           new CommonsMultipartResolver(request.getSession().getServletContext());
   if(commonsMultipartResolver.isMultipart(request)){
       MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
       shopImg = (CommonsMultipartFile) multipartHttpServletRequest.getFile("shopImg");
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值