Request和Response应用

news/2025/2/22 20:06:36/

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 {@Overrideprotected 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);}@Overrideprotected 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 {@Overrideprotected 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");}}@Overrideprotected 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 {@Overrideprotected 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;}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}


http://www.ppmy.cn/news/57928.html

相关文章

Portapack应用开发教程(十八)NavTex接收 D

上回说到&#xff0c;我现在已经做到用自己的gnuradio流图从音频信号做fsk解调&#xff0c;得到方波。然后用c程序把方波转为二进制数。又用python把二进制数转为最终的字母。 但是遗留问题是python解码&#xff0c;起始位如果错误&#xff0c;解的信息是错的。另外&#xff0…

Blob File

文章目录 学习链接Blob创建演示 分片演示 Fileinput手动拖拽fetch 从后端获取流前端代码后端代码 window.showOpenFilePicker Filereader示例1示例2 ArrayBuffer创建bufferTypedArray读写bufferDataView读写buffer与Blob对比 Blob Url & DataUrl示例1示例2 学习链接 Blog …

Linux安装Mysql操作步骤详解

目录 1. 检测当前系统中是否安装了MySql数据库 2. 使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux 3. 解压并解包到/usr/local/mysql&#xff08;便于区分&#xff09; 第一步&#xff1a;将包先移动到该目录下 第二步&#xff1a;解压解包 第三步&#xff1a…

瑞吉外卖管理端具体代码

目录 以下是后台的部分代码&#xff1a; EmployeeController CategoryController DishController SetmealController OrderController 具体的代码可到&#xff1a;reggie_take_out: 瑞吉外卖——功能实现 - Gitee.com 全部页面展示: 以下是后台的部分代码&#xf…

ChatGPT数据分析助手

ChatGPT数据分析助手 简介&#xff1a; ChatGPT数据分析助手是一款专业的数据库及表格数据分析及应用工具&#xff0c;采用先进的对话式交互方式&#xff0c;让您轻松应对各种业务场景。它能帮助您轻松解决数据分析问题&#xff0c;减轻数据分析学习压力&#xff0c;让您专注于…

HashMap基本知识详解

HashMap 是什么&#xff1f; HashMap 是一种用于存储键值对的集合&#xff0c;可以用来快速访问、插入和删除数据。在 HashMap 中&#xff0c;键和值都可以是任意对象。 HashMap 内部数据结构是什么&#xff1f; HashMap 是基于数组和链表&#xff08;或红黑树&#xff09;实现…

【五一创作】Python 一文了解 OS 操作系统交互库简单使用方法

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

正则表达式学习笔记

re.match()的使用 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话&#xff0c;match&#xff08;&#xff09;就返回None 1.最常规的匹配 import re contect Hello 123 456789 World_this is a Regex Demores re.match(^Hello\s\d\d\d\s\d{6…