1、创建一个Maven项目

2、在pom.xml中引入相关依赖

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wisezone</groupId>
<artifactId>wdh_kaptcha</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>wdh_kaptcha Maven Webapp</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 定义spring的版本变量在dependency里面直接引用 -->
<spring.version>4.3.2.RELEASE</spring.version>
<slf4j.version>1.7.2</slf4j.version>
</properties> <dependencies>
<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- web开发要有servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency> <!-- 日志打印相关的jar -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency> 44 <!-- 验证码的生成 -->
45 <dependency>
46 <groupId>com.github.axet</groupId>
47 <artifactId>kaptcha</artifactId>
48 <version>0.0.9</version>
49 </dependency>
</dependencies>
<build>
<finalName>wdh_kaptcha</finalName>
<!-- 资源文件的设置 -->
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- 是否替换资源中的属性 -->
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<!-- compiler plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.1.v20140609</version>
</plugin>
</plugins>
</build>
</project>

3、启动WEB容器要在web.xml中配置前端控制器(DispatcherServlet)

 <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:*.xml</param-value>
</init-param>
<!-- 表示启动容器时初始化该Servlet -->
<load-on-startup>1</load-on-startup> </servlet> <servlet-mapping>
<servlet-name>appServlet</servlet-name>
<!-- 这是拦截请求, /代表拦截所有请求, 也可以是.html或者.action这类的 -->
<url-pattern>/</url-pattern>
</servlet-mapping> <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>
</web-app>

4、src/main/resources中配置相关信息

a、log4j.properties

 log4j.rootLogger=DEBUG, Console  

 #Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

b、servlet-context.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 扫描package方便注解依赖注入-->
<context:component-scan base-package="com.wisezone" /> 13 <!--图片验证码配置 -->
14 <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
15 <property name="config">
16 <bean class="com.google.code.kaptcha.util.Config">
17 <constructor-arg>
18 <props>
19 <prop key="kaptcha.border">yes</prop><!--是否有边框 -->
20 <prop key="kaptcha.border.color">105,179,90</prop><!--设置边框颜色 -->
21 <prop key="kaptcha.textproducer.font.color">green</prop><!--验证码文本字符颜色 默认为Color.BLACK -->
22 <prop key="kaptcha.session.key">code</prop><!--验证码 -->
23 <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop><!--设置字体样式 -->
24 <prop key="kaptcha.border.thickness"></prop><!--边框粗细度 默认为1 -->
25 <prop key="kaptcha.producer.impl"></prop><!--验证码生成器 默认为DefaultKaptcha -->
26 <prop key="kaptcha.textproducer.impl"></prop><!-- 验证码文本生成器 默认为DefaultTextCreator -->
27 <prop key="kaptcha.textproducer.char.string"></prop><!--验证码文本字符内容范围 默认为abcde2345678gfynmnpwx -->
28 <prop key="kaptcha.textproducer.char.length">4</prop><!-- 验证码文本字符长度 默认为5 -->
29 <prop key="kaptcha.textproducer.font.size">50</prop><!--验证码文本字符大小 默认为40 -->
30 <prop key="kaptcha.textproducer.char.space">6</prop> <!--验证码文本字符间距 默认为2 -->
31 <prop key="kaptcha.image.width">200</prop> <!--验证码图片宽度 默认为200 -->
32 <prop key="kaptcha.image.height">60</prop> <!--验证码图片高度 默认为40 -->
33 </props>
34 </constructor-arg>
35 </bean>
36 </property>
37 </bean> </beans>

5、Demo演示

KaptchaController.java

 package com.wisezone.kaptcha;

 import java.awt.image.BufferedImage;

 import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer; @Controller
@RequestMapping("kaptcha")
public class KaptchaController { @Autowired
private Producer captchaProducer; @RequestMapping("getKaptchaImage")
public void getKaptchaImage(HttpServletRequest request,
HttpServletResponse response) throws Exception { response.setDateHeader("Expires", 0); // Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
// return a jpeg
response.setContentType("image/jpeg");
// create the text for the image
String capText = captchaProducer.createText();
// store the text in the session
request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
// create the image with the text
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
// write the data out
ImageIO.write(bi, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
}
}

6、启动容器查看结果:

浏览器:http://localhost:8080/kaptcha/getKaptchaImage

最新文章

  1. C#操作XML,如何获取指定节点值?
  2. 【C#】线程协作式取消
  3. 开放-封闭原则(OCP)
  4. UVa 10870 (矩阵快速幂) Recurrences
  5. 正则表达式的秘籍-b
  6. javax.servlet.ServletException: Servlet execution threw an exception 异常解决之一
  7. C++[类设计] ini配置文件读写类config
  8. IOS多线程加锁
  9. linux配置使用外部smtp发送邮件
  10. 编译安装 Nginx1.12.1
  11. win7 wifi热点设置
  12. conda命令简单使用
  13. quart源码阅读(一)
  14. 一次项目实践中DBCP数据库连接池性能优化
  15. vim 如何与外界粘贴复制
  16. 最新的裸机联想笔记本装win7系统/SSD(固态硬盘)上安装win7系统/联想K4450A i7装win7系统
  17. 代码这样写更优雅(Python版)
  18. rails下mysql出错问题mysql_api,blog/text
  19. 使用Guava retryer优雅的实现接口重试机制
  20. HBase中的TTL与MinVersion的关系

热门文章

  1. api响应类
  2. ZOJ 3961 Let's Chat 【水】
  3. [POI2009]Wie
  4. jquery click()方法模拟点击事件对a标签不生效
  5. 大话设计模式之PHP篇 - 策略模式
  6. python装饰器实现HTTP请求耗时和入参返回日志记录
  7. C++逗号表达式
  8. linux运维面试题1
  9. python统计代码行数
  10. Efficient Vector Representation for Documents through Corruption-by Minmin Chen阅读