1.新建一个Zuo2WEB项目,并勾选上xml文件。在生成的项目中找到index.jsp文件。并在里面写入如下代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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" href="styles.css">
-->
<script type="text/javascript">
function changeCode()
{
var obj = document.getElementById("icode");
obj.src = "/Zuoye2/LoadIcode?" + Math.random();
}
</script>
</head>
<body>
<center>
<form action="/Zuoye2/doLogin" method="get">
<table>
<tr>
<td>登录名:</td><td><input type="text" name="loginName"/></td><td></td>
</tr>
<tr>
<td>密码:</td><td><input type="password" name="pwd"/></td><td></td>
</tr>
<tr>
<td>验证码:</td><td><input type="text" name="icode"/></td>
<td><img id="icode" onclick="changeCode();" alt="验证码" src="/Zuoye2/LoadIcode" />
<a href="javaScript:void(0);" onclick="changeCode();">看不清,换一张</a>
</td>
</tr>
</table>
<input type="submit" value="登录"/>
</form>
</center>
</body>
</html>
生成如下显示页面:
2.新建ser包,里面建一个doLogin Servlet文件,在里面编写函数,实现判断是否登录成功,代码如下:
package ser;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
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 entity.LoginUser;
public class doLogin extends HttpServlet {
public static HashMap<String, String> userTable= new HashMap<String, String>()
{
{put("熊大", "111");};
{put("熊二", "222");};
{put("张三", "333");};
{put("李四", "444");};
};
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String ucode = request.getParameter("icode");
HttpSession session = request.getSession();
String realCode = (String)session.getAttribute("code");
if(ucode.equals(realCode))//验证码正确
{
String userName = request.getParameter("loginName");
String pwd = request.getParameter("pwd");
for (Map.Entry<String, String> m : userTable.entrySet()) {
if(m.getKey().equals(userName) && m.getValue().equals(pwd))
{
LoginUser user = new LoginUser();
user.setLoginName(userName);
user.setPwd(pwd);
session.setAttribute("user", user);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("<h1>登录成功,"
+ "欢迎" + userName
+ "</BODY>");
out.println("</HTML>");
out.flush();
out.close();
return;
}
else {
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}
}
}
else {
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}
}
}
3、在同一包下创建LoadIcode Servlet文件,用来实现验证码的生成,代码如下:
package ser;
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.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoadIcode extends HttpServlet {
public static final int W = 100;
public static final int H = 30;
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");
ServletOutputStream out = response.getOutputStream();
BufferedImage img = new BufferedImage(W, H, BufferedImage.TYPE_INT_RGB);
Graphics g = img.getGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, W, H);
g.setColor(Color.BLUE);
g.drawRect(1, 1, W-2, H-2);
String icode = icodeBuilder(g,4);
request.getSession().setAttribute("code", icode);
System.out.println("realCode:" + icode);
drawLines(g, 5);
ImageIO.write(img, "jpg", out);
}
public static int getRandomNum(int max)
{
return (int)(Math.random()*max);
}
public static String icodeBuilder(Graphics g, int num)
{
String rs = "";
String codes = "0123456789abcdefghijklmnopqrstuvwxyz";
int p = 10;
for (int i = 0; i < num; i++) {
char c = codes.charAt(getRandomNum(codes.length()));
Color color = new Color(getRandomNum(256), getRandomNum(256), getRandomNum(256));
g.setColor(color);
g.setFont(new Font("宋体", Font.BOLD, 20));
g.drawString(c+"", p, 20);
p += 20;
rs = rs + c;
}
return rs;
}
public static void drawLines(Graphics g, int num)
{
for (int i = 0; i < num; i++) {
int x1 = getRandomNum(W);
int y1 = getRandomNum(H);
int x2 = getRandomNum(W);
int y2 = getRandomNum(H);
Color color = new Color(getRandomNum(256), getRandomNum(256), getRandomNum(256));
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
}
}
}
4、新建一个entity 包,里面建一个LoginUser的Java文件,用来传入输入的参数,代码如下:
package entity;
public class LoginUser {
private String loginName;
private String pwd;
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
5、最后启动tomcat,将会产生如下界面:
输入账号密码以及验证码: