• JavaWeb:ServletResponse


    环境

    • JDK 8
    • Spring Tool Suite 4.6.1
    • Servlet 3.1
    • Tomcat 8.5
    • Maven 3.6.3

    ServletResponse 说明

    ServletResponse 可以让 Servlet 向客户端发送响应。
    ServletResponse 由 Servlet 容器创建,并将其传递给 Servlet 的 service 方法。

    为了向客户端发送二进制的数据,可以使用 getOutputStream 方法返回的 ServletOutputStream 输出流。
    为了发送字符数据,可以使用 getWriter 返回的 PrintWriter 对象。
    想要同时发送两种数据,需要使用 ServletOutputStream ,并且手动处理字符数据。

    可以使用 setCharacterEncoding(java.lang.String) 和 setContentType(java.lang.String) 方法
    显式指定响应的编码,或者使用 setLocale(java.util.Locale)方法隐式指定,显式指定优先于隐式指定。
    如果未指定编码,则将使用 ISO-8859-1 。必须在 getWriter 之前调用 setCharacterEncoding ,setContentType 或 setLocale 方法。

    编码系列方法

    可以通过 下面的方法获得和设置响应的编码,优先级分别为:setCharacterEncoding、setContentType、setLocale,
    并且设置编码应该在 getWriter 方法调用之前。

    public String getCharacterEncoding();
    public String getContentType();
    public void setCharacterEncoding(String charset);
    public void setContentType(String type);
    public void setLocale(Locale loc);
    public Locale getLocale();
    

    流系列方法

    分别获得字节和字符输出流,不能同时使用。

    public ServletOutputStream getOutputStream() throws IOException;
    public PrintWriter getWriter() throws IOException;
    

    缓冲系列方法

    和输出流的缓冲相关的方法。

    public void setBufferSize(int size);
    public int getBufferSize();
    public void flushBuffer() throws IOException;
    public void resetBuffer();
    

    setContentLength

    设置响应头中的 ContentLength 。

    public void setContentLength(int len);
    

    reset

    清空返回的数据,同时也重置输出流。

    public void reset();
    

    isCommitted

    判断响应是否提交。

    public boolean isCommitted();
    

    ServletResponse 示例

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>jiangbo.javaweb</groupId>
        <artifactId>12java-web-servlet-response</artifactId>
        <version>1.0.0</version>
        <packaging>war</packaging>
        <description>Servlet Response 的示例</description>
    
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </project>
    

    方法示例

    package jiangbo.javaweb;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @SuppressWarnings("serial")
    public class Servlet01 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            System.out.println("service...");
    
            System.out.println("---------------------------");
            System.out.println(resp.getCharacterEncoding());
            System.out.println(resp.getContentType());
            resp.setCharacterEncoding("UTF-8");
            System.out.println(resp.getCharacterEncoding());
            System.out.println(resp.getContentType());
            System.out.println(resp.getLocale());
            resp.setContentLength(44);
    
            System.out.println("---------------------------");
            resp.getOutputStream();
            resp.reset();
            System.out.println(resp.getCharacterEncoding());
            resp.setContentType("text/html;charset=UTF-8");
            System.out.println(resp.getCharacterEncoding());
            PrintWriter writer = resp.getWriter();
    
            System.out.println("---------------------------");
            System.out.println(resp.getBufferSize());
            writer.println("没有了的内容");
            resp.resetBuffer();
            writer.print("存在的内容");
            writer.flush();
    
            System.out.println("---------------------------");
            System.out.println(resp.isCommitted());
    
        }
    }
    

    配置 web.xml

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1">
    
        <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>jiangbo.javaweb.Servlet01</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/servlet01</url-pattern>
        </servlet-mapping>
    
    </web-app>
    

    浏览器访问

    将该项目部署到服务器并启动,在客户端访问 http://localhost:8080/12java-web-servlet-response/servlet01 项目地址,然后关闭 tomcat。

    控制台输出

    service...
    ---------------------------
    ISO-8859-1
    null
    UTF-8
    null
    zh_CN
    ---------------------------
    ISO-8859-1
    UTF-8
    ---------------------------
    8192
    ---------------------------
    true
    

    浏览器显示

    存在的内容
    
  • 相关阅读:
    Python--IO模型
    python queue, pipe, manage
    python多线程,event,互斥锁,死锁,递归锁,信号量
    day34 异常处理、断言、socket之ftp协议
    day34 反射、面向对象内置方法:如__str__、面向对象的软件开发
    PHP基础入门(二)【PHP函数基础】
    PHP基础入门详解(一)【世界上最好用的编程语言】
    H5简单拖放(Drag/Drop)
    手机APP ~ MUI——创建页面方法
    bootstrap栅格系统
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/12969105.html
Copyright © 2020-2023  润新知