首页 > 其他分享 >Servlet的response对象

Servlet的response对象

时间:2024-05-26 16:29:54浏览次数:19  
标签:浏览器 对象 void request public 响应 Servlet response

目录

HTTP响应报文协议

reponse继承体系

reponse的方法

响应行

public void setStatus(int sc)

响应头

public void setHeader(String name, String value)

响应体

public java.io.PrintWriter getWriter() 

public ServletOutputStream getOutputStream() 

请求重定向

请求转发

public RequestDispatchergetRequestDispatcher(String path)

void forward(ServletRequest var1, ServletResponse var2)


HTTP响应报文协议

前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>GET请求</h2>
    <form action="/reGetServlet" method="get">
        <input type="text" name="username"/> <br>
        <input type="text" name="password"/> <br>
        <input type="submit" value="提交"> <br>
    </form>
    <h2>POST请求</h2>
    <form action="/postServlet" method="post">
        <input type="text" name="username"/> <br>
        <input type="text" name="password"/> <br>
        <input type="submit" value="提交"> <br>
    </form>
</body>
</html>

servlet

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/reGetServlet")
public class ReGetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("response...");
    }

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

浏览器

  

响应行

响应头

响应体

总结

响应报文协议:服务器发给浏览器的数据遵守的规范

响应报文协议包括:

1.响应行

2.响应头

3.响应体

响应行:
1.响应状态码  200 404 500 405 302 304

2.响应协议/版本  http/1.1

响应头:
服务器时间

响应数据的字符个数

响应体:
服务器响应给浏览器的数据

如果浏览器请求的是静态资源页面,那么tomcat服务器就会响应给浏览器静态资源 

reponse继承体系

因为ServletReponse和HttpServletReponse都是接口,不能创建出对象,所以tomcat会在底层创建ReponseFacade门面类对象-->ServletReponse reponse=new ReponseFacade();

然后将响应对象传递给service的doGet() doPost()方法。 

reponse的方法

响应行

public void setStatus(int sc)

设置此响应的状态代码。此方法用于设置没有错误时的返回状态代码

响应头

public void setHeader(String name, String value)

 

用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值。containsHeader 方法可用于测试在设置其值之前头是否存在。

name头的名称
value头值,如果该值包含八位字节字符串,则应该根据 RFC 2047 (http://www.ietf.org/rfc/rfc2047.txt) 对其进行编码
See alsocontainsHeader, addHeader

响应体

对于响应体,是通过字符,字节输出流的方式往浏览器写 

public java.io.PrintWriter getWriter() 

获取字符输出流

返回可将字符文本发送到客户端的 PrintWriter 对象。

public ServletOutputStream getOutputStream() 

获取字节输出流

此方法的默认行为是返回对包装的响应对象调用 getOutputStream() 的结果。

请求重定向

重定向:属于服务器外部跳转的行为。当服务器某个资源没有处理业务的能力,会将新的服务器地址告知浏览器(location),并设置状态码304。浏览器会拿着新的地址再次向服务器发送请求

response.setStatus(302);

response.setHeader("location","资源B的访问路径")

特点
1. 服务器外部跳转

2.两次请求和响应

3.地址栏发生改变,记录最后一次的地址

4.不能共享request域对象

 测试

@WebServlet("/reponseDemo1")
public class reponseDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我无法处理");
       /* response.setStatus(302);//设置状态码
        response.setHeader("location","/reponseDemo2");//告知资源B的地址*/

        //简写
        response.sendRedirect("/reponseDemo2");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);B
    }
}
@WebServlet("/reponseDemo2")
public class reponseDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我可以处理");
        //响应数据给浏览器
        response.getWriter().println("success...");
    }

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

浏览器:最后的地址的responseDemo2

请求转发

使用

public RequestDispatchergetRequestDispatcher(String path)

path:要跳转服务器的路径

void forward(ServletRequest var1, ServletResponse var2)

特点
1. 服务器内部跳转

2.一次请求和响应

3.地址栏没有改变

4.共享request域对象

测试

@WebServlet("/responseDemo3")
public class responseDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //请求转发
        System.out.println("responseDemo3...");

        //向request域对象存储数据
        request.setAttribute("msg","我无法解析");
        //获取转发器
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/responseDemo4");

        requestDispatcher.forward(request,response);//转发
    }

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

@WebServlet("/responseDemo4")
public class responseDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("responseDemo4...");
        //获取request域对象的数据
        Object msg = request.getAttribute("msg");
        System.out.println(msg);

    }

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

浏览器页面:地址没有变

响应字符数据中文乱码问题

 如果响应给浏览器的数据是中文,会出现中文乱码问题
 原因:tomcat传输中文使用默认的编码表ISO-8859-1对中文进行编码,然后将编码数据发送给浏览器  浏览器默认码表是utf-8,进行解码就会乱码
 解决:将响应的中文使用utf-8编码,同时告知浏览器使用utf-8解码

 处理响应乱码
        响应头 content-type 告知浏览器当前响应书数据的MINE类型,就是文件在tomcat的类型
        普通文本:text/plain
        超文本:text/html   text/html;charset=utf-8->告知浏览器响应的是超文本,并且使用编码表utf-8
        

 

@WebServlet("/responseDemo5")
public class responseDemo5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       /* 如果响应给浏览器的数据是中文,会出现中文乱码问题
        原因:tomcat传输中文使用默认的编码表ISO-8859-1对中文进行编码,然后将编码数据发送给浏览器
        浏览器默认码表是utf-8,进行解码就会乱码
        解决:将响应的中文使用utf-8编码,同时告知浏览器使用utf-8解码
        */
        /*处理响应乱码
        响应头 content-type 告知浏览器当前响应书数据的MINE类型,就是文件在tomcat的类型
        普通文本:text/plain
        超文本:text/html   text/html;charset=utf-8->告知浏览器响应的是超文本,并且使用编码表utf-8
         */
        //response.setHeader("content-type","text/html;charset=utf-8");

        //简写
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print("你好");



    }

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

 

标签:浏览器,对象,void,request,public,响应,Servlet,response
From: https://blog.csdn.net/luosuss/article/details/139184041

相关文章

  • C++ STL 函数对象:隐藏的陷阱,如何避免状态带来的麻烦?
    STL函数对象:无状态即无压力一、简介二、函数对象三、避免在函数对象中保存状态3.1、函数对象3.2、lambda表达式四、选择合适的更高层次的结构五、总结一、简介在使用C++标准模板库(STL)时,函数对象(FunctionObject)是一种强大的工具,它可以帮助你编写更具表......
  • 关于对于Java中Entity以及VO,以及DTO中Request对象序列化的学习
    关于Serializable的探讨前提引入是由于软件测试上有同学提到说,什么该字段在程序刚运行时,导致jvm激增,所以吸引了我的注意回顾代码MybatisPlusGenerator自动生成的entity中就经常带有这个,而且我在开发代码的时候VO,以及DTO常常是直接复制对应的entity,所以也保不齐我对应......
  • JavaSE什么是面向对象?
    目录重点!!!面向对象面向过程与面向对象面向过程的程序思想面向对象程序思想类和对象(面向对象的核心概念)类:类的结构对象:(Everythingisanobject)重点!!!面向对象面向过程与面向对象面向过程和面向对象都是程序设计的一种风格(思想);面向过程的程序思想​ 面向过程编程是......
  • Pandas分类对象——《Python数据分析库Pandas》
    Pandas分类对象——《Python数据分析库Pandas》Pandas分类对象分类对象的创建分类对象的属性和方法分类对象的应用场景示例:使用分类对象进行数据分析总结Pandas分类对象Pandas分类对象(Categorical)是Pandas库中一种用于处理分类数据的数据类型。分类数据......
  • 七种常见的面向对象设计原则
     设计原则名称定义使用频率单一职责原则一个类只负责一个功能领域中的相应职责 四颗星开闭原则软件实体应对扩展开发,而对修改关闭 五颗星 里氏代换原则所有引用基类对象的地方能够透明地使用其子类的对象 五颗星依赖倒转原则抽象不应该依赖于细节......
  • Java对象头你不知道的地方
    在Java中,每个对象都拥有一个对象头,这些对象头包含了关于对象的一些元数据信息。对象头(Header)包含2部分(若为数组,则包含3部分):一、第一部分为MarkWord,用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。在32位虚拟......
  • Django视图层——2HttpReqeust对象&QueryDict对象
    HttpReqeust对象服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API属性下面除非特别说明,属性都是只读的path:一个字符串,表示请求的页面的完整路径,不包含域名method:......
  • 【源码翻译之交互式对象包 AIS-AIS_ColoredShape.hxx文件 多颜色交互式对象
    类AIS_ColoredShape形状的呈现具有可自定义的子形状属性。此类可以将topods的子拓扑分别设置不同的颜色然后作为一个整体显示成员类型定义文档◆DataMapOfDrawerCompdtypedefNCollection_IndexedDataMap<Handle<AIS_ColoredDrawer>,TopoDS_Compound,TColStd_MapT......
  • 数据访问层设计_6.连接对象管理设计
    1.数据库连接管理     在基于JDBC的数据库应用开发中,数据库连接的管理是一个难点,因为它是决定该应用性能的一个重要因素。    对于共享资源,有一个很著名的设计模式——资源池。该模式正是为了解决资源频繁分配、释放所造成的问题。把该模式应用到数据库连接......
  • Java报错:Missing ServletWebServerFactory bean,如何解决
    哈喽,大家好,我是木头左!一、问题的出现:Java报错:MissingServletWebServerFactorybean在Java开发过程中,经常遇到各种错误。有时,这些错误可能看起来微不足道,但它们可能会阻碍的开发进度。今天,要讨论的是一个非常常见的错误:java.lang.IllegalStateException:MissingServletWebSe......