Servlet p4 HttpServletResponse对象

这篇具有很好参考价值的文章主要介绍了Servlet p4 HttpServletResponse对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HttpServletResponse对象

基本介绍

​ Web服务器收到客户端的http请求,会针对每次请求,分别创建一个用于代表请求的 request对象 和代表响应的 response对象。

​ request 和 response对象 代表请求和响应:获取客户瑞数据,需要通过request对象;向客户端输出数据需要通过response对象

​ HttpServletResponse的主要功能用于服务器对客户端的请求进行响应,将Web服务器处理后的结果返回给
客户端。service(O方法中形参接收的是HttpServletResponse接口的实例化对象,这个对象中封装了向客户端发
送数据、发送响应头,发送响应状态码的方法。

响应数据

​ 接收客户端请求后,可以通过 HttpServletResponse对象 直接进行响应,响应时需要获取输出流。

有两种形式:

  • getWriter():获取字符流(只能响应字符)

    //获取字符输出流
    PrintWriter writer = resp.getWriter();
    //输出数据
    writer.write("hello");
    
  • getOutputStream():获取字节流(能响应一切数据)

    //获取字节输出流
    ServletOutputStream outputStream = resp.getOutputStream();
    //输出数据
    outputStream.write("hi".getBytes());
    

注意:二者不能同时使用,因为resp对象只能响应一次,再次调用就不存在了。

响应乱码问题

​ 在响应中,如果我们响应的内容中含有中文,则可能出现乱码。这是因为服务器响应的数据也会经过网络传输,f服务器端有一种编码方式,在客户端也存在一种编码方式,当两端使用的编码方式不同时则出现乱码。

  • getWriter()字符乱码问题

    ​ 对于getWriter()获取到的字符流,响应中文必定出乱码,由于服务器端在进行编码时默认会使用1S0-8859-1格式的编码,该编码方式并不支持中文。

    要解决该种乱码只能在服务器端告知服务器使用一种能够支持中文的编码格式,比如我们通常用的"UTF-8"。

    response.setcharacterEncoding("UTF-8");

    此时还只完成了一半的工作,要保证数据正确显示,还需要指定客户端的解码方式。

    response.setHeader("content-type","text/html;charset=UTF-8");

    两端指定编码后,乱码就解决了。一句话:保证发送端和接收端的编码一致。

    //设置服务端的编码
    response.setcharacterEncoding("UTF-8");
    //设置客户端的响应类型及编码
    response.setHeader("content-type","text/html;charset-UTF-8");
    //得到字符输出流
    Printwriter writer response.getwriter();
    writer.write("<h2>你好</h2>");
    

    以上两端编码的指定也可以使用一句替代,同时指定服务器和客户端

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

  • getOutputStream()字符乱码问题

    ​ 对于getOutputStream(0方式获取到的字节流,响应中文时,由于本身就是传输的字节,所以此时可能出现乱码,也可能正确显示。当服务器端给的字节恰好和客户端使用的编码方式一致时,则文本正确显示,否则出现乱
    码。无论如何我们都应该准确掌握服务器和客户端使用的是那种编码格式,不能留下不确定因素,以确保数据正确显示。

    直接指定客户端和服务器使用的编码方式一致

    response.setHeader("content-type","text/html;charset-UTF-8");

    //设置客户端的编码及响应类型
    Servletoutputstream out response.getoutputstream();
    response.setHeader("content-type","text/html;charset=UTF-8");
    out.write("<h2></h2>".getBytes("UTF-8"))
    

重定向

​ 重定向是一种服务器指导,客户端的行为。客户端发出第一个请求,被服务器接收处理后,服务器会进行响应,在响应的同时,服务器会给客户端一个新的地址(下次请求的地址response.sendRedirect(url:),当客户端接收到响应后,会立刻、马上、自动根据服务器给的新地址发起第二个请求,服务器接收请求并作出响应,重定向完成。

从描述中可以看出重定向当中有两个请求存在,并且属于客户端行为。

//重定向跳转到servlet05
response.sendRedirect("s05");

通过观察浏览器我们发现第一次请求获得的响应码为302,并且含有一个location头信息。并且地址栏最终看到的地址是和第一次请求地址不同的,地址栏已经发生了变化。

Servlet p4 HttpServletResponse对象

Servlet p4 HttpServletResponse对象

servlet04代码:

package com.xxxx.servlet;

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

/**
 * @author: 86199
 * @date: 2023/6/17 10:36
 * Description: 重定向
 * 存在两次请求
 * 地址栏会发生改变
 * request对象不共享
 */
@WebServlet("/s04")
public class Servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet04....");

        // 接收参数
        String uname = req.getParameter("uname");
        System.out.println("servlet04 uname = " + uname);

        //重定向跳转到05
        resp.sendRedirect("s05");
    }
}

servlet05代码:

package com.xxxx.servlet;

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

/**
 * @author: 86199
 * @date: 2023/6/17 10:36
 * Description: 重定向
 */
@WebServlet("/s05")
public class Servlet05 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet05....");

        // 接收参数,无法拿到,毕竟s04和s05之间也没有共享req对象
        String uname = req.getParameter("uname");
        System.out.println("servlet05 uname = " + uname);
    }
}

请求转发和重定向的区别

请求转发和重定向比较

Servlet p4 HttpServletResponse对象

两者都可以进行跳转,根据实际需求选取。

代码演示:

package com.xxxx.servlet;

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

/**
 * @author: 86199
 * @date: 2023/6/17 10:36
 * Description: 重定向和请求转发的区别
 * 1. 请求转发的地址栏不会发生改变,重定向的地址栏会发生改变
 * 2. 请求转发只有一次请求,重定向有两次请求
 * 3. 请求转发时request对象可以共享,重定向不能共享
 * 4. 请求转发是服务端的行为,重定向是客户端行为
 * 5. 请求转发时的地址只能是当前站点下的(当前项目)资源,重定向时地址可以是任意地址
 */
@WebServlet("/s06")
public class Servlet06 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet06....");

        // 接收参数
        String uname = req.getParameter("uname");
        System.out.println(uname);

        //设置request域对象
        req.setAttribute("upwd", "123456");

        //请求转发
        req.getRequestDispatcher("index.jsp").forward(req, resp);

        //重定向
//        resp.sendRedirect("index.jsp");
        //重定向跳转到百度
//        resp.sendRedirect("http://www.baidu.com");

        //请求转发到百度,404找不到
//        req.getRequestDispatcher("http://www.baidu.com");
    }
}

index.jsp文件代码:文章来源地址https://www.toymoban.com/news/detail-514023.html

<%--
  Created by IntelliJ IDEA.
  User: 86199
  Date: 2023/6/16
  Time: 11:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%--    Java脚本段--%>
  <%
    //获取参数
    String uname = request.getParameter("uname");
    //获取request作用域
    String upwd = (String) request.getAttribute("upwd");

    //输出内容
    out.print(uname);
    out.print("================");
    out.print(upwd);
  %>
  </body>
</html>

到了这里,关于Servlet p4 HttpServletResponse对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++系列P4】‘类与对象‘-三部曲——[类](2/3)

     前言 大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎! 【 \\\'类与对象\\\'-三部曲】的大纲主要内容如下 : 如标题所示,本章是【 \\\'类与对象\\\'-三部曲】三章中的第二章节—— 类章节 ,主要内容如下: 目录 一.类 1.类的组成与计算类的大小(含结构体内存对齐规则) 二. 空类的大小

    2024年02月08日
    浏览(40)
  • Java 中,使用 HttpServletResponse 对象将服务器上的文件响应到客户端浏览器进行下载

    在服务器端,使用 FileInputStream 打开要下载的文件,并将其读取到字节数组中。 2.设置 HttpServletResponse 的响应头信息,告诉浏览器需要下载文件,并指定文件名和文件类型 其中,Content-Type 表示响应内容的类型,这里设置为 application/octet-stream,表示二进制流。Content-Length 表示

    2024年02月13日
    浏览(66)
  • Servlet p5 Cookie对象

    Cookie是浏览器提供的一种技术,通过服务器的程序能将一些只须保存在客户端,或者在客户端进行处理的数据,放在本地的计算机上,不需要通过网络传输,因而提高网页处理的效率,并且能够减少服务器的负载,但是由于Cook是服务器端保存在客户端的信息,所以其安全性也

    2024年02月11日
    浏览(48)
  • Servlet p3 HttpServletRequest对象

    ​ HttpServletRequest对象: HttpServletRequest 对象专门用于封装 HTTP 请求消息,简称 request 对象。主要作用是用来接收客户端发送过来的请求信息,该对象是由Tomcat封装好传递过来。 ​HttpServletRequest接口是ServletRequest的子接口。HTTP 请求消息分为请求行、请求消息头和请求消息体三

    2024年02月11日
    浏览(35)
  • Servlet p7 ServletContext对象

    每一个 web 应用都有且仅有一个 ServletContext 对象 ,又称为 Application 对象,从名称中可知,该对象是与应用程序相关的。在WEB 容器启动时,会为每一个 WEB 应用创建一个对应的 ServletContex对象。 该对象有两大作用: 作为域对象来共享数据,此时数据在整个应用程序中共享;

    2024年02月12日
    浏览(37)
  • Servlet p6 HttpSession对象

    HttpSession 对象是javax.servlet.http.HttpSession的实例,该 接口 井不像HttpServletRequest或 HttpServletResponse还存在一个父接口,该接口只是一个纯粹的接口。这因为session本身就属于HTTP协议的 范畴。 会话: 用户打开浏览器,访问Web服务器的资源,会话建立,直到有一方断开连接,会话结

    2024年02月12日
    浏览(32)
  • 【Servlet篇】一文带你读懂Request对象

    你问我青春还剩几年?我的回答是,趁现在,正当时。身边朋友都在问我怎样学好一门编程语言,怎样学好Java?怎样通过 Java 找到一份满意的工作?推荐学习此专栏:Java编程基础教程系列(零基础小白搬砖逆袭) 最近一直在更新 Servlet 的文章,在前面一篇中说到 sev

    2024年01月20日
    浏览(62)
  • Servlet API中使用Request对象获取HTTP协议请求内容

    在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门 用来封装HTTP请求消息。 由于HTTP请求消息分为请求行、请求头和请求体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求消息体的相关方法. Web服务器【tomcat】收到客户端的

    2024年02月11日
    浏览(49)
  • 创建javaEE项目(无maven),JSP(九大内置对象)、Servlet(生命周期)了解

    1.创建一个普通的java项目 2.项目根目录右键,添加模板 3.配置tomcat服务器 4.配置项目tomcat依赖         用户通过浏览器发送一个请求,服务器tomcat接收到后,解析web.xml配置文件进行分析执行接口对应的类;         Tomcat服务器支持:支持Servlet规范。而要想让它能找到

    2024年02月05日
    浏览(49)
  • 板块一 Servlet编程:第六节 HttpSession对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

    在上一节中,我们学习了Servlet五大对象里的第三个Cookie对象,但Cookie是有大小限制和数量限制的,并且越来越多的Cookie代表客户端和服务器的传输量增加,可不可以每次传的时候不传所有Cookie值,而只传一个唯一ID,通过这个ID直接在服务器查找用户信息呢?答案是有的,这

    2024年02月21日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包