【JavaWeb技术】HttpResponse类

HttpServletResponse类

a) HttpServletResponse类的作用

  • 每次请求进来,Tomcat服务器都会创建一个Response类对象传递给Servlet程序使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。
  • 我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置;

b) 两个输出流

  • 字符输出流:PrintWeiter getWeiter() 用于传回字符串
  • 字节输出流:ServletOutputStream getOutputStream() 用于下载

在一个Servlet程序中,只能获取一个流;如果两个流都获取,那么就会报错;
在这里插入图片描述

字符流输出数据

//todo response输出数据
public class responseDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取字符输出流
        PrintWriter writer = resp.getWriter();
        //2.输出数据
        // request和response获取的流不需要flush和close
        // 自己会将数据写出缓冲区
        // 一次请求响应结束后会自动关闭
        writer.write("<h1>hello response</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

可以输出html文本,浏览器会自动解析。

字符流输出中文乱码问题

  • 注意: 必须在获取流之前需要设置流的编码格式
  • 通过响应头设置告诉客户端用什么编码
  • 服务器默认用的ISO编码,浏览器默认GBK
  • 如果要用中文,那么服务器和浏览器必须都需要统一且使用UTF-8
    在这里插入图片描述
    简化设置:即能设置服务器,也能设置浏览器的编码格式;也能设置响应头;
	resp.setContentType("text/html;charset=utf-8")

字节流输出数据

    //1.获取输出流
        ServletOutputStream sos = resp.getOutputStream();
        //2.输出数据  字节流必须要转为字节数组
        sos.write("中文输出".getBytes(StandardCharsets.UTF_8));

c) 请求重定向

在这里插入图片描述
在这里插入图片描述

重定向的使用

步骤:

  1. 设置302状态吗
  2. 设置响应头中的location属性的值为目标资源路径
@WebServlet("/responseDemo01")
public class responseDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //todo 请求转发第一种写法
        //设置状态吗302
        resp.setStatus(302);
        resp.setHeader("location","/Servlet/responseDemo02");

        //todo 重定向第二种写法
        resp.sendRedirect("/Servlet/responseDemo02");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}
@WebServlet("/responseDemo02")
public class responseDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("跳转到了responseDemo02");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}
        //todo 重定向的第一种写法
        //设置状态吗302
        resp.setStatus(302);
        resp.setHeader("location","/Servlet/responseDemo02");

        //todo 重定向第二种写法
        resp.sendRedirect("/Servlet/responseDemo02");

注意这里的路径,必须要加上虚拟目录!!!

重定向的特点

  1. 是从客户端浏览器发起两次请求
  2. 因此:
  3. 地址栏发生变化
  4. 可以访问其他站点(服务器)的资源
  5. 不共享HttpRequest对象中的数据
  6. 不能访问项目下WEB-INF目录

重定向是redirect

请求转发的特点:
1.地址栏不发生变化
2.不可以访问其他站点(服务器)的资源
3.是一次请求
4.请求转发是forward

d) 响应行状态码

1. 100-199 信息响应
服务器接收客户端消息,但还没有接收完成,等待一段时间后,发送1xx状态码

2. 200-299 成功响应
这次请求和响应成功

3. 300-399 重定向
302 重定向
304 重定向到本地缓存

4. 400-499 客户端错误
404 资源访问路径错误
405 请求方式没有对应的doXXX方法

5. 500-599 服务端错误
500 服务器内部代码有异常

响应头

格式: 头名称:值

常见响应头:

  1. Content-Type:服务器告诉客户端浏览器本次响应体的数据格式和编码格式
    比如:text/html;charset=UTF-8
    会设置浏览器的编码格式
  2. Content-Length:
  3. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
    默认值:in-line 在当前页面内打开
    attachment:以附件形式打开响应体

响应体

就是返回给浏览器用于展示的数据

Response对象

功能:
1.设置相应行
设置状态码:setStatus(int sc);
2.设置响应头
setHeader(String name,String value )
3.设置响应体

步骤:
1.获取输出流
2.通过流输出数据


路径

绝对路径

以/开头的路径

相对路径

确定目标路径和当前资源的相对路径关系

如果目标路径是给客户端浏览器使用,需要加虚拟目录
给服务器使用,不需要加虚拟目录

请求转发是给服务器使用,重定向是给客户端使用,所以重定向必须要加虚拟目录

动态获取虚拟目录

    //todo 重定向的第一种写法
    //设置状态吗302
    resp.setStatus(302);
    resp.setHeader("location","/Servlet/responseDemo02");

    //todo 重定向第二种写法
    resp.sendRedirect("/Servlet/responseDemo02");

    //todo 优化写法,动态获取虚拟目录
    String contextPath = req.getContextPath();
    resp.sendRedirect(contextPath+"/responseDemo02");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb技术大全是一个包含JavaWeb开发所需技术的完整列表。以下是JavaWeb技术大全的主要内容: 1. Java语言基础知识:Java语言基础知识包括Java编程语言的基础语法、数据类型、流程控制、数组、面向对象等。 2. Servlet技术:Servlet是JavaWeb的核心技术之一,通过Servlet可以实现Web应用程序的动态响应功能。 3. JSP技术:JSP是一种基于Java语言的Web页面开发技术,可以在HTML页面中嵌入Java代码。 4. Struts框架:Struts是一个基于MVC设计模式的Web应用程序开发框架。 5. Spring框架:Spring是一个轻量级的Java开发框架,提供了一系列的功能和API,包括IoC、AOP、事务管理等。 6. Hibernate框架:Hibernate是一个优秀的ORM框架,可以将Java对象映射到数据库中。 7. JDBC技术:JDBC是Java数据库连接技术,可以连接各种类型的数据库。 8. Ajax技术:Ajax是一种Web应用程序开发技术,可以实现异步请求和响应。 9. HTML、CSS、JavaScript技术:HTML、CSS、JavaScript是Web开发的基础技术,用于实现Web页面的展示和交互功能。 10. Web服务技术:Web服务技术是一种基于HTTP协议的分布式应用程序开发技术,可以实现不同平台之间的互操作性。 11. RESTful API:RESTful API是一种基于HTTP协议的Web服务开发模式,可以实现轻量级、灵活的Web API。 12. SOAP:SOAP是一种XML格式的Web服务通信协议,可以实现跨平台、跨语言的通信。 13. XML、JSON技术:XML、JSON是Web应用程序中常用的数据格式,用于数据交换和传输。 14. Tomcat服务器:Tomcat是一个开源的Servlet容器,用于运行JavaWeb应用程序。 以上是JavaWeb技术大全的主要内容,JavaWeb技术是Web应用程序开发的重要技术,掌握这些技术可以帮助开发者开发高质量的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值