JavaWeb中response详解

http响应消息:

http协议分为两个部分:

  • 请求消息:客户端发送给服务器端的数据
  • 响应消息:服务器端发送给客户端的数据

设置完响应消息后,浏览器会自动解析响应消息的内容

数据格式:

1、响应行:协议+版本+响应状态码
2、响应头

Content-Length: 53
Content-Type: text/plain; charset=UTF-8
Date: Mon, 21 Dec 2020 10:55:01 GMT

3、响应空行
4、响应体:响应的页面内容

响应状态码:
(1) 1**

服务器接收客户端的消息,但是没有接收完成,服务器等待一段时间发送1**状态码来确认是否需要持续发送消息

(2) 2**

代表成功,本次响应的请求成功

(3) 3**

代表重定向(302)
重定向:a找b借钱,b说我没钱,你去找c,a很听话的找c借钱,这个过程叫做重定向。
代表缓存(304)
当客户端访问浏览器的时候,如果服务器资源经常不固定发生变化,在响应后就直接把这个资源存储在浏览器中,当客户端再次来访问的时候,服务器响应一个304,告诉客户端,不要再从我这拿数据了,从自己家拿吧。如果资源后期发生了变化,就会自动刷新,不再让访问缓存。

(4) 4**

404:请求路径没有对应的资源
405:请求方式没有找到对应的方法

(5) 5**

500:服务器内部发生错误


绝对路径和相对路径:

1、绝对路径:

通过绝对路径可以确定唯一资源
如:http://localhost:8080/servlet
以 / 开头的路径

2、相对路径

需要找到当前资源和目标资源对应的关系
./ 指代当前目录
.// 后退一级


响应乱码问题:

服务器向浏览器响应数据:

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;

@WebServlet("/test01_Servlet")
public class test01_Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        向浏览器响应数据
        response.getWriter().write("Hello World");
        response.getWriter().write("远赴人间惊鸿宴,一睹人间盛世颜");
    }

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

结果如下,中文的显示乱码:
在这里插入图片描述

中文的乱码情况:
当我们在response.getWriter().write(“中文”)时,页面无法解析。
原因:

浏览器会自动解析服务器的字符编码,浏览器的编码格式是根据操作系统来决定的,我们使用Windows是中文操作系统,所以,浏览器的字符编码格式是GBK或者GB2312中文字符编码。
可是,我们字符输出流是由response对象创建的,response对象是由Tomcat服务器创建的,Tomcat的字符编码格式是拉丁文:ISO-8859-1。
由此可知,GBK解析不了ISO的编码,解决办法是在创建字符输出流之前先设置编码格式。

解决办法:

1、设置字节编码格式:
response.setCharacterEncoding(“GBK”)

2、设置通用utf-8编码,告诉浏览器,我用的是utf-8
建议浏览器也使用utf-8进行解码(IE浏览器可以设置)
response.setHeader(“content-type”,“text/html;charset=utf-8”)

3、直接设置setContent-type
response.setContentType(“text/html;charset=utf-8”)

按照第一种方法进行设置,结果如下:
在这里插入图片描述


向前端页面响应验证码:

1、首先在项目中导入生成验证码的jar包:
在这里插入图片描述
2、代码如下:

import cn.dsna.util.images.ValidateCode;

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;

@WebServlet("/test07")
public class Test07 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        ValidateCode validateCode = new ValidateCode(400, 200, 4, 10);  // 宽度、高度、字符个数、干扰线个数
        String code = validateCode.getCode();
        System.out.println(code);
        validateCode.write(response.getOutputStream());
    }

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

结果如下:
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值