案例概述

案例知识点分析

开发框架

注册功能的实现流程

监听器初始化数据

实现表单提交

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登录注册原理_案例:登录注册实现相关推荐

  1. mysql登录注册留言_实现登录注册的留言板思路

    代码见 一.登录界面 1.  布局: a)      定width , height , margin:20px auto , box-shadow , border-radius b)      p ...

  2. mysql登录注册留言_能登录注册的留言板(1)——实现登录

    (一) 小白实现了登录操作,如图,代码在下面 一.登录界面 1.  布局: a)      定width , height , margin:20px auto , box-shadow , bord ...

  3. 一键登录服务端原理_一键登录已成大势所趋,Android端操作指南来啦!

    根据极光(Aurora Mobile)发布的<2019年Q2移动互联网行业数据研究报告>,2019年第二季度,移动网民人均安装APP总量已达56款.面对如此繁多的APP,想在用户的手机中占 ...

  4. java反射回调函数_用J2V8注册Java回调函数

    J2V8是一套针对谷歌的V8 JavaScript引擎的Java绑定.J2V8的开发为Android平台带来了高效的Javascript的执行环境,taris.js 就是基于J2V8开发的.J2V8同 ...

  5. nacis服务注册原理_服务注册和发现之Eureka原理篇

    概念 在传统应用组件间调用,通过接口规范约束来实现的,从而实现不同模块间良好协作:但是被拆分成微服务后,每个微服务实例的数量和网络地址都可能动态变化,使得原来硬编码的地址极不方便,故需要一个中心化的组 ...

  6. 迅雷显示服务器超时,迅雷登录不了出现登录超时怎么办_迅雷登录超时的解决步骤...

    迅雷想必大家都非常熟悉吧,我们在下载一些软件的时候,经常会用到迅雷,不过在使用过程中偶尔也会遇到一些问题困扰着用户们,比如有用户在登录迅雷的时候,发现登录不了,出现登录超时的情况,这可该如何处理呢?本 ...

  7. MySQL登录验证码原理_三:验证码的原理、作用及实现

    验证码的原理.作用及实现 一.前言 最近学习实现了验证码,首先附图效果如下:( 简单说明: 分别提交正确.错误的验证码及对应效果 本文是图文结合说明) 二.验证码的作用 验证码是目前大多网站所支持并使 ...

  8. java调用微信加密_微信登录授权, 并且解密加密内容获取手机号和地区

    所使用的的依赖 org.springframework.boot spring-boot-starter-web 2.3.7.RELEASE org.apache.httpcomponents htt ...

  9. 00005在java结果输出_浅谈Java反序列化漏洞原理(案例未完善后续补充)

    摘要: 0005,这个16进制流基本上也意味者java反序列化的开始:(2)HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果:以上意味着存在Java反序列化,可尝试构造pa ...

最新文章

  1. BCH潜力无限,引领区块链发展潮流
  2. toybox执行linux程序,VirtualBox 的命令行用法
  3. GCN代码超详解析Two-stream adaptive graph convolutional network for Skeleton-Based Action Recognition(二)
  4. php 播放多个音乐,meting 音乐播放插件多域名跨域解决方法
  5. php编写六十甲子纳音表_六十甲子纳音表详细说明,看看你属于什么命,属于那个颜色...
  6. 收藏 | TensorRT部署深度学习模型
  7. 解决电脑总是“正在识别”,无法获取合法地址
  8. PYTORCH-KALDI语音识别工具包
  9. 图像数字水印技术研究及matlab实现,基于MATLAB的数字水印技术研究
  10. 小波变换去噪python_小波去噪方法及步骤_小波去噪方法的比较
  11. 最小二乘法 几何意义
  12. linux怎样编写脚本文档,Linux下批处理文件编写
  13. zkPorter:Layer-2 的可组合可扩展性
  14. 用户权限---u+s\g+s\o+t三个特殊权限说明
  15. android仿微信发布动态功能,android实现微信朋友圈发布动态功能
  16. 谈读《三国志》 ——开篇引述 【istrangeboy原创】
  17. 2021年中国电池电解液行业出货量及龙头企业对比分析:江苏国泰vs新宙邦vs天赐材料[图]
  18. 论文阅读:(arXiv 2022) MINER: Multiscale Implicit Neural Representations
  19. Windows变慢原因分析
  20. C语言学生成绩管理系统——检查学号姓名,双向循环链表

热门文章

  1. threejs 纹理流动_Threejs多重纹理与过程纹理实现
  2. fon在计算机网络中代表什么,计算机网络自顶向下方法第一章学习
  3. php根据城市获取天气预报,根据浏览者ip获取城市,然后在获取城市天气预报
  4. freemarker中 感叹号、双感叹号、问号、双问号 的使用方法
  5. 轻量级 Kubernetes 发行版 k3s 1.0.0 发布!
  6. 研究consul的service mesh功能
  7. mysql数据库应用与开发姜桂洪 课后答案_一站式打卡“云原生”时代的高效开发...
  8. linux桌面lxde 安装_Ubuntu 18.04下安装Lxde轻量桌面系统和VNC服务器
  9. cmakelist 定义变量
  10. No module named ‘mmcv._ext‘