




<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<%--
1.创建登录界面,用户名,密码,验证码,登录按钮
2.servlet生成验证码,存入session,并实现点击刷新
3.登录按钮跳转到servlet判断界面
4.先判断验证码是否正确,再判断用户名和密码
5.正确登录进入登录成功界面,不正确返回登录界面并清除session验证码防止重用
6.删除session对象,退出
--%>
<meta charset="utf-8">
<title>用户登录</title>
<style type="text/css">
span{
text-decoration:underline;
color:blue;
}
div{
color: red;
}
</style>
</head>
<script type="text/javascript">
window.onload=function(){
var i=0;
var yzm=document.getElementById("yzm");
yzm.onclick=function(){
i++;
yzm.src="/web_homework2/yzm?"+i;
}
var span=document.getElementById("span");
span.onclick=function(){
yzm.onclick();
}
}
</script>
<body>
<form action="/web_homework2/testServlet" method="post">
<input type="text" id="username" name="username" placeholder="你确定不输入yxy?"><br>
<input type="password" id="password" name="password" placeholder="你确定不输入123456?"><br>
<input type="text" name="yzm_text" placeholder="看清图片再输入"><br>
<img alt="这是一张验证码" src="/web_homework2/yzm" id="yzm"><span id="span">啥玩意啊!换一个</span><br>
<input type="submit" value="登录">
</form>
<div><%=request.getSession().getAttribute("yzm_error")==null?"":request.getSession().getAttribute("yzm_error")%></div>
<div><%=request.getSession().getAttribute("user_error")==null?"":request.getSession().getAttribute("user_error")%></div>
<%request.getSession().removeAttribute("yzm_error");
request.getSession().removeAttribute("user_error"); %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>欢迎登录</title>
</head>
<script type="text/javascript">
window.onload=function(){
var zx=document.getElementById("zx");
zx.onclick=function(){
alert("你要走了吗?");
document.getElementById("a").href="/web_homework2/exit";
}
}
</script>
<body>
<%
String name=(String)request.getSession().getAttribute("name");
%>
<p>欢迎登录,<%=name %>你是最酷的</p><br>
<a id="a" href="#"><input type="submit" value="注销" id="zx"></a>
</body>
</html>
package servlet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class yzm
*/
@WebServlet("/yzm")
public class yzm extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public yzm() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建图片对象
int width=100;
int height=50;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
//获取画笔
Graphics g = image.getGraphics();
//填充背景颜色
g.setColor(Color.PINK);
g.fillRect(0, 0, width, height);
//画蓝色边框
g.setColor(Color.BLUE);
g.drawRect(0, 0, width-1, height-1);
//生成随机字母数字,利用循环写入,同时保存session
String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random r = new Random();
g.setColor(Color.RED);//红色字
StringBuilder sBuilder=new StringBuilder();
for (int i = 0; i < 4; i++) {
int index = r.nextInt(str.length());
char ch = str.charAt(index);
g.drawString(ch+"", width/5+i*20, height/2);//调整位置
sBuilder.append(ch);
}
String yzm_session = sBuilder.toString();
request.getSession().setAttribute("yzm_session", yzm_session);
//画干扰线绿色
g.setColor(Color.GREEN);
for (int i = 0; i < 10; i++) {
int x1 = r.nextInt(width);
int x2 = r.nextInt(width);
int y1 = r.nextInt(height);
int y2 = r.nextInt(height);
g.drawLine(x1, y1, x2, y2);
}
//输出图像展示到网页
ImageIO.write(image, "jpg", response.getOutputStream());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class TestServlet
*/
@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public TestServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
HttpSession session = request.getSession();
String yzm = (String)session.getAttribute("yzm_session");
session.removeAttribute("yzm_session");//防止验证码复用
String yzm_text = request.getParameter("yzm_text");
if(yzm_text.equalsIgnoreCase(yzm)) {
//验证码正确,继续判断用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
if(username.equals("yxy")&&password.equals("123456")) {
//验证成功,跳转到登录成功界面
request.getSession().setAttribute("name", username);
request.getRequestDispatcher("/loginSuccess.jsp").forward(request,response);
}else {
//验证失败,返回登录界面,并提示错误信息
request.getSession().setAttribute("user_error", "用户名或密码错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}else {
//验证码错误,返回登录界面,并提示错误信息
request.getSession().setAttribute("yzm_error", "验证码错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class exit
*/
@WebServlet("/exit")
public class exit extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public exit() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.getSession().invalidate();//终结session
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}