Request对象和Response对象

目录

request

请求报文的结构

常用方法

servlet实例

乱码问题

防盗链

response

响应报文的结构

常用方法

servlet实例

乱码问题

禁止缓存

总结

[Request 对象](#Request 对象)

[Response 对象](#Response 对象)


request对象是服务器对浏览器请求的封装,而response是服务器对服务器响应的封装。 request用来取出请求信息,而response则用来添加要返回给浏览器的信息。

request

请求报文的结构

request就是将请求报文封装而成的对象,所以通过request能获得请求文本中的所有内容,请求头、请求体、请求行 。

常用方法

java 复制代码
getRequestURL() //获取的完整的URL,即统一资源定位符
getRequestURI() //获取资源的名字,即统一资源标识符
getQueryString() //获取一个url参数部分
getRemoteAddr() //返回的是客户端的ip地址
getRemoteUser() //返回的是客户端的用户
getRemotePort() //返回的是客户端的主机的端口号
getRemoteHost() //返回的是客户端的主机地址
getCookie() //获取Cookie对象
getSession() //获取Session对象
getLocalName() //获取Web服务器主机的名字
getServletContext() //获取上下文对象的
setCharacterEncoding() //设置编码集的
getParameter() //获取前端传过来的数据
setAttribute() //将数据设置给request对象
geAttribute() //获取request对象中的数据

servlet实例

java 复制代码
package com.by.servlet;

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 RequestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, 
                          HttpServletResponse response) throws Exception {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, 
                         HttpServletResponse response) throws Exception{
        //获取一个完整的url
        //http://localhost:8080/01_servlet_HelloWorld_war/request1
        System.out.println(request.getRequestURL());
        //获取资源的名字
        //比如:http://localhost:8080/day42_xkh/request1
        System.out.println(request.getRequestURI());///01_servlet_HelloWorld_war/request1
        //获取一个url的参数部分
        //比如 http://localhost:8080/01_servlet_HelloWorld_war/request1?username=goudan
        System.out.println(request.getParameter("username"));

        //获取前端传送过来的数据
        request.setCharacterEncoding("utf-8");//设置请求的编码集
        //给request这个对象设置数据
        request.setAttribute("name","狗蛋");
        //获取request对象的值
        request.getAttribute("name");
        //获取上下文对象
        ServletContext servletContext = request.getServletContext();
        //转发
        request.getRequestDispatcher("target.jsp").forward(request,response);
    }
}
XML 复制代码
    <servlet>
        <servlet-name>request</servlet-name>
        <servlet-class>com.by.servlet.RequestServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>request</servlet-name>
        <url-pattern>/context</url-pattern>
    </servlet-mapping>

乱码问题

java 复制代码
request.setCharacterEncoding("utf-8");  //设置request对象的解码方式

防盗链

在平时的使用当中,我们会发现下载文件的时候会有一个下载地址,有的人直接将这个地址复制到其他地方,然后贴上下载,就盗取了别人的资源,这种白嫖行为我们就称之为盗链。

我们可以利用request来防范这种白嫖行为,我们只需要在下载页面做下简单的来源判断。如果不是来自本站的连接,则直接拒绝访问。

java 复制代码
    //获取请求来源 
    String referer = request.getHeader("referer"); 
    //判断这个来源是否是自己认可的
    if(referer.euqals(...)){
        ...
    }else{
        response.getWriter.print("休想白嫖");
    }

response

响应报文的结构

Tomcat传给Servlet时,它还是空的对象。Servlet逻辑处理后得到结果,最终通过response.write()方法,将结果写入response内部的缓冲区。Tomcat会在servlet处理结束后,拿到response,遍历里面的信息,组装成HTTP响应发给客户端。

HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

常用方法

java 复制代码
setHeader() //设置响应头的参数
setContentType() //设置字符编码集
getWriter() //获取字符输出流对象
addCookie() //对浏览器新增一个Cookie
sendRedirect() //重定向

servlet实例

java 复制代码
package com.by.servlet;

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 ResponseServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, 
                         HttpServletResponse response) throws Exception{
        /**************乱码问题*****/
        //方式一
        response.setCharacterEncoding("utf-8");//设置 HttpServletResponse使用utf-8编码
        response.setHeader("Content-Type", 
                           "text/html;charset=utf-8");//通知浏览器使用utf-8解码
        //方式二
        response.setContentType("text/html;charset=utf-8;aaa=bbb");    //包含方法一的两个功能

        //向客户端发送响应数据
        response.getWriter().write("<h1>hello<h1>");

        /************重定向***********/
        //方式一
        //在响应头中添加302状态码,告诉浏览器需要进行重定向
        response.setStatus(302);
        //在响应头中添加Location,指定重定向的位置
        response.setHeader("Location", "http://www.baidu.com");
        //方式二
        response.sendRedirect("http://www.baidu.com");  //包含方法一的两个功能
    }
}
XML 复制代码
  <servlet>
        <servlet-name>response</servlet-name>
        <servlet-class>com.by.servlet.ResponseServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>response</servlet-name>
        <url-pattern>/response</url-pattern>
    </servlet-mapping>

乱码问题

方法一:

response.setCharacterEncoding("utf-8");    //设置 HttpServletResponse使用utf-8编码
response.setHeader("Content-Type", "text/html;charset=utf-8");    //通知浏览器使用utf-8解码

方法二:

response.setContentType("text/html;charset=utf-8");    //包含方法一的两个功能

禁止缓存

有时候我们想让用户端不缓存html,css,js等资源,我们可以通过对response头进行一定的设置来实现这样的功能,代码如下:

  response.setHeader("Cache-Control", "no-cache");
  response.setHeader("Pragma", "no-cache");
  response.setDateHeader("Expires", -1);

总结

|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|
| | #### Request 对象 | #### Response 对象 |
| 用途 | * 代表客户端(通常是浏览器)发出的 HTTP 请求。 * 包含了客户端请求的所有信息,比如参数、头部信息、URL 等。 | * 用于向客户端发送 HTTP 响应。 * 包含了要发送给客户端的所有信息,比如数据、响应头等。 |
| 功能 | * 获取客户端请求的各种信息,比如参数、请求头、请求方式等。 * 用于读取客户端提交的数据。 * 提供了会话管理功能,可以访问会话对象并存储/检索会话属性。 | * 发送响应数据给客户端,如 HTML、JSON、文件等。 * 设置响应头,控制缓存、重定向等。 * 维护会话和 Cookie 信息。 |
| 主要方法 | * getParameter(String name):获取特定参数的值。 * getHeader(String name):获取特定请求头的值。 * getSession():获取与请求关联的会话对象。 * getRequestDispatcher(String path):用于请求转发或包含其他资源。 | * setContentType(String type):设置响应内容的类型。 * getWriter():获取用于向客户端发送字符文本的 PrintWriter 对象。 * sendRedirect(String location):执行重定向到另一个页面。 |
| 相互作用 | * Request 对象负责接收来自客户端的请求信息。 * Response 对象负责向客户端发送处理完请求后的响应。 ||
| 生命周期 | * Request 对象通常在客户端发起请求时创建,并在服务器处理完请求后销毁。 * Response 对象在服务器收到请求并生成响应时创建,并在响应发送完毕后销毁。 ||

相关推荐
Chrikk8 分钟前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*11 分钟前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue11 分钟前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man13 分钟前
【go从零单排】go语言中的指针
开发语言·后端·golang
cs_dn_Jie14 分钟前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
测开小菜鸟15 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
开心工作室_kaic1 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿1 小时前
webWorker基本用法
前端·javascript·vue.js
P.H. Infinity1 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天1 小时前
java的threadlocal为何内存泄漏
java