Request和Response应用

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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);
    }
}


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6