Request和Response应用

news2024/10/1 1:47:29

ServletRequest应用

ServletRequest应用非常广泛,下面是一些例子:

  1. 获取请求参数:可以使用HttpServletRequest的getParameter()方法获取请求参数。

  2. 获取请求头信息:可以使用HttpServletRequest的getHeader()方法获取请求头信息。

  3. 获取Session对象:使用HttpServletRequest的getSession()方法可以获取HttpSession对象,从而存储和获取用户会话数据。

  4. 获取服务器路径等信息:可以使用HttpServletRequest的getServletContext()方法获取ServletContext对象,从而获取应用程序的相关信息。

  5. 文件上传:可以使用HttpServletRequest的getPart()方法获取上传的文件部分,从而实现文件上传。

这些只是ServletRequest的一些用例,实际上它可以用于许多其他方面的任务。

讲讲servlet怎么获取form表单的值,并输出到浏览器

要注意action的路径,我这里浏览器默认路径是http://localhost:8080/s1

,/para是servlet页面的访问路径,就是下面的ParameterReq类,因为后端要获取这个值,所以要把form表单action属性设置为/s1/para,因为我开始浏览器的请求路径就是/s1,那后端又是怎么获取表单的值的呢,对,就是获取name属性的值,当你在输入框输入的参数时,点击提交的那一刻,后端就拿到了输入框的值,并把内容响应到浏览器,或者也可以打印到控制台

form表单

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<body>
        <form action="/s1/para" method="get">
           <p>
               用户名:<input type="text" name="username">
           </p>
            <p>
                密码:<input type="password" name="password">
            </p>
            <input type="submit">
            <input type="reset">

        </form>
</body>
</html>

请求的servlet

package com.qcnel;

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

public class ParameterReq extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       String username=req.getParameter("username");
       String password=req.getParameter("password");
       // 输出到浏览器
       resp.getWriter().write(username+":"+password);
       // 打印在控制台
        System.out.println(username);
        System.out.println(password);


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       doPost(req, resp);
    }
}

web.xml需要配置这些,然后就可以启动tomcat了

浏览器的输出

控制台的输出

ServletResponse应用

ServletResponse是Java Servlet规范中的一部分,它表示向客户端发送的HTTP响应。ServletResponse通过提供方法设置响应状态、响应头信息、响应正文和Cookie等,使得开发者可以更加灵活地控制和处理响应信息。下面是一些ServletResponse应用的例子:

  1. 设置响应状态和编码:使用ServletResponse的setStatus()方法可以设置响应状态码,使用setCharacterEncoding()方法可以设置响应编码。

  2. 设置响应头信息:使用ServletResponse的setHeader()方法可以设置响应头信息,例如Content-Type、Content-Length等。

  3. 设置响应正文:可以使用ServletResponse的getWriter()方法获取PrintWriter对象,从而将响应正文输出到客户端。

  4. 设置Cookie:使用ServletResponse的addCookie()方法可以设置响应的Cookie。

  5. 文件下载:可以使用ServletResponse的getOutputStream()方法将文件输出到客户端下载。

这些只是一些ServletResponse的常用用例,实际上还有很多其他应用场景。通过使用ServletResponse,开发者可以更加自由灵活地控制和处理HTTP响应。

Response下载文件

package com.qcnel;

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

public class DownLoad extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取下载的文件路径(注意获取这里获取的是绝对路径,先获取ServletContext再使用ServletContext的getRealPath方法获取绝对路径)
            String filePath = "D:\\ideaProject\\Maven-02\\src\\main\\resources\\1.jpg";
            File file = new File(filePath);
            if(file.exists()) {
                // 设置 HTTP 响应中 "Content-Type" 响应头的值。它告诉客户端(浏览器)该响应中的数据是一个 "application/octet-stream" 的二进制流文件,因此客户端应该以二进制流的形式接收数据。
                resp.setContentType("application/octet-stream");
                //设置响应头控制浏览器以下载的形式打开文件
                resp.setHeader("Content-Disposition", "attachment;filename=1.jpg");
                //获取下载文件的输入流
                FileInputStream fis = new FileInputStream(file);
                // BufferedInputStream 是一个带有缓冲的输入流,它可以提高文件读取速度。
                // 在使用 FileInputStream 读取文件时,每次都需要从磁盘中读取若干个字节,并进行数据传输,因此效率相对较低。
                // 而使用 BufferedInputStream 可以对 FileInputStream 进行包装,每次读取时先将一定数量的数据读取到缓存区中,然后再逐个读取,减少了频繁的磁盘操作,提高了读取速度。
                // 具体来说,BufferedInputStream 内部维护了一个缓冲区,读取数据时会先从缓冲区中读取,如果缓冲区为空,则再从底层输入流中读取一定数量的字节并填充到缓冲区中,以此类推。
                BufferedInputStream bis = new BufferedInputStream(fis);
                //通过response对象获取OutputStream流
                OutputStream os = resp.getOutputStream();
                // 创建缓冲区
                int len;
                byte[] buff = new byte[1024];
                while((len = bis.read(buff)) != -1) {
                    //将缓冲区的数据输出到浏览器
                    os.write(buff, 0, len);
                }
                bis.close();
                fis.close();
                os.flush();
                os.close();
            } else {
                resp.getWriter().println("File not found");
            }
        }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doPost(req, resp);
    }
}

Response验证码

package com.qcnel;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class Captcha extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //浏览器2秒自动刷新一次
        resp.setHeader("refresh","1");

        //在内存中创建一个图片
        BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);

        //得到图片后对图片进行操作
        Graphics2D g = (Graphics2D) image.getGraphics();//笔

        //设置图片的背景颜色
        g.setColor(Color.white);
        g.fillRect(0,0,80,20);//颜色的填充范围
        //给图片写数据
        g.setColor(Color.black);
        g.setFont(new Font(null,Font.BOLD,20));
        g.drawString(num(),0,20);

        //告诉浏览器这个请求用图片的方式打开
        resp.setContentType("image/jpeg");

        //网站存在缓存,不让浏览器缓存会节省掉很多空间
        resp.setDateHeader("expires",-1);
        resp.setHeader("Catch-Control", "no-cache");
        resp.setHeader("Pragma","no-cache");

        //图片写给浏览器
        ImageIO.write(image,"jpg",resp.getOutputStream());

    }

    private String num(){
        Random random = new Random();
        String num = random.nextInt(9999999)+"";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 7-num.length(); i++) {
            sb.append("0");
        }
        num = sb.toString() + num;
        return num;
    }

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构(六)—— 二叉树(3)

文章目录 题1 589 N 叉树的前序遍历2 226 翻转二叉树递归迭代 3 101 对称二叉树递归迭代 4 104 二叉树的最大深度层序遍历直接解决递归 5 111 二叉树的最小深度层序遍历递归 6 222 完全二叉树的节点个数递归遍历 7 110 平衡二叉树递归 题 递归三部曲 1、确定递归函数的参数和返…

如何使用 PyTorch 进行半精度、混(合)精度训练

https://featurize.cn/notebooks/368cbc81-2b27-4036-98a1-d77589b1f0c4 nvidia深度学习加速库apex简单介绍 NVIDIA深度学习加速库Apex是一个用于PyTorch的开源混合精度训练工具包&#xff0c;旨在加速训练并减少内存使用。Apex提供了许多用于混合精度训练的工具&#xff0c;…

【Python基础入门学习】Python函数与变量的使用

python语法 1. 函数的快速体验2. 函数的基本使用2.1 函数的定义2.2 函数的调用2.3 第一个函数演练2.4 PyCharm 的调试工具2.5 函数的文档注释 3. 函数的参数3.1 函数参数的使用3.2 函数参数的作用3.3 形参和实参 4. 函数的返回值5. 函数的嵌套使用6 使用模块中的函数6.1 第一个…

码出高效:Java开发手册笔记(线程池及其源码)

码出高效&#xff1a;Java开发手册笔记&#xff08;线程池及其源码&#xff09; 码出高效&#xff1a;Java开发手册笔记&#xff08;线程池及其源码&#xff09; 码出高效&#xff1a;Java开发手册笔记&#xff08;线程池及其源码&#xff09;前言一、线程池的作用线程的生命周…

剑指 Offer:003 前 n 个数字二进制中 1 的个数

题目&#xff1a; 给定一个非负整数 n&#xff0c;请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数&#xff0c;并输出一个数组 示例&#xff1a; 1、 输入: n 2 输出: [0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10 2、 输入: n 5 输出: [0,1,1,2,1,2] 解释: 0 …

第2关:用flex生成PL语言的词法分析器

任务描述 经过上个任务的磨砺&#xff0c;相信大家已经熟悉了lex/flex的使用。这一次我们将利用flex工具生成PL语言的词法分析器&#xff0c;要求输入一个PL语言源程序文件demo.pl&#xff0c;输出一个文件tokens.txt&#xff0c;该文件包括每一个单词及其种别枚举值&#xff0…

【五一创作】Qt quick基础1(包含基本元素Text Image Rectangle的使用)

Qt quick基础1&#xff08;包含基本元素Text Image Rectangle的使用&#xff09; 目录 Qt quick基础1&#xff08;包含基本元素Text Image Rectangle的使用&#xff09;前言qt中有直接设计ui的拖拽式的widget&#xff0c;为什么还需要Qtquick?QML语言Qt 版本创建一个Qt quick项…

两分钟学会 制作自己的浏览器 —— 并将 ChatGPT 接入

前期回顾 分享24个强大的HTML属性 —— 建议每位前端工程师都应该掌握_0.活在风浪里的博客-CSDN博客2分享4个HTML5 属性&#xff0c;开发必备https://blog.csdn.net/m0_57904695/article/details/130465836?spm1001.2014.3001.5501 &#x1f44d; 本文专栏&#xff1a;开发…

一文解决MySQL突击面试,关键知识点总结

文章目录 MySQL重要知识点回顾一、索引1. 为什么需要索引2. 索引的结构3. 避免索引失效3.1 联合索引不满足最左匹配原则3.2 隐式转换3.3 like查询3.4 索引列存在运算或者使用函数3.5 优化器 4. 执行计划4.1 type4.2 key4.3 rows4.4 extra 5. 建立索引5.1 什么情况下应该建索引&…

【Unity入门】24.碰撞检测

【Unity入门】碰撞检测 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;碰撞体 &#xff08;1&#xff09;Collider组件 上节课我们有学习到&#xff0c;unity的物理系统提供了更方便的碰撞…

SPSS如何制作基本统计分析报表之案例实训?

文章目录 0.引言1.制作在线分析处理报告2.制作个案摘要报告3.制作行形式摘要报告4.制作列形式摘要报告 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结…

全注解下的SpringIoc 续5-Bean的作用域

Bean的作用域主要有以下5种&#xff1a; 因为globalSession的作用域实践中基本不使用&#xff0c;所以这里就不对其过多介绍了。 另外application的作用域也完全可以用singleton作用域来代替&#xff0c;所以这里也不对其过多介绍了。 所以&#xff0c;我们主要看看singleton、…

Java——IO:输入输出流技术

简介 在java中&#xff0c;数据的输入输出都是以流的方式来处理。 流&#xff08;Stream&#xff09;&#xff0c;是一个抽象的概念&#xff0c;是指一连串的数据&#xff08;字符或字节&#xff09;&#xff0c;是以先进先出的方式发送信息的通道。 JDK中与输入/输出有关的…

Renesas瑞萨A4M2和STM32 CAN通信

刚好拿到一块瑞萨开发板&#xff0c;捣鼓玩下CAN&#xff0c;顺便试下固件升级。 A4M2 工程创建 详细可以参考&#xff0c;我之前写的文章 Renesa 瑞萨 A4M2 移植文件系统FAT32 CAN0 配置信息&#xff0c;使能FIFO&#xff0c;接收标准帧 ID为0x50&#xff0c;数据帧。 代…

汇编语言学习笔记六

flag 寄存器 CF:进位标志位&#xff0c;产生进位CF1&#xff0c;否则为0 PF:奇偶位&#xff0c;如010101b&#xff0c;则该数的1有3个&#xff0c;则PF0,如果该数的1的个数为偶数&#xff0c;则PF1。0也是偶数 ZF:在相关指令执行后&#xff08;运算和逻辑指令&#xff0c;传送指…

yml、xml、json文件

目录 一、yml &#xff08;1&#xff09;注释 &#xff08;2&#xff09;内容语法 &#xff08;3&#xff09;取名规范 二、xml &#xff08;1&#xff09;注释 &#xff08;2&#xff09;内容语法 声明头 标签 关于cdata 三、json &#xff08;1&#xff09;注释 …

MySQL库和表

MySQL库操作 创建数据库 语法 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name说明: 大写的表示关键字[ ]是可选项CHARACTER…

axios使用笔记

文章目录 基本语法其他语法defaults config作用案例 创建实例对象作用案例 拦截器 interceptor&#xff08;AOP&#xff09;请求取消&#xff08;节流&#xff09; 基本语法 <!doctype html> <html lang"en"> <head><meta charset"UTF-8&…

ADRC自抗扰算法优化(PLC梯形图篇)

ADRC自抗扰算法PLC梯形图完整源代码请参看下面博客文章: ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-CSDN博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-CSDN博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家也可以关注韩京清…

6WINDGate-overview

6WINDGate Overview Author&#xff1a;Once Day Date&#xff1a;2023年4月29日 本文是对6WIND官网文档的整理和翻译&#xff0c;仅供学习和研究之用&#xff0c;原始文章可参考下面文档&#xff1a; 6WINDGate Documentation - 6WIND6WINDGate Modules — 6WINDGate Modul…