1.JSP
<?xml version="1.0" encoding="UTF-8" ?>
<%@page import="org.apache.coyote.Request"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<link type ="text/css" rel="stylesheet" href="../resourses/css/Login.css"/>
<title>Insert title here</title>
</head>
<body>
<!-- <form method ="post" action ="/Labproject/Loginservlet"> -->
<!-- 账户 :<input id ="user" name ="user" type ="text"/> -->
<!-- 密码 :<input id ="pass" name ="pass" type ="password" /> -->
<!-- 登陆 :<input type ="submit" value ="提交"/> -->
<!-- </form> -->
<!-- <div id ="login_id"></div> -->
<form method ="post" action ="/LoginDemo/Loginservlet">
<div id ="title" class="_title">
<div id ="title_1" class="_title1">
后台管理员
</div>
</div>
<div id ="mid" class="_mid">
<div id ="mid_1" class="_mid1">
<div style="width: 40%;height: 60px; margin: auto;">账号:<input class="_input" type="text" id ="input_id_1" value="" placeholder="用户名" name="user"/></div>
<div style="width: 40%;height: 60px; margin: auto;">密码:<input class="_input" type="password" id ="input_id_2" value="" placeholder="密码" name="pass"/><span id ="span_id" style ="color:red"></span></div>
<div style="width: 30%;height: 40px; margin: auto;">
<input id ="code_id" type="text" name="code" placeholder="请输入验证码">
<span>
<img alt="验证码" id="scode" src="/LoginDemo/ImageServlet" >
<a href="#" onclick="javascript:flushCode();">看不清?</a>
</span>
</div>
<div style="width: 40%;height: 40px; float: right;"><input style="width: 20%;height: 25px;" type="submit" id ="input_id_3" name="input_name_3" value="登录"/></div>
</div>
</div>
</form>
</body>
<script>
$(
fale()
);
function flushCode() {
// 每次刷新的时候获取当前时间,防止浏览器缓存刷新失败
var time = new Date();
document.getElementById("scode").src = "/LoginDemo/ImageServlet?time=" + time;
}
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) return unescape(r[2]); return null; //返回参数值
}
function fale(){
var m;
var a =getUrlParam('message');
if(a ==1){
m ="账号或密码错误";
$("#span_id").empty().append(m);
}else if(a==2){
m ="验证码错误"
$("#span_id").empty().append(m);
}
}
</script>
</html>
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<form method ="post" action ="/LoginDemo/ExitLogin">
<input type ="submit" value ="退出登陆"/>
</form>
<% //判断
if(request.getSession().getAttribute("username") ==null){
response.sendRedirect("/LoginDemo/html/Login.jsp");
}
%>
session:<h1><%
out.print(request.getSession().getAttribute("username"));
%></h1>
</body>
</html>
2.后端:
package com.util;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 Login
*/
@WebServlet("/Loginservlet")
public class Loginservlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Loginservlet() {
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
//response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
@SuppressWarnings("unused")
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String usera ="123";//账号
String passa ="123";//密码
String message ="1";//返回信息
String user =request.getParameter("user");//前台页面传来的账号
String pass =request.getParameter("pass");//前台页面传来的密码
//判断账号密码是否相等
if (user.equals(usera) && pass.equals(passa)) {
//获取sessio
HttpSession session =request.getSession();
//设置session
session.setAttribute("username", user);
if (session ==null) {
//判断session是否为空
//getServletContext().getRequestDispatcher("/Login.jsp").forward(request, response);
response.sendRedirect("/LoginDemo/html/Login.jsp");
}
//解析session里的内容
String username =(String)session.getAttribute("username");
if (username ==null) {
//判断username是否为空
//重定向,一定要加return,sendRedirect是通过浏览器来做重定向实现页面跳转的,只有页面处理后
//才有实际动作。要做转向的,后边的输出就没有意义了,并且有可能会因为后边的输出出错。
//使用sendRedirect的时候前面不能有HTML输出,并不是绝对的,如果不报错就可以,因为现在JSP server都有cache机制
//这样写会在地址栏出现相应的地址,并且session会自动传过去,但是参数只能写在url中,
//不能 request.setAttribute("message","错误信息: " + ex.getMessage());
//然后get去获取值。
///使用这个不会出现地址,
//getServletContext().getRequestDispatcher("/Login.jsp").forward(request, response)
//但是可以request.setAttribute("message","错误信息: " + ex.getMessage());
//然后get去获取值。
response.sendRedirect("/LoginDemo/html/Login.jsp");
return;
}
//获取session的验证码
String code = (String) request.getSession().getAttribute("code");
// 获取页面提交的验证码
String inputCode = request.getParameter("code");
if(code.toLowerCase().equals(inputCode.toLowerCase())) { // 验证码不区分大小写
// 验证成功,跳转到成功页面
response.sendRedirect("/LoginDemo/html/Logintwo.jsp");
return;
} else { // 验证失败
String aString ="2";
response.sendRedirect("/LoginDemo/html/Login.jsp?message="+aString+"");
return;
}
}else {
//账号密码错误
response.sendRedirect("/LoginDemo/html/Login.jsp?message="+message+"");
return;
}
}
}
退出登录
package com.util;
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 ExitLogin
*/
@WebServlet("/ExitLogin")
public class ExitLogin extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ExitLogin() {
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
//response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//sessio定义获取session
HttpSession session =request.getSession();
//如果seeion为空
if (session ==null) {
response.sendRedirect("/LoginDemo/html/Login.jsp");
return;
}
//如果不为空,移除登陆session
session.removeAttribute("username");
//重定向到网页
response.sendRedirect("/LoginDemo/html/Login.jsp");
doGet(request, response);
}
}
验证码:
package com.util;
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 GetImage
*/
@WebServlet("/ImageServlet")
public class ImageServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
// 图片高度
private static final int IMG_HEIGHT = 100;
// 图片宽度
private static final int IMG_WIDTH = 30;
// 验证码长度
private static final int CODE_LEN = 4;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 用于绘制图片,设置图片的长宽和图片类型(RGB)
BufferedImage bi = new BufferedImage(IMG_HEIGHT, IMG_WIDTH, BufferedImage.TYPE_INT_RGB);
// 获取绘图工具
Graphics graphics = bi.getGraphics();
graphics.setColor(new Color(100, 230, 200)); // 使用RGB设置背景颜色
graphics.fillRect(0, 0, 100, 30); // 填充矩形区域
// 验证码中所使用到的字符
char[] codeChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456".toCharArray();
String captcha = ""; // 存放生成的验证码
Random random = new Random();
for(int i = 0; i < CODE_LEN; i++) { // 循环将每个验证码字符绘制到图片上
int index = random.nextInt(codeChar.length);
// 随机生成验证码颜色
graphics.setColor(new Color(random.nextInt(150), random.nextInt(200), random.nextInt(255)));
// 将一个字符绘制到图片上,并制定位置(设置x,y坐标)
graphics.drawString(codeChar[index] + "", (i * 20) + 15, 20);
captcha += codeChar[index];
}
// 将生成的验证码code放入sessoin中
req.getSession().setAttribute("code", captcha);
// 通过ImageIO将图片输出
ImageIO.write(bi, "JPG", resp.getOutputStream());
}
}
百度云:链接:https://pan.baidu.com/s/1KQAhJSYrVnlni4gDguMfFA 密码:dtoz