最近皮皮潇在学习java web,刚接触了简单的东西,所以今天给大家带来一个简单的登录实现。

页面:

页面代码:

<%@ 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>Insert title here</title>
<script type="text/javascript">
function authcode(obj) {
obj.src = "lala.do?"+Math.random();
}
</script>
</head>
<body>
<form action="index.do" method="post">
<p>请输入账号</p>
<input name="logname" class="text">
<p>请输入密码</p>
<input name="logpass" class="text">
<p>请输入验证码</p>
<img src="lala.do" onclick="authcode(this)">
<br>
<input name="usercode" class="text">
<div>
<input type="submit" value="登录" >
</div>
</form>
</body>
</html>

servlet代码:

package pipixia;

import java.awt.image.BufferedImage;
import java.io.IOException; 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 javax.servlet.http.HttpSession;
import pipixia.AuthCode; @WebServlet("/index.do")
public class UserServlet extends HttpServlet {
String authcode = AuthCode.getAuthCode();//生成随机数
private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
BufferedImage img = AuthCode.getAuthImg(authcode);//随机数放在图片上,生成验证码
ImageIO.write(img, "JPEG", resp.getOutputStream());
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String lognname = request.getParameter("logname");
String logpass = request.getParameter("logpass");
String usercode = request.getParameter("usercode");
HttpSession session = request.getSession();
if ("pipixiao".equals(lognname) && "123456".equals(logpass)) {//判断账号,密码是否正确
if (authcode.equalsIgnoreCase(usercode)) {//判断验证码是否正确
response.sendRedirect("Test1.jsp");
} else {
System.out.println("请输入正确的验证码");
response.sendRedirect("Prac.jsp");
}
} else {
response.sendRedirect("Prac.jsp");
}
}
}

在页面上可以清除的看到我还设定了验证码,但是我的验证码是经过别人的指导完成的。

当验证码输错或不输时会提醒输入正确的验证码

主要的制作原理:产生随机数,放入一个五个单位的存储空间,形成验证码,再制作一张图片,将验证码放入图片,就形成了上图所示的验证码。

package pipixia;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.servlet.annotation.WebServlet;
public class AuthCode {
private final static int lenght = 5; //验证码长度
public static final int width = 15; //单个验证码宽度
public static final int height = 30; //单个验证码高度
public static final int gap = 4; //单个验证码之间间隔
public static final int Img_width = lenght * (width + gap);
public static final int Img_height = height;
//产生验证码
public static String getAuthCode(){
String authcode="";
for(int i=0;i<lenght;i++){
authcode+=(new Random()).nextInt(10);
}
return authcode;
}
//制作图片
public static BufferedImage getAuthImg(String authCode){
BufferedImage img = new BufferedImage(Img_width,Img_height, BufferedImage.TYPE_INT_BGR);
Graphics g = img.getGraphics();
g.setColor(Color.YELLOW);
g.fillRect(0, 0, Img_width, Img_height);
g.setColor(Color.BLACK);
g.setFont(new Font("宋体", Font.PLAIN,Img_height ));
char c;
for(int i=0;i<authCode.toCharArray().length;i++){
c=authCode.charAt(i);
g.drawString(c + "", i * (width + gap) + gap / 2, Img_height);
} Random random = new Random();
for (int i = 0; i < 10; i++) {
int x = random.nextInt(Img_width);
int y = random.nextInt(Img_height);
int x2 = random.nextInt(Img_width);
int y2 = random.nextInt(Img_height);
g.drawLine(x, y, x + x2, y + y2);
}
return img;
}
}

由于做的是登陆过程,所以还得判断账号密码的正确与否,当然为了提高安全性,还加入了过滤起Filter来起到保护安全的作用

Filter代码:

package pipixia;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; @WebFilter("/Test1.jsp")
public class ASFilter implements Filter {
@Override
public void destroy() {
} @Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
HttpSession session = request.getSession();
String logname = (String) session.getAttribute("logname");
 if (!"".equals(logname) && logname != null) { 
      arg2.doFilter(request, response);
    } else {
      System.out.println("已成功拦截");
      response.sendRedirect("Prac.jsp");
  }
}
@Override public void init(FilterConfig arg0) throws ServletException {
   }
}

Filter能够阻止直接输入必须登录后才能看到的页面的地址被不登陆的人看见,所以必须要拦截。用了Filter后直接输入必须登录后才能看见的页面的地址,会被拦截,加上一句输出语句控制台就会出现下面的效果,并且会返回登录页面。

www.zhiliaotang.com 请关注知了堂,这里有太多好学的程序员,加入我们,一起努力。

【知了堂学习笔记】java web 简单的登录的更多相关文章

  1. 【知了堂学习笔记】java 自定义异常

    java 常见异常种类(Java Exception): 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCas ...

  2. 【知了堂学习笔记】java 编写几种常见排序算法2

    排序的分类: 1.直接选择排序 它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~ ...

  3. 【知了堂学习笔记】java 编写几种常见排序算法

    排序的分类: 一.交换排序 所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动. 1.冒泡 ...

  4. 【知了堂学习笔记】java 接口与抽象类

    本次主角:抽象类 .接口. 对于皮皮潇这样一类的Java初学者来说,接口和抽象类如果不去花大量的精力与时间是很难弄清楚的,而我也是在最近这周的项目学习中感觉到了我对这两个概念不熟悉,所以导致对一些问题 ...

  5. 【知了堂学习笔记】java 底层容易忽略的知识点

    1. java中的关键字 提到关键字,最主要的就是不能用关键字作为标识符,值得注意的有以下几点. ①其中goto与const在java中没有定义,但是也是关键字.这个基本用不到,但是应该有个认知. ② ...

  6. 【知了堂学习笔记】java 方法重载与重写的归纳

    方法重载:Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同.调用方法时通过传递给它们的不同个数和类型的参数来决定 ...

  7. [知了堂学习笔记]_牵线Eclipse和Tomcat第一篇 —— 配置Java环境变量&&安装eclipse

    一.先给他们提供一个"浪漫的"环境,比如传说中的"鹊桥"--java环境变量.哈哈! 配置java环境变量. 下载jdk,根据自己电脑的版本和操作位数选择不同的 ...

  8. 【知了堂学习笔记】java 正则表达式

    本文参考网络上面别人的博客知识产出 正则表达式基础 1.句号 假设你想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束.另外,假设有一本英文字典,你可以用正则表达式搜索它的全部 ...

  9. 【知了堂学习笔记】java IO流归纳总结

    皮皮潇最近学到了IO流但是感觉这一块要记的东西太多了,所以重API上查阅并总结了以下几点关于IO的知识. 1.File(文件类): File类是文件以及文件夹进行封装的对象,用对象的思想来操作文件和文 ...

随机推荐

  1. Java并发编程原理与实战十八:读写锁

    ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程. 基本规则: 读读不互斥 ...

  2. pandas 对时间与日期处理

    1.先把字符串时间转为时间类型: def func(x): y =pd.Timestamp(x) return y data.index = data.发博时间.apply(lambda x : fu ...

  3. (一)利用 mdb 调试获取 nvlist_t 中 nvpair_t(name/value) 对

    服务器:192.168.2.122 root@2236:~# mdb -k> ::spaADDR                 STATE NAME                       ...

  4. [Ubuntu 14.04] 安装Flash && 安装QQ

    一.安装Flash 打开Firefox浏览器弹出的Flash安装提醒早都烦死了,那么Ubuntu14.04怎么安装Flash呢? 1.32位系统命令行安装: 第一步 更新库: sudo apt-get ...

  5. 【codeforces】【比赛题解】#937 CF Round #467 (Div. 2)

    没有参加,但是之后几天打了哦,第三场AK的CF比赛. CF大扫荡计划正在稳步进行. [A]Olympiad 题意: 给\(n\)个人颁奖,要满足: 至少有一个人拿奖. 如果得分为\(x\)的有奖,那么 ...

  6. 大数据系列之分布式大数据查询引擎Presto

    关于presto部署及详细介绍请参考官方链接 http://prestodb-china.com PRESTO是什么? Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持G ...

  7. WebApi Owin SelfHost OAuth2 - 授权服务和资源服务分离方案

    使用JWT 参考:http://www.cnblogs.com/grissom007/p/6294746.html

  8. UrlRouteModule

    一.请求流程 当一个请求发往ASP.net MVC站点时的情景,IIS收到请求并将请求转到ASP.net,然后根据URL,或者更确切来说:被请求文件的扩展名.在IIS7 integrated模式下(默 ...

  9. Web Api - HttpMessageHandler 学习

    参考: 1.http://www.cnblogs.com/chenboyi081/p/4995252.html 2.http://www.cnblogs.com/r01cn/archive/2012/ ...

  10. python基础--shutil模块

    shutil模块提供了大量的文件的高级操作. 特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 注意 即便是更高级别的文件复制函数(shutil.cop ...