JavaWeb中response详解

40 篇文章 0 订阅
32 篇文章 0 订阅

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("/test05")
public class Servlet_test05 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //   将数据编码格式定义为中文
//        response.setCharacterEncoding("GBK");
//        response.setHeader("content-type","text/html;charset=utf-8");
//        response.setContentType("text/html;charset=utf-8");

        //   向浏览器响应数据
        response.getWriter().write("<h1>十九岁的耿耿你好,我是十九岁的路星河</h1>");
    }

    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进行解码(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 Servlet_test07 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//        response.setContentType("text/html;charset=utf-8");

        //   响应验证码

        ValidateCode validateCode = new ValidateCode(500, 200, 4, 10000);
        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);
    }
}

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值