- 这是实现验证码的servlet
- package com;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.image.BufferedImage;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.imageio.ImageIO;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class CodeImageServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("image/jpeg");//输出的文本格式为jpg
- BufferedImage image=new BufferedImage(100, 30, BufferedImage.TYPE_INT_RGB);//BufferedImage他是一个类
- Graphics g=image.getGraphics();//绘图工具
- g.setColor(Color.white);
- g.fillRect(0, 0, 100, 30);
- String[] keys = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
- "A", "h", "C", "D", "E", "F", "我", "好" };
- String[] fonts = { "新宋体", "微软雅黑" };
- int[] sizes = { 18, 19, 20, 21, 22, 23, 24 };
- int[] sys = { 0, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALIC };
- String code = "";
- for(int i=0;i<4;i++){
- String c = keys[(int) (Math.random() * keys.length)];
- String font=fonts[(int)(Math.random()*fonts.length)];
- int size=sizes[(int)(Math.random()*sizes.length)];
- int sty=sys[(int)(Math.random()*sys.length)];
- int r1=(int)Math.random()*190;
- int g1=(int)Math.random()*190;
- int b1=(int)Math.random()*190;
- Color color=new Color(r1, g1, b1);
- g.setFont(new Font(font, sty, size));
- g.setColor(color);
- g.drawString(c, 5+(i*24), 28);
- code+=c;
- }
- HttpSession session=request.getSession();
- session.setAttribute("code", code);
- ImageIO.write(image, "jpeg", response.getOutputStream());
- }
- }
- 第一种登陆方法:(每次都要输入验证码)
- package com;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class LonginServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doPost(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html;charset=gbk");
- PrintWriter out = response.getWriter();
- String username=request.getParameter("username");
- String password=request.getParameter("password");
- String code=request.getParameter("code");
- String url="";
- if(username==null||username.trim().equalsIgnoreCase("")||
- password==null||password.trim().equalsIgnoreCase("")||code==null||code.trim().equalsIgnoreCase("")){
- url="index.jsp";
- }else{
- HttpSession session=request.getSession();
- Object obj=session.getAttribute("code");
- if(obj==null){
- url="index.jsp";
- }else{
- if(obj.equals(new String(code.trim().getBytes("iso-8859-1"),"GBK"))){
- if(username.equals("lisi")&&password.equals("123")){
- session.setAttribute("username", username);
- url="hyservlet";
- }else{
- url="index.jsp";
- }
- }else{
- url="index.jsp";
- }
- }
- }
- response.sendRedirect(url);
- }
- }
- 第二种:(只有当输错两次的时候才会要求输入验证码)
- package com;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.Hashtable;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- public class LoginServlet1 extends HttpServlet {
- private Hashtable table = new Hashtable();
- public void put(String ip) {//写一个put方法,这是把获得远程的ip访问写入table中
- Object obj1 = table.get(ip);
- Integer i = 0;
- if (obj1 != null) {
- i = Integer.parseInt(obj1.toString());//把获得的ip地址转换为int输出
- }
- table.put(ip, ++i);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- boolean flag = false;
- Object obj1 = table.get(request.getRemoteAddr());//request.getRemoteAddr()相当于ip
- if (obj1 == null) {
- flag = true;
- } else {
- int count = Integer.parseInt(obj1.toString());
- if (count < 2) {
- flag = true;
- }
- }
- String username = request.getParameter("username");
- String password = request.getParameter("password");
- String code = request.getParameter("code");
- String url = "";
- if (username == null || username.trim().equalsIgnoreCase("")
- || password == null || password.trim().equalsIgnoreCase("")) {
- url = "index.jsp";
- put(request.getRemoteAddr());
- } else {
- boolean state = false;
- if (flag == false) {
- if (code == null || code.trim().equalsIgnoreCase("")) {
- url = "index.jsp";
- put(request.getRemoteAddr());
- state = false;
- } else {
- HttpSession session = request.getSession();
- Object obj = session.getAttribute("code");
- if (obj == null) {
- url = "index.jsp";
- put(request.getRemoteAddr());
- } else {
- if (obj.equals(new String(code.trim().getBytes(
- "iso-8859-1"), "GBK"))) {
- state = true;
- } else {
- url = "index.jsp";
- put(request.getRemoteAddr());
- state = false;
- }
- }
- }
- } else {
- state = true;
- }
- if (state) {
- HttpSession session = request.getSession();
- if (username.equals("lisi") && password.equals("123")) {
- session.setAttribute("username", username);
- url = "hyservlet";
- } else {
- url = "index.jsp";
- put(request.getRemoteAddr());
- }
- }
- }
- response.sendRedirect(url);
- }
- }
- 简单的登陆页面:(要实现上面两种切换方法,可以在表单中修改action=“”)
- <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>登陆界面</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" >
- -->
- </head>
- <body>
- <form action="login1" method="post">
- username::<input type="text" name="username"><br/>
- password::<input type="text" name="password"><br/>
- code::<input type="text" name="code" ><img src1="codeservlet"><br/>
- <input type="submit" value="Login">
- </form>
- </body>
- </html>
- 一下是webxml里面的内容(这个没用,只是参考)
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- 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_2_5.xsd">
- <servlet>
- <servlet-name>LonginServlet</servlet-name>
- <servlet-class>com.LonginServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>HYServlet</servlet-name>
- <servlet-class>com.HYServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>CodeImageServlet</servlet-name>
- <servlet-class>com.CodeImageServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>LoginServlet</servlet-name>
- <servlet-class>com.LoginServlet</servlet-class>
- </servlet>
- <servlet>
- <servlet-name>LoginServlet1</servlet-name>
- <servlet-class>com.LoginServlet1</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>LonginServlet</servlet-name>
- <url-pattern>/login</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>HYServlet</servlet-name>
- <url-pattern>/hyservlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>CodeImageServlet</servlet-name>
- <url-pattern>/codeservlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>LoginServlet</servlet-name>
- <url-pattern>/Login</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>LoginServlet1</servlet-name>
- <url-pattern>/login1</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
- //该片段来自于http://www.codesnippet.cn/detail/2601201511636.html
来源: http://www.codesnippet.cn/detail/2601201511636.html