前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSP与Servlet组合实现登录功能(附加验证码)

JSP与Servlet组合实现登录功能(附加验证码)

作者头像
天道Vax的时间宝藏
发布2021-08-11 10:47:05
1.1K0
发布2021-08-11 10:47:05
举报
文章被收录于专栏:用户5305560的专栏

User.java

代码语言:javascript
复制
package com.bean;

public class xzk_User {
	String userid;
	String password;
	public String getUserid() {
		return userid;
	}
	public String getPassword() {
		return password;
	}
	public void setUseid(String id) {
		userid=id;
	}
	public void setPassword(String pw) {
		password=pw;
	}
}

index.jsp

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>首页</title>
</head>
<body>
	<jsp:forward page="login.jsp"></jsp:forward>
</body>
</html>

login.jsp

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登录</title>
<style type="text/css"> div{text-align:center}</style>
</head>
<body>
<div>
	<form name="reg" action="/2019_11_14_xzk.test/XZK_LoginServlet" method="post">
		用户名:<input name="userid" type="text" size="30"/><br />
		密   码 :<input name="password" type="password" size="30"/><br />
		验证码:<input type="text" name="check_code" size="20">
			  <img src="XZK_CheckServlet"><br />
		<input type="submit" value="提交" id="bt" />
	</form>
</div>
<!-- JSP页面的普通注释:注释的内容是可见的,将出现在生成的HTML代码中,此代码将发送给
浏览器,然后由浏览器负责忽略此注释。 -->
<%-- JSP页面中的隐藏注释:标记的内容客户端查看源码时是完全看不到的。 --%>
<% // JSP中java代码块单行注释:客户端不可见 %> 
<% /* JSP中java代码块多行注释:客户端不可见 */ %>
</body>
</html>

LoginServlet.java

代码语言:javascript
复制
package com.loginPage;

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 com.bean.xzk_User;

public class XZK_LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		String userid=req.getParameter("userid");
		String password=req.getParameter("password");
		String checkCode=req.getParameter("check_code");
		String savedCode=(String )req.getSession().getAttribute("check_code");
		PrintWriter pw=resp.getWriter();
		if(("xzk").equals(userid)&&("521").equals(password)&&checkCode.equals(savedCode)) {//少验证码验证部分
			xzk_User user=new xzk_User();
			user.setUseid(userid);
			user.setPassword(password);
			req.getSession().setAttribute("user", user);
			resp.sendRedirect("/2019_11_14_xzk.test/main.jsp");
		}else if(checkCode.equals(savedCode)){
			pw.write("用户名或密码错误,登陆失败,请您重新输入");
		}else {
			pw.write("验证码错误");
		}
		
		//response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(req, resp);
	}

}

main.jsp

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" import="com.bean.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>首页</title>
<style>
    *{
    padding:0;
    margin:0;
    font-family:"微软雅黑";
}
.header{
    height:72px;
    background:#458fce ;
}
.header .logo{
    color:#fff ;
    line-height:70px;
    font-size:30px;
    margin-left:20px;
    display:inline-block;
    text-align:center;

}
a {
    color: #fff ;
    text-decoration: none ;
}
.header .login{
    float:right;
    color:#fff ;
    line-height:72px;
    margin-right:2px;
    display:inline-block;
}
.banner{
    height:380px;
    overflow:hidden;
    background: #ddd;
}
</style>
</head>
<body>
    <div class="header">
        <div class="logo">JavaWeb实验一</div>
        <div class ="login">
            <a href ="/2019_11_14_xzk.test/XZK_IndexServlet">个人中心</a>
            <span>|</span> 
            <a href ="/2019_11_14_xzk.test/XZK_LoginOutServlet">退出</a>
        </div>
    </div>
    <br />
    	用户名:xzk
    <% 
    	xzk_User u=(xzk_User)new xzk_User();
    %>
    <!-- JSP页面的普通注释:注释的内容是可见的,将出现在生成的HTML代码中,此代码将发送给浏览器,然后由浏览器负责忽略此注释。 -->
	<%-- JSP页面中的隐藏注释:标记的内容客户端查看源码时是完全看不到的。 --%>

	<% // JSP中java代码块单行注释:客户端不可见 %> 
	<% /* JSP中java代码块多行注释:客户端不可见 */ %>
</body>
</html>

IndexServlet.java

代码语言:javascript
复制
package com.loginPage;

import java.io.IOException;
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 com.bean.xzk_User;

public class XZK_IndexServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
		HttpSession session = request.getSession();
		xzk_User user = (xzk_User) session.getAttribute("user");
		if(user == null){
			response.getWriter().print("你还没有登陆或输入用户名,请重新登录<a href='/2019_11_14_xzk.test/main.jsp'>进入首页</a>");
		} else {
			response.getWriter().print("你已经登陆成功欢迎你" + user.getUserid() + "!");
			response.getWriter().print("<a href='/2019_11_14_xzk.test/XZK_LoginOutServlet'>退出</a>");
			}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

LoginoutServlet.java

代码语言:javascript
复制
package com.loginPage;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class XZK_LoginOutServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.getSession().removeAttribute("userid");
		resp.sendRedirect("/2019_11_14_xzk.test/index.jsp");
		//response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {	
		doGet(req, resp);
	}
}

CheckServlet.java

代码语言:javascript
复制
package com.loginPage;
 import java.io.*;
 import javax.servlet.*;
 import javax.servlet.http.*;
 import java.awt.*;
 import java.awt.image.*;
 import javax.imageio.ImageIO;
 public class XZK_CheckServlet extends HttpServlet
 {
	private static final long serialVersionUID = 1L;
	private static int WIDTH = 60; //验证码图片宽度
 	private static int HEIGHT = 20; //验证码图片高度
 public void doGet(HttpServletRequest request,HttpServletResponse response) 
 			throws ServletException,IOException{		
 		HttpSession session = request.getSession();
 		response.setContentType("image/jpeg");
 		ServletOutputStream sos = response.getOutputStream();		    response.setHeader("Pragma","No-cache");
 		response.setHeader("Cache-Control","no-cache");
 		response.setDateHeader("Expires", 0);
		BufferedImage image = 
 			new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 
 		Graphics g = image.getGraphics();
 		char [] rands = generateCheckCode();
 		drawBackground(g);
 		drawRands(g,rands);
		g.dispose();
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
 		ImageIO.write(image, "JPEG", bos);
 		byte [] buf = bos.toByteArray();
 		response.setContentLength(buf.length);
		sos.write(buf);
 		bos.close();
 		sos.close();
 		session.setAttribute("check_code",new String(rands));
	}
	private char [] generateCheckCode()
 	{
 		String chars = "0123456789abcdefghijklmnopqrstuvwxyz";
 		char [] rands = new char[4];
 		for(int i=0; i<4; i++)
 		{
 			int rand = (int)(Math.random() * 36);
 			rands[i] = chars.charAt(rand);
 		}
 		return rands;
 	}
 	private void drawRands(Graphics g , char [] rands)
 	{
 		g.setColor(Color.BLACK);
 		g.setFont(new Font(null,Font.ITALIC|Font.BOLD,18));
 		g.drawString("" + rands[0],1,17);
 		g.drawString("" + rands[1],16,15);
 		g.drawString("" + rands[2],31,18);
 		g.drawString("" + rands[3],46,16);
 		System.out.println(rands);
 	}
 	private void drawBackground(Graphics g)
 	{
 		g.setColor(new Color(0xDCDCDC));
 		g.fillRect(0, 0, WIDTH, HEIGHT);
		for(int i=0; i<120; i++)
 		{
 			int x = (int)(Math.random() * WIDTH);
 			int y = (int)(Math.random() * HEIGHT);
 			int red = (int)(Math.random() * 255);
 			int green = (int)(Math.random() * 255);
 			int blue = (int)(Math.random() * 255);
 			g.setColor(new Color(red,green,blue));		
 			g.drawOval(x,y,1,0);
 		}
 	}
 }

总结:刚一开始不明白JSP与html文件的具体区别,在理解上出了问题,后来通过查阅,明白JSP相对于html是会产生动态页面,且JSP只有发布到Tomcat服务器上才能打开,而html是直接可以打开的。另外能熟练掌握区分JSP中三种注释:JSP普通注释,JSP隐藏注释还有java代码注释。熟练掌握JSP语言的page属性值以及标识性动作forward的用法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档