JavaEE会话技术之Session案例
案例需求:需求分析代码验证码代码登陆代码登陆页面代码登录成功页面
案例需求:
访问带有验证码的登录页面login.jsp用户输入用户户名和密码以及验证码。
* 如果用户名和密码输入有误,跳转登录页面,
提示用户名或者密码错误
*如果验证码输入有误,跳转登录页面,
提示:验证码错误
*如果输入全部正确,则转跳到主页success.jsp,
显示:用户名,欢迎您!
需求分析
代码
验证码代码
package com
.web
.servlet
;
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
;
import java
.awt
.*
;
import java
.awt
.image
.BufferedImage
;
import java
.io
.IOException
;
import java
.util
.Random
;
@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
int width
= 100;
int height
= 50;
BufferedImage image
= new BufferedImage(width
,height
,BufferedImage
.TYPE_INT_RGB
);
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);
String str
= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
Random ran
= new Random();
StringBuilder sb
= new StringBuilder();
for (int i
= 1; i
<= 4; i
++) {
int index
= ran
.nextInt(str
.length());
char ch
= str
.charAt(index
);
sb
.append(ch
);
g
.drawString(ch
+"",width
/5*i
,height
/2);
}
String checkCode_session
= sb
.toString();
request
.getSession().setAttribute("checkCode_session",checkCode_session
);
g
.setColor(Color
.GREEN
);
for (int i
= 0; i
< 10; i
++) {
int x1
= ran
.nextInt(width
);
int x2
= ran
.nextInt(width
);
int y1
= ran
.nextInt(height
);
int y2
= ran
.nextInt(height
);
g
.drawLine(x1
,y1
,x2
,y2
);
}
ImageIO
.write(image
,"jpg",response
.getOutputStream());
}
@Override
protected void doGet(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
this.doPost(request
,response
);
}
}
登陆代码
package com
.web
.servlet
;
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
;
import java
.io
.IOException
;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
request
.setCharacterEncoding("utf-8");
String username
= request
.getParameter("username");
String password
= request
.getParameter("password");
String checkCode
= request
.getParameter("checkCode");
HttpSession session
= request
.getSession();
String checkCode_session
= (String
) session
.getAttribute("checkCode_session");
session
.removeAttribute("checkCode_session");
if (checkCode_session
!= null
&&checkCode_session
.equalsIgnoreCase(checkCode
)){
if ("zhansan".equals(username
)&&"123".equals(password
)){
session
.setAttribute("user",username
);
response
.sendRedirect(request
.getContextPath()+"/success.jsp");
}else {
request
.setAttribute("login_error","用户名或密码错误");
request
.getRequestDispatcher("/login.jsp").forward(request
,response
);
}
}else{
request
.setAttribute("cc_error","验证码错误");
request
.getRequestDispatcher("/login.jsp").forward(request
,response
);
}
}
@Override
protected void doGet(HttpServletRequest request
, HttpServletResponse response
) throws ServletException
, IOException
{
this.doPost(request
, response
);
}
}
登陆页面代码
<%--
Created by IntelliJ IDEA.
User: OldAZ-PC
Date: 2020/9/3
Time: 16:30
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login
</title>
<script>
window.onload = function () {
document.getElementById("img").onclick = function () {
this.src = "/4_Cookie_Session_war_exploded/checkCodeServlet?date="+new Date().getTime();
}
}
</script>
<style>
div{
color: red;
}
</style>
</head>
<body>
<form action="loginServlet" method="post" >
<table>
<tr>
<td>用户名
</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码
</td>
<td><input type=password name="password"></td>
</tr>
<tr>
<td>验证码
</td>
<td><input type="text" name="checkCode"></td>
</tr>
<tr>
<td colspan="2" ><img id="img" src="/4_Cookie_Session_war_exploded/checkCodeServlet"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="登录"></td>
</tr >
</table>
</form>
<div><%=request.getAttribute("cc_error")==null?"":request.getAttribute("cc_error")%>
</div>
<div><%=request.getAttribute("login_error")==null?"":request.getAttribute("login_error")%>
</div>
</body>
</html>
登录成功页面
<%--
Created by IntelliJ IDEA
.
User
: OldAZ
-PC
Date
: 2020/9/3
Time
: 19:05
To change
this template use File
| Settings
| File Templates
.
--%>
<%@ page contentType
="text/html;charset=UTF-8" language
="java" %>
<html>
<head>
<title>Title
</title
>
</head
>
<body>
<h1><%=request
.getSession().getAttribute("user") %>,欢迎您!!
</h1
>
</body
>
</html
>