response应用

下载文件

package com.mrli;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.w3c.dom.ls.LSOutput;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

public class responseServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	//获取需要下载的文件绝对路径
        String realpath="D:\\idea\\javaweb-maven-01\\response\\src\\main\\resources\\img.png";
        System.out.println(realpath);
        //需要下载的文件名
        String filename=realpath.substring(realpath.lastIndexOf("\\")+1);
        //设置response头信息
        resp.setHeader("Content-Dispostion","attachment;filename="+ URLEncoder.encode(filename,"UTF-8"));
        //获取文件输入流
        FileInputStream fis = new FileInputStream(realpath);
        //创建缓冲区
        int len=0;
        byte[] buffer=new byte[1024];
        //获取响应输出流
        ServletOutputStream outputStream = resp.getOutputStream();
        while((len=fis.read(buffer))!=-1){
        	//输出文件
            outputStream.write(buffer,0,len);
        }
        
		//关闭资源
        fis.close();
        outputStream.close();
    }

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

实现验证码功能

package com.mrli;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class imageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setHeader("refresh","3");//告诉浏览器每三秒刷新一次
        BufferedImage bufferedImage = new BufferedImage(100, 30, BufferedImage.TYPE_INT_RGB);//在内存中创建一个图片

        Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics();//获得图片的笔

        graphics.setColor(Color.white);//设置画笔颜色
        graphics.fillRect(0,0,100,30);//填充一个举行,从(x,y)开始填充,填充一个widdth*height的矩形

        graphics.setColor(Color.BLUE);//设置画笔颜色
        graphics.setFont(new Font(null,Font.BOLD,25));//设置画笔的字体
        graphics.drawString(randomNum(8),0,30);//画一个字符串


        resp.setContentType("image/jpg");//设置响应类型为jpg格式的image

        //告诉浏览器不要缓存
        resp.setDateHeader("expires",-1);
        resp.setHeader("Cache-Control","no-cache");
        resp.setHeader("Pragma","no-cache");

        //将图片写入到响应对象
        ImageIO.write(bufferedImage,"jpg",resp.getOutputStream());
    }

    //获取n长度的随机数
    private String randomNum(int n){
        Random random =new Random();
        String str = "";
        for (int i = 0; i < n; i++) {
             str+= random.nextInt(10) + "";
        }
        return str;
    }

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

重定向

index.jsp表单提交之后到项目目录下的/login下处理请求

<html>
<body>
<h2>Hello World!</h2>

<form action="${pageContext.request.contextPath}/login" method="get">
    用户名:<input type="text" name="username">
    密码:<input type="password" name="password">
    <input type="submit">
</form>
</body>
</html>

处理请求的文件

package com.mrli;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class loginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username=req.getParameter("username");//getParameter获取请求中的一个参数
        String password=req.getParameter("password");

        System.out.println(username+"---->"+password);

		//sendRedirect重定向做的事情就是下面这两句
		//resp.setHeader("Location","/img");
        //resp.setStatus(302);
        resp.sendRedirect("/r/img");//sendRedirect重定向
    }

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

面试题:请你说说重定向和转发的区别?
相同点

  • 都会跳转页面

不同点

  • 转发不会改变url,307
  • 重定向会改变url,302
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值