本文共 5757 字,大约阅读时间需要 19 分钟。
我们模拟一个简单的登录界面,如果登录成功则跳转到success.jsp,若失败则转发到log.jsp界面并显示错误信息
案例代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>My JSP 'log.jsp' starting page <% String error = (String)request.getAttribute("error"); if(error != null) { %><%=error%>
<% } %>
package com.servlet.www;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 LogServlet 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 { request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); String rcode = request.getParameter("rcode"); String s = (String)request.getSession().getAttribute("rcode"); if("weijinhao".equals(username)) { if("123456".equals(password)) { if(s.equals(rcode)) { HttpSession session = request.getSession(); session.setAttribute("username",username); response.setStatus(302); response.setHeader("location", response.encodeURL("/day_11-2/jsp/success.jsp")); } else { request.setAttribute("error", "验证码错误"); request.getRequestDispatcher(response.encodeURL("/jsp/log.jsp")).forward(request, response); } } else { request.setAttribute("error", "密码错误"); request.getRequestDispatcher(response.encodeURL("/jsp/log.jsp")).forward(request, response); } } else { request.setAttribute("error", "账户名错误"); request.getRequestDispatcher(response.encodeURL("/jsp/log.jsp")).forward(request, response); } }}
package com.servlet.www;import java.awt.image.BufferedImage;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;import cn.itcast.vcode.utils.VerifyCode;public class CreateImageTest extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { VerifyCode vc = new VerifyCode();//我们使用这个对象来在内存中划出我们想要的验证码 BufferedImage bi = vc.getImage();//获得验证码 String rcode = vc.getText();//得到验证码的字符串表示 rcode = rcode.toLowerCase();//应为我们输入的验证码都是不区分大小写的所以我们全部转化成小写的 HttpSession s = request.getSession();//我们使用session来实现属性在多个servlet中的传递 s.setAttribute("rcode",rcode); VerifyCode.output(bi, response.getOutputStream());//输出验证码到请求的位置,因为是图片所以我们输出的是字节流 }}
package cn.itcast.vcode.utils;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;import java.util.Random;import javax.imageio.ImageIO;public class VerifyCode { private int w = 70; private int h = 35; private Random r = new Random(); // {"宋体", "华文楷体", "黑体", "华文新魏", "华文隶书", "微软雅黑", "楷体_GB2312"} private String[] fontNames = {"宋体", "华文楷体", "黑体", "微软雅黑", "楷体_GB2312"}; private String codes = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ"; private Color bgColor = new Color(255, 255, 255); private String text ; private Color randomColor () { int red = r.nextInt(150); int green = r.nextInt(150); int blue = r.nextInt(150); 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 = 3; 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-5); } 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); }}
转载地址:http://luelf.baihongyu.com/