栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet学习(5)—— HttpServletResponse类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet学习(5)—— HttpServletResponse类

HTTPServletResponse类和HTTPServletRequest类一样,每次有请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HTTPServletRequest表示请求的信息,HTTPServletResponse表示响应的信息。我们可以通过HTTPServletResponse对象来设置返回给客户端的信息。

HTTPServletResponse通过字节流或者字符流的方式进行响应,字节流(getOutputStream())常用于下载,字符流(getWriter())常用于回传字符串,两个流只能使用一个。

一. 往客户端回传字符串数据
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class ResponseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        PrintWriter writer = resp.getWriter();
        writer.write("response");
        writer.write("张三");        //会有中文乱码问题

    }
}



    
        ResponseServlet
        TestServlet.ResponseServlet
    

    
        ResponseServlet
        /responseServlet
    

解决响应的中文乱码问题:

方式1:

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

public class ResponseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //设置服务器字符集为UTF-8
        resp.setCharacterEncoding("UTF-8");
        //通过响应头,设置浏览器也是用UTF-8字符集
        resp.setHeader("Content-Type", "text/html; charset=UTF-8");

        PrintWriter writer = resp.getWriter();
        writer.write("response");
        writer.write("张三");
    }
}

方式二(推荐):

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

public class ResponseServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
        resp.setContentType("text/html; charset=UTF-8");

        PrintWriter writer = resp.getWriter();
        writer.write("response");
        writer.write("张三");
    }
}
二. 请求重定向

当客户端发起请求(http://ip:port/工程路径/response1)时,Response1程序可能由于某些原因已经废弃,由新的接口Response2代替,他需要告诉客户端他已经不存在(响应码302)且返回新的地址(Location响应头:http://ip:port/工程路径/response2),然后客户端会自动重新发起新的请求(http://ip:port/工程路径/response2),由Response2程序执行响应。

浏览器的地址栏会发生变化,由http://ip:port/工程路径/response1变为http://ip:port/工程路径/response2;发生了两次请求;不共享Response域数据。

方式一:

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 Response1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应状态码302,表示重定向
        resp.setStatus(302);

        //设置响应头,告诉客户端新的地址
        resp.setHeader("Location","http://localhost:8080/WebProject_war_exploded/response2");
    }
}
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 Response2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("response2");
    }
}



    
        Response1
        TestServlet.Response1
    

    
        Response1
        /response1
    

    
        Response2
        TestServlet.Response2
    

    
        Response2
        /response2
    

方式二(推荐):

在Response1里直接使用resp.sendRedirect即可

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 Response1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("http://localhost:8080/WebProject_war_exploded/response2");
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764012.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号