首页 > 编程语言 >熟悉又陌生的JavaWeb 第5天

熟悉又陌生的JavaWeb 第5天

时间:2024-03-12 11:23:02浏览次数:24  
标签:文件 JavaWeb 验证码 fileName g2d AJAX 熟悉 陌生 String

传送门

AJAX入门

建议引入JQuery的封装来使用AJAX,现在基本没有需要原生创建AJAX请求的场景,JQuery封装了对不同浏览器的处理,无需自己判断

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

$.ajax({
    url: 'your_url_here',  // 替换成你要发送请求的URL
    type: 'POST',
    data: {
        param1: 'value1',  // 替换成你要发送的参数
        param2: 'value2'
    },
    success: function(response) {
        // 请求成功时的回调函数
        console.log(response);  // 输出服务器返回的数据
    },
    error: function(xhr, status, error) {
        // 请求失败时的回调函数
        console.log(error);  // 输出错误信息
    }
});

var postData = {
    param1: 'value1',
    param2: 'value2'
};

$.ajax({
    url: 'your_url_here',
    type: 'POST',
    data: JSON.stringify(postData),  // 将 postData 对象转换为 JSON 字符串
    contentType: 'application/json',  // 设置请求头 Content-Type 为 application/json
    success: function(response) {
        console.log(response);
    },
    error: function(xhr, status, error) {
        console.log(error);
    }
});

AJAX概述

AJAX开发

AJAX简单案例

课后习题

验证码和文件的上传下载

建议使用成熟的jar包,自己写比较麻烦的,比如Apache Commons FileUpload

使用JSP验证码

验证码开发

文件流给前端或者BASE64给前端都可以,个人感觉BASE64更合适,因为验证码图片体积一般不会很大

        int width = 150;
        int height = 50;

        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = image.createGraphics();

        // 设置背景颜色
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, width, height);

        // 生成随机验证码 Math.Random
        String captcha = generateCaptcha();

        // 将验证码存储在 session 中,以便后续验证
        request.getSession().setAttribute("captcha", captcha);

        // 绘制验证码文本
        g2d.setColor(Color.BLACK);
        g2d.setFont(new Font("Arial", Font.BOLD, 24));
        g2d.drawString(captcha, 30, 30);

        // 结束绘图
        g2d.dispose();

        // 将图像转换为 Base64 字符串
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(image, "png", baos);
        byte[] imageBytes = baos.toByteArray();
        String base64Image = Base64.getEncoder().encodeToString(imageBytes);

        // 将 Base64 字符串发送给前端
        response.getWriter().write(base64Image);

认识文件上传

本质上是对文件流的处理

实现文件上传

        // 获取上传的文件部分
        Part filePart = request.getPart("file"); 
        // 获取上传文件的文件名
        String fileName = getSubmittedFileName(filePart); 
        // 获取上传文件的输入流
        InputStream fileContent = filePart.getInputStream(); 
        // 这里可以将文件保存到服务器上,或者进行其他操作
        // 例如将文件内容写入到另一个文件中
        OutputStream out = new FileOutputStream("/path/to/save/directory/" + fileName);
        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = fileContent.read(bytes)) != -1) {
            out.write(bytes, 0, read);
        }
        out.close();
        response.getWriter().println("File " + fileName + " uploaded successfully");
    //取文件的名称,比较麻烦
    private static String getSubmittedFileName(Part part) {
        for (String cd : part.getHeader("content-disposition").split(";")) {
            if (cd.trim().startsWith("filename")) {
                String fileName = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
                return fileName.substring(fileName.lastIndexOf('/') + 1).substring(fileName.lastIndexOf('\\') + 1);
            }
        }
        return null;
    }

文件下载

课后习题

MVC和Struts2的基本原理

MVC模式

界面、业务逻辑、数据库操作,三者分开

Struts2简介

古早网站还在用,比如url是xxxx.action这种的

Struts2的基本原理

配置全局的FilterDispatcher,捕获xxx.action(可以改后缀匹配规则)请求发给对应的Class,反射处理调用execute方法,根据execute返回的字符串继续找到下一个jsp页面

Struts2的基本使用方法

  1. web.xml添加FilterDispatcher
  2. 添加struts.xml配置相关跳转页面的参数(什么字符串跳转什么jsp)
  3. 添加execute方法

其他问题

课后习题

Web网站安全

URL操作攻击

改请求参数,其实就是权限控制问题,简单点可以加上登录用户的校验

Web跨站脚本攻击

由于JSP是拼接HTML而产生的问题,如果不处理,参数里的脚本就会被执行

out.println(req.getParameter("str"));
//改善 org.apache.commons.text.StringEscapeUtils
out.println(StringEscapeUtils.escapeHtml4(req.getParameter("str")));

SQL注入

太常见了,PrepareStatement解决

密码保护与验证

非明文存储用户密码

课后习题

标签:文件,JavaWeb,验证码,fileName,g2d,AJAX,熟悉,陌生,String
From: https://www.cnblogs.com/lazykingloveu/p/18067903

相关文章

  • 熟悉又陌生的JavaWeb 第4天
    传送门JSP和JavaBean认识JavaBean在JSP中使用JavaBean为了好看,jsp里只有xml标签,也就是后来的jspx后缀文件的基础很不易读,不建议这么写<jsp:useBeanid="tagNewObj"class="com.lazyking.Student"/><jsp:setPropertyname="tagNewObj"property="id"param......
  • hive分区和分桶你熟悉吗?
    两种用于优化查询性能的数据组织策略,数仓设计的关键概念,可提升Hive在读取大量数据时的性能。1分区(Partitioning)根据表的某列的值来组织数据。每个分区对应一个特定值,并映射到HDFS的不同目录。常用于经常查询的列,如日期、区域等。这样可以在查询时仅扫描相关的分区,而不是整个数......
  • 熟悉又陌生的JavaWeb 第3天
    传送门Servlet编程第2天的开头部分已经看过Servlet这里再介绍一下注解方式,可以不用配置web.xml使用注解的前提是web.xml的version是4.0(3.0以上应该就行)@WebServlet(name="MyNewServlet",value="/MyNewServlet")publicclassMyNewServletextendsHttpServlet{......
  • JavaWeb之Java Servlet学习笔记
    JavaWeb学习笔记,主要是讲JavaServle,很适合Java开发网站的入门学习。(以课程进度为目录)第四周Web课.jsp中删除共性代码(html、body)————.java文件能相对的简洁taglib指令(标签库)动作元素action——element:包含include动态包含:在运行时才引入文件,代码也会动态引入,时间和......
  • 熟悉又陌生的JavaWeb 第2天
    传送门JSP基本语法什么是servlet自定义Servlet,直接使用抽象好的HttpServlet更好MyCustomServletpublicclassMyCustomServletextendsHttpServlet{@SerialprivatestaticfinallongserialVersionUID=-599450886992695746L;@Overrideprotected......
  • 关于Maven创建javaweb项目在配置Tomcat的问题(1)
    先将Maven项目转换成Java项目,确保没有架包没有报错和编译错误的情况下进行如下操作:打开Maven项目中的pom.xml文件,找到标签。查看里面是否配置元素,有则直接添加如下配置。org.codehaus.cargocargo-maven2-plugin1.7.6tomcat9xembedded如果没有,则先添加元素,然后再添加......
  • javaweb04-maven&web入门
    maven依赖管理:管理项目依赖的jar包,避免版本冲突统一项目结构:提供标准统一的项目结构标准的项目构建:标准跨平台的自动化项目构建方式maven坐标groupid:定义当前项目隶属组织名称artifactid:定义当前项目名称version:定义当前项目版本号依赖依赖传递排除依赖<exclusion>......
  • javaweb03-前端工程
    Ajax异步的Javascript和XML数据交换异步交互:在不重载页面的情况下,与服务器交换数据并更新部分网页Axios入门前后端分离开发需求分析->接口定义->前后端并行开发->测试->前后端联调开发YAPI接口管理平台前端工程化规范化、标准化前端开发环境准备vue-cli脚手架Vu......
  • 3.1日javaweb
     今天继续进行项目的编写packagecom.example.service;importcom.example.mapper.UserMapper;importcom.example.pojo.Application;importcom.example.pojo.Plan;importcom.example.pojo.User;importorg.springframework.beans.factory.annotation.Autowired;impo......
  • JavaWeb
    JavaWebJavaWeb组件首先献上Tomcat架构神图:ServletServlet容器:运行在Web服务器上的程序,作为来自HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层,它负责处理用户的请求,并根据请求生成相应的返回信息提供给用户。​ 大体原理图如下:Servlet请求的处理......