java登录注册原理_案例:登录注册实现
案例概述
案例知识点分析
开发框架
注册功能的实现流程
监听器初始化数据
实现表单提交
Servlet接收
Servlet封装
Servlet处理数据(解耦)
Servlet转发,JSP显示
文件上传功能的实现
文件上传要点
文件上传原理
文件上传参考案例
pageEncoding="UTF-8"%>
Insert title here
文件上传
package com.jesse.servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/uploadservlet")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.创建磁盘文件项工厂
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 2.创建核心解析类
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
// 3.解析请求对象,将请求分成几个部分(FileItem)
try {
List list = fileUpload.parseRequest(request);
// 4. 遍历集合获得每个部分的对象
for(FileItem fileItem:list) {
// 判断是普通项还是文件上传项
if(fileItem.isFormField()) {
// 普通项
//获得普通项的名称:
String name = fileItem.getFieldName();
//获得普通项的值:
String value = fileItem.getString("UTF-8");
System.out.println(name + "-" + value);
}else {
// 文件上传项
// 获得文件的名称:
String fileName = fileItem.getName();
// 获得文件的输入流:
InputStream is = fileItem.getInputStream();
// 需要将文件写入到服务器的某个路径即可:
String path = getServletContext().getRealPath("/upload");
System.out.println(path);
// 创建输出流与输入流进行对接
OutputStream os = new FileOutputStream(path+ "\\" + fileName);
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
is.close();
os.close();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
登陆功能和验证码
登陆功能的实现
验证码
验证码生成的流程
验证码参考案例
package com.jesse.web.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
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;
import com.sun.prism.Image;
@WebServlet("/check1")
public class CheckImgServlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width = 120;
int height = 30;
// 步骤一:在内存中生成一张图片
BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
// 步骤二:操作该图片,设置背景色及绘制边框
Graphics graphics = bufferedImage.getGraphics();
// 设置背景色
graphics.setColor(Color.YELLOW);
graphics.fillRect(0, 0, width, height);
// 绘制边框
graphics.setColor(Color.BLUE);
graphics.drawRect(0, 0, width-1, height-1);
// 步骤三:生成随机的四个字母,写入到图片中
Graphics2D g2d = (Graphics2D)graphics;
g2d.setColor(Color.BLACK);
g2d.setFont(new Font("宋体", Font.BOLD, 18)); // a 4 3 r
String words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
int x = 10;
for(int i = 0; i < 4; i++) {
int idx = random.nextInt(words.length());
// 获得指定位置的字符
char ch = words.charAt(idx);
// 旋转的角度 -30到30之间
int angle = random.nextInt(60) - 30;
// 将角度转化为弧度:
double theta = angle * Math.PI / 180;
g2d.rotate(theta, x, 20);
g2d.drawString(String.valueOf(ch), x, 20);
g2d.rotate(-theta, x, 20);
x += 30;
}
// 步骤四:将内存中的图片,进行输出
ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
项目实现展示
java登录注册原理_案例:登录注册实现相关推荐
- mysql登录注册留言_实现登录注册的留言板思路
代码见 一.登录界面 1. 布局: a) 定width , height , margin:20px auto , box-shadow , border-radius b) p ...
- mysql登录注册留言_能登录注册的留言板(1)——实现登录
(一) 小白实现了登录操作,如图,代码在下面 一.登录界面 1. 布局: a) 定width , height , margin:20px auto , box-shadow , bord ...
- 一键登录服务端原理_一键登录已成大势所趋,Android端操作指南来啦!
根据极光(Aurora Mobile)发布的<2019年Q2移动互联网行业数据研究报告>,2019年第二季度,移动网民人均安装APP总量已达56款.面对如此繁多的APP,想在用户的手机中占 ...
- java反射回调函数_用J2V8注册Java回调函数
J2V8是一套针对谷歌的V8 JavaScript引擎的Java绑定.J2V8的开发为Android平台带来了高效的Javascript的执行环境,taris.js 就是基于J2V8开发的.J2V8同 ...
- nacis服务注册原理_服务注册和发现之Eureka原理篇
概念 在传统应用组件间调用,通过接口规范约束来实现的,从而实现不同模块间良好协作:但是被拆分成微服务后,每个微服务实例的数量和网络地址都可能动态变化,使得原来硬编码的地址极不方便,故需要一个中心化的组 ...
- 迅雷显示服务器超时,迅雷登录不了出现登录超时怎么办_迅雷登录超时的解决步骤...
迅雷想必大家都非常熟悉吧,我们在下载一些软件的时候,经常会用到迅雷,不过在使用过程中偶尔也会遇到一些问题困扰着用户们,比如有用户在登录迅雷的时候,发现登录不了,出现登录超时的情况,这可该如何处理呢?本 ...
- MySQL登录验证码原理_三:验证码的原理、作用及实现
验证码的原理.作用及实现 一.前言 最近学习实现了验证码,首先附图效果如下:( 简单说明: 分别提交正确.错误的验证码及对应效果 本文是图文结合说明) 二.验证码的作用 验证码是目前大多网站所支持并使 ...
- java调用微信加密_微信登录授权, 并且解密加密内容获取手机号和地区
所使用的的依赖 org.springframework.boot spring-boot-starter-web 2.3.7.RELEASE org.apache.httpcomponents htt ...
- 00005在java结果输出_浅谈Java反序列化漏洞原理(案例未完善后续补充)
摘要: 0005,这个16进制流基本上也意味者java反序列化的开始:(2)HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果:以上意味着存在Java反序列化,可尝试构造pa ...
最新文章
- BCH潜力无限,引领区块链发展潮流
- toybox执行linux程序,VirtualBox 的命令行用法
- GCN代码超详解析Two-stream adaptive graph convolutional network for Skeleton-Based Action Recognition(二)
- php 播放多个音乐,meting 音乐播放插件多域名跨域解决方法
- php编写六十甲子纳音表_六十甲子纳音表详细说明,看看你属于什么命,属于那个颜色...
- 收藏 | TensorRT部署深度学习模型
- 解决电脑总是“正在识别”,无法获取合法地址
- PYTORCH-KALDI语音识别工具包
- 图像数字水印技术研究及matlab实现,基于MATLAB的数字水印技术研究
- 小波变换去噪python_小波去噪方法及步骤_小波去噪方法的比较
- 最小二乘法 几何意义
- linux怎样编写脚本文档,Linux下批处理文件编写
- zkPorter:Layer-2 的可组合可扩展性
- 用户权限---u+s\g+s\o+t三个特殊权限说明
- android仿微信发布动态功能,android实现微信朋友圈发布动态功能
- 谈读《三国志》 ——开篇引述 【istrangeboy原创】
- 2021年中国电池电解液行业出货量及龙头企业对比分析:江苏国泰vs新宙邦vs天赐材料[图]
- 论文阅读:(arXiv 2022) MINER: Multiscale Implicit Neural Representations
- Windows变慢原因分析
- C语言学生成绩管理系统——检查学号姓名,双向循环链表
热门文章
- threejs 纹理流动_Threejs多重纹理与过程纹理实现
- fon在计算机网络中代表什么,计算机网络自顶向下方法第一章学习
- php根据城市获取天气预报,根据浏览者ip获取城市,然后在获取城市天气预报
- freemarker中 感叹号、双感叹号、问号、双问号 的使用方法
- 轻量级 Kubernetes 发行版 k3s 1.0.0 发布!
- 研究consul的service mesh功能
- mysql数据库应用与开发姜桂洪 课后答案_一站式打卡“云原生”时代的高效开发...
- linux桌面lxde 安装_Ubuntu 18.04下安装Lxde轻量桌面系统和VNC服务器
- cmakelist 定义变量
- No module named ‘mmcv._ext‘