request与response的笔记梳理

tomcat小问题梳理

tomcat如何项目路径能正常发布,但是8080端口在Idea中启动之后出现404的情况,多半是没有加入ROOT文件夹,可以按照如下流程配置。
在这里插入图片描述
在这里插入图片描述

request

一.获取请求参数的方法介绍
1.getParameter(name): 根据一个参数名获取一个参数值。
2.getParameterValues(name): 根据一个参数名获取多个参数值。
3.getParameterMap(): 获取获取所有的请求参数。
二.使用BeanUtils封装
BeanUtils是 Apache Commons组件的成员之一,主要用于简化JavaBean封装数据的操作。这个jar能够自动转化数据类型。
在这里插入图片描述
jai包链接:链接:https://pan.baidu.com/s/1l3GaBXCUx5ScVNCQaDd83g
提取码:x2ug
三.request携带数据请求
servletContext不一样的是,ServletContext是整个共享对象,而request只作用于一次数据请求,因为这个特殊的格式,所以request一般与request.getRequestDispatcher(“SecondDemo”).forward(request,response);连用 用于携带数据。

response

一.状态码
1.200: ok,一切正常
2.302: 重定向
3.304: 从缓存中获取
4. 403: 拒绝
5. 404: 资源未找到
6. 500 服务器发生异常
response.status(状态码)设置相应行状态码
二.常见响应头
关注的方法:setHeader(String name,String value)
1.Refresh: 定时跳转(eg:服务器告诉浏览器XX秒之后跳转到XX界面)。response.setHeader(“refresh”,“秒数;url=跳转的路径”);


2.Location: 重定向地址(eg:服务器告诉浏览器跳转到XX)
3.Context-Disposition: 告诉浏览器下载
4.Content-Type: 设置响应内容的MIME类型(服务器告诉浏览器内容的类型)

重定向和请求转发跳转的对比:

1.谁发起的跳转?
1.1 : 请求转发的跳转是由服务器发起的
1.2 : 重定向的跳转是由浏览器发起的
2.能跳转到哪些资源?
2.1 : 请求转发只能跳转到本项目的资源
2.2 : 重定向可以跳转到本项目和外部项目的资源
3.是否能访问WEB-INF中的资源
3.1: 请求转发可以访问WEB-INF中的资源
3.2: 重定向不可以访问 WEB-INF中的资源
4.发起几次请求?
4.1: 请求转发发起一次请求。
4.2: 重定向发起二次请求。
5.地址栏是否发生变化?
5.1: 请求转发地址栏不发生变化。
5.2: 重定向地址栏发生变化。
6.是否能和request域对象存取值一起使用?
6.1: 请求转发能和域对象存取值一起使用。
6.2: 重定向不可以和域对象存取值一起使用。


7.字符流与字节流向浏览器输出文件使用方法

字符流输出文本

7.1.response.getWriter().println(" "),一般来说只输出字符串的时候write() 比println效率更高。
需要注意的是使用此方法输出中文的时候可能会出现中文乱码,因此我们需要在之前加上代码:

response.setContentType("text/html;charset=UTF-8");

注意:这是解决响应头的乱码的问题的。

字节流输出文件

getServletContext()可以在Servlet笔记梳理里面找到。

//读取io图片,转化为字节输入流,
        InputStream resourceAsStream = getServletContext().getResourceAsStream("授权root.PNG");
        //将io流输出到浏览器
        ServletOutputStream outputStream = response.getOutputStream();
        //工具包详见百度网盘,lib文件夹在web-inf里面
        IOUtils.copy(resourceAsStream,outputStream);

链接:https://pan.baidu.com/s/1lkNzg3lvyeWgsdINp5mqVw
提取码:3n8r

8.文件下载的方式
  • 第一种:超链接方式(不推荐)

    链接的方式:直接将服务器上的文件的路径写到href属性中.如果浏览器不支持该格式文件,那么就会提示进行下载, 如果浏览器支持这个格式(eg: png, jpg…)的文件,那么直接打开,不再下载了

  • 第二种:手动编码方式(推荐)

    手动编写代码实现下载.无论浏览器是否识别该格式的文件,都会下载.

    download.jsp

<%--
  Created by IntelliJ IDEA.
  User: weijisheng
  Date: 2021/10/28
  Time: 20:22
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件下载界面</title>
</head>
<body>
<h2>超链接方式下载</h2>
<a href="imgs/a.jpg">a.jpg</a><br/>
<a href="imgs/b.jpg">b.jpg</a><br/>
<a href="imgs/WEB01.zip">WEB01.zip</a><br/>
<a href="imgs/美女.jpg">美女.jpg</a><br/>
<a href="imgs/霉女.jpg">霉女.jpg</a><br/>
</body>
<hr>
<h2>自定义servlet下载</h2>
<a href="Download?fileName=a.jpg">a.jpg</a>
<a href="Download?fileName=b.jpg">b.jpg</a>
<a href="Download?fileName=WEB01.zip">WEB01.zip</a>
<a href="Download?fileName=美女.jpg">美女.jpg</a>
<a href="Download?fileName=霉女.jpg">霉女.jpg</a>
</html>

download.servlet

package com.weijisheng.servlet;

import com.sun.deploy.net.URLEncoder;
import org.apache.commons.io.IOUtils;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author weijisheng
 * @create 2021-10-28 20:41
 */
@WebServlet("/Download")
public class DownloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //System.out.println("收到一个下载请求... "+request.getParameter("fileName"));
        //1.获取到客户端想要下载的文件名
        String fileName = request.getParameter("fileName");
        //可以设置下载的Mime-type
        String mimeType = getServletContext().getMimeType(fileName);
        response.setHeader("Content-Type",mimeType);
        //2.使用字节输入流读取客户端要下载的文件
        InputStream resourceAsStream = getServletContext().getResourceAsStream("imgs/" + fileName);
        //3.使用字节输出流,将图片输出到浏览器
        ServletOutputStream outputStream = response.getOutputStream();
        //4.使用IOUtils进行拷贝
        //5.在输出之前,通过设置响应头的方式,只是客户端下载文件,并对其编码防止其出现中文乱码问题
        //编码
        //String encodeFieName= URLEncoder.encode(fileName,"UTF-8");
        response.setHeader("Content-Disposition","attachment;filename="+fileName);
        IOUtils.copy(resourceAsStream,outputStream);
        outputStream.close();
        resourceAsStream.close();
    }
}

解决中文乱码那行代码会报500,还未解决。
9.response处理中文乱码问题

//设置缓存区编码为UTF-8编码格式
response.setCharacterEncoding("UTF-8");
 
//在响应中主动告诉浏览器使用UTF-8编码格式来接收数据
response.setHeader("Content-Type", "text/html;charset=UTF-8");
 
//可以使用封装类简写Content-Type,使用该方法则无需使用setCharacterEncoding
response.setContentType("text/html;charset=UTF-8");

本次内容复习xmind可访问以下百度网盘
链接:https://pan.baidu.com/s/16Y8diGk8_qXX3nBxRev61g
提取码:vx79

字符集和字符集编码链接
链接:https://pan.baidu.com/s/1hvXp5NZv1L3OIeTgrkazUw
提取码:uykk
响应头查看链接
链接:https://pan.baidu.com/s/1UDFpOrmi-qh34YjxkAgArw
提取码:5e9y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值