首先要有优美的登陆界面,这个是在jsp界面中写的
如下代码所示:
login.jsp界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
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 change(){
var imgcode = document.getElementById("imgcode");
imgcode.src = "<%=path%>/CreateImgCodeServlet?a="+new Date().getTime();
}
</script>
</head>
<body>
<h1>用户登录</h1>
<font color="red">${requestScope.message } </font>
<form action="${pageContext.request.contextPath}/LoginServlet " method="post">
<p>
账号:<input type="text" name="username" value="${cookie.username.value }" />
</p>
<p>
密码:<input type="password" name="password" value="${cookie.password.value }" />
</p>
<p>
验证码:<input type="text" name="imgcode" size="10" />
<img id="imgcode" alt="验证码" src="${pageContext.request.contextPath }/CreateImgCodeServlet">
<a href="javascript:change()">换一张</a>
</p>
<p>
<input type="checkbox" name="isSave" value="save" checked="checked" />记住登录状态
</p>
<p>
<input type="submit" value="登录" />
</p>
</form>
</body>
</html>
还有登录成功的界面success.jsp界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
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">
-->
</head>
<body>
<c:set value="${sessionScope.username }" var="session_username"></c:set>
<c:if test="${session_username == null }">
<jsp:forward page="login.jsp">
<jsp:param value="请先登录" name="message"/>
</jsp:forward>
</c:if>
<h1>登录成功</h1>
${session_username }您好,欢迎登录<br>
<a href="${pageContext.request.contextPath }/ExitServlet">退出</a>
</body>
</html>
而servlet就是对jsp界面的事务处理界面了
首先我们要有一个实体类
用户类:User
package com.oracle.entity;
public class User {
private int userId;
private String username;
private String password;
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(int userId, String username, String password) {
super();
this.userId = userId;
this.username = username;
this.password = password;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
其次是要连接上我们的数据库
所以有一个DBUtil类:
package com.bzxy.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 连接数据库工具类,使用单例模式
* @author user
*
*/
public class DBUtil {
private static String url = "jdbc:mysql://localhost:3306/bzxy";
private static String user = "root";
private static String pwd = "root";
private static Connection conn ;
private DBUtil(){
}
static{
//1.动态加载驱动程序
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 获得数据库连接的方法
*/
public static Connection getConn(){
return conn;
}
}
然后有了数据库之后,我们要对数据库进行操作,这时我们就需要一个Dao类,用来执行sql语句
如下所示:
package com.oracle.dao;
import com.oracle.entity.User;
public class LoginDao {
//执行SQL语句,查询数据库,返回查询到的用户对象
public User login(){
return new User(0,"admin","1234");
}
}
然后用户在获取信息的时侯我们专门有一个服务类
如下所示
package com.oracle.service;
import com.oracle.dao.LoginDao;
import com.oracle.entity.User;
public class LoginService {
//获取参数并返回结果
public boolean login(String username,String password){
LoginDao ld = new LoginDao();
User user = ld.login();
if(user.getUsername().equals(username) && user.getPassword().equals(password)){
return true;
}
return false;
}
}
最后我们需要一个servlet类对jsp进行事务处理
(1)首先获得验证码图片的servlet类
package com.oracle.servlet;
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 cn.itcast.vcode.utils.VerifyCode;
public class CreateImgCodeServlet extends HttpServlet {
/*
* 生成验证码
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//生成随机验证码
VerifyCode vc = new VerifyCode();
BufferedImage image = vc.getImage();
//把验证码文本保存到session域中
request.getSession().setAttribute("imgcode", vc.getText());
//把验证码图片发送到客户端
vc.output(image, response.getOutputStream());
}
}
(2)其次是
登录的servlet类
package com.oracle.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oracle.service.LoginService;
public class LoginServlet extends HttpServlet{
@Override
protected 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 imgcode = request.getParameter("imgcode");
String[] isSave = request.getParameterValues("isSave");
//获取session域中的验证码文本
String session_imgcode = (String) request.getSession().getAttribute("imgcode");
if(!imgcode.equalsIgnoreCase(session_imgcode)){
//如果验证码错误,返回登录页面
request.setAttribute("message", "验证码有误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
//调用Service层,判断登录是否成功
LoginService ls = new LoginService();
boolean rel = ls.login(username, password);
if(rel){//登录成功
//判断是否需要保存登录状态
if(isSave!=null && isSave.length>0){
//保存用户登录状态
Cookie c1 = new Cookie("username",username);
c1.setMaxAge(60*60*24*10);//保存10天
Cookie c2 = new Cookie("password",password);
c2.setMaxAge(60*60*24*10);
//保存cookie
response.addCookie(c1);
response.addCookie(c2);
}else{
//不保存登录状态
Cookie[] cs = request.getCookies();
if(cs!=null && cs.length>0){
for (Cookie cookie : cs) {
if(cookie.getName().equals("username") || cookie.getName().equals("password")){
cookie.setMaxAge(0);//设置cookie失效
response.addCookie(cookie);//保存cookie
}
}
}
}
//保存session
request.getSession().setAttribute("username", username);
//重定向到成功页面
response.sendRedirect(request.getContextPath()+"/succ1.jsp");
}else{//登录失败
//发送错误信息
request.setAttribute("message", "登录失败,请检查账号和密码是否正确");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
最后是当你登录退出时,清除记录的类
package com.oracle.servlet;
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;
public class ExitServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//退出登录,清除session
request.getSession().invalidate();
//重定向到登录页面
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
}
记住当你在写上方代码是不要忘记你使用的东西,需要导入一个jar包,
需要导入的这三个包的名称是:itcast-tools-1.4.2.jsr
jstl.jar
standard.jar
这三个包可以到百度上下载
OK 以上便是带验证码登录的案例了

本文介绍了如何创建一个包含验证码功能的登录界面,主要涉及jsp和servlet技术。在创建过程中,需要导入特定的jar包,如itcast-tools-1.4.2.jsr、jstl.jar和standard.jar,这些可以在网上找到并下载。通过这些步骤,可以实现一个美观且具有验证功能的登录页面。
5021

被折叠的 条评论
为什么被折叠?



