java web请求和响应_JavaWebServlet请求和响应

JavaWebServlet请求和响应

JavaWebServlet请求和响应

1JavaWeb请求和响应

Servet最主要的作用就是处理客户端请求,并向客户端做出响应。

浏览器发送HTTP请求信息,Web服务器接收请求信息。Web服务器创建HttpServletRequest对象封装请求信息。Web服务器创建HttpServletResponse对象封装响应信息。Web服务器调用Serlet,通过service()方法从HttpServletRequest对象读取请求信息,将响应数据封装到HttpServletResponse对象。Web服务读取响应信息,发送HTTP响应信息给浏览器。浏览器解析给用户呈现出结果。

在Servlet API中,定义了一个HttpServletResponse接口,专门用于封装HTTP响应信息。HTTP响应信息分为状态行,响应信息头,消息体三部分。因此HttpServletResponse定义了向客户端发送响应状态码,响应信息头,响应消息体的方法。

1.1.1发送状态码的方法

html状态行的内容为:

格式:HTTP版本号 状态号 原因描述

举例:HTTP/1.1 200 OK

状态号解释

setStatus(int status)方法

用该方法设置HTTP响应信息的状态码,并生成响应状态行。HTTP版本由服务器决定,状态原因描述和状态号有关因此,我们单独设置状态码就可以定义响应状态行。其中状态码默认为200。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

/*

* 通过对不同状态码的设置,观察页面的不同显示状态。

*/

response.setStatus(400);

//response.setStatus(404);

//response.setStatus(200);

//response.setStatus(100);

response.getWriter().append("Served at: ").append(request.getContextPath());

}

sendError(in sc)方法

这个方法用于发送错误信息的状态码,response对象中提供了两个重载sendError(int sc)的方法,

public void sendError(int code) throw java.io.IOException

public void sendError(int code,String message) throw java.io.IOException

方法1:用于发送错误信息的状态码

方法2:用于发送错误信息的状态码和错误信息提示

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

/*

* 学习测试sendError发送状态码和提示错误原因信息的方法

*/

response.sendError(404);

//response.sendError(404,"你查找的资源不存在!!!");

//response.sendError(400,"请求错误!!!");

//response.sendError(200,"okokok!!!");

//response.getWriter().append("Served at: ").append(request.getContextPath());

}

1.1.2发送响应消息头相关的方法

http响应消息头

HTTP响应消息中第一行为响应状态行,然后是若干响应消息头。服务器根据不同情况可以发送不同的响应消息头。

html请求头响应头参考地址

html响应头信息

常见的响应头信息

发送响应头的相关方法

参考链接

899d62a55f776712e0bec8f736633a6a.png

很多细节需要我们去学习,例如什么响应头需要add,什么响应头需要set。local如何使用?

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

response.addHeader("test", "yes");

response.getWriter().append("Served at: ").append(request.getContextPath());

}

fa7ca0cee6a84ca5eb641aca35e7db52.png

成功加入了一个响应信息头,test:yes

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

response.addHeader("Content-Type","text/html;charset=utf-8");

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

//另一种写法。

response.getWriter().append("我是大坏蛋").append(request.getContextPath());

}

Content-Type表示后面的文档属于什么MIME类型,声明是html文档,并且编码是utf-8这样浏览器解释的时候不会出现乱码。

addIntHeader(string name,int value);

//明显是与addHeader方法相似,不过这个响应信息是整形的。

1.1.3发送响应消息体相关的方法

getOutputStream()方法

该方法所获取的字节输出流对象为ServletOutputStream类型。由于ServletOutputStream是OutputStream的子类,他可以直接输出字节数组中的二进制数据。因此,要输出二进制格式的响应正文,就要使用getOutputStream()方法。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

response.addHeader("Content-Type", "text/html;charaset=utf-8");

OutputStream out = response.getOutputStream();

String data = "我很帅气;";

out.write(data.getBytes());

//response.getWriter().append("Served at: ").append(request.getContextPath());

//注意getWriter和getOutputStream方法都可以使用,但是不能同时使用否则就出现,java.lang.IllegalStateException异常

}

getWriter()方法

这个方法获得的字符输出流对象为PrintWriter类型。由于PrintWriter类型的对象可以直接输出字符文本内容。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

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

PrintWriter out = response.getWriter();

out.write("

getWriter学习测试 ");

out.write("

我有七个老婆

");

}

向html文档中写入,html标记。

解决中文乱码问题

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

String data = "中国";

response.getWriter().write(data);

}

输出结果是??。response对象的字符输出流在编码时,采用的是ISO-8859-1的字符码表,该码表不支持中文,将中国编码为63,63。浏览器接收默认使用GB2312解码为?。因此我们需要修改response的编码方式和浏览器的解码方式。达成一致,首先浏览器可以修改默认解码方法。但是这样对用户不友好。所以有以下两种方式修改中文编码。

第一种方法:

//设置HttpServletResponse使用utf-8编码

response.setCharacterEncoding("utf-8");

//通知浏览器使用utf-8解码

response.setHeader("Content-Type","text/html;charset=utf-8");

第二种方法:

//包含第一种方式的两种功能。

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

显然第二种方式简洁不少。

实现网页定时刷新并跳转

Refresh头字段,通知浏览器在指定的视角内自动刷新并跳转到其他页面。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

response.setHeader("Refresh", "2;URL=http://www.baidu.com");

response.getWriter().write("welcome to my html");

}

2秒后自动跳转到百度

实现请求重定向

为了解决客户端的请求一个Servlet类无法完成全部工作。这时可以使用重定向来完成。具体是Web服务器接收到客户端请求后,无法访问当前请求URL所指向的web资源,指定一个新的资源路径让客户端重新发送。

使用方法

public void sendRedirect(java.lang.String location) throws java.io.IOException

location可以使用相对URL,服务器自动将相对URL翻译为绝对URL。

实现一个账户密码登录

登录页面

登录页面

用户名:

密码:

跳转页面,密码正确跳转到百度,否则跳转会登录页面。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

String username = request.getParameter("username");

String password = request.getParameter("password");

if(username.equals("123456")&&password.equals("123456")){

response.sendRedirect("http://www.baidu.com");

}

else response.sendRedirect("/ServletTest/login.html");

}

JavaWebServlet请求和响应相关教程

LeetCode 1413逐步求和得到整数的最小值(java)

LeetCode 1413逐步求和得到整数的最小值(java) class Solution { public int minStartValue(int[] nums) { int sum = 0, start = 0; for(int num : nums) { sum += num; start = Math.max(start, 1 - sum); } return Math.max(start, 1); }}

Vue学习(二十六)——Vue动态处理响应式数据

Vue学习(二十六)——Vue动态处理响应式数据 目录 上一节我们学习了如何处理数组的一些方法。那么,我们想要修改了数组中的内容,页面会动态响应吗?我们看下: !DOCTYPE htmlhtml lang=enhead meta charset=UTF-8 titleDocument/title/headbodydiv id=app i

前端基础(14)移动端布局(媒体查询及响应式 + rem)

前端基础(14):移动端布局(媒体查询及响应式 + rem) 学习目标 1、Responsive Web Design 响应式设计布局概念 2、媒体查询的概念及应用 3、meta标签的设置 4、dpi、ppi介绍 5、dpr (设备像素比) 一、Responsive Web Design 响应式设计布局概念响应式设

HTTP协议(二)

HTTP协议(二) 1.客户端与服务器通过请求和响应的交换达成通信 HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。贴一个具体的实例: 客户端向服务器发送的请求报文由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成。 而

#SpringMVC中的响应之返回值是void :转发、重定向、输出流@FDDL

#SpringMVC中的响应之返回值是void :转发、重定向、输出流@FDDLC 本篇博客研究【当控制器方法返回值为void时,如何进行转发】 依赖: spring-webmvc(及其相关依赖)、servlet-api(以便使用HttpServletRequest和HttpServletResponse) 当控制器方法返回值为void

iOS 动画过程中view响应点击事件

iOS 动画过程中view响应点击事件 对Core Animation来说,不管是显式动画还是隐式动画,对其设置frame都是立即设置的,比如说给一个UIView做移动动画,虽然看起来frame在持续改变,但其实它的frame已经是最终值了,这种情况下,哪怕这个UIView是UIButton的实例

15.二进制求和(简单)

15.二进制求和(简单) 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = 11, b = 1输出: 100 示例 2: 输入: a = 1010, b = 1011输出: 10101 提示: 每个字符串仅由字符 '0' 或 '1' 组成。1

Windwos7 Windows Server2008 添加设备时正在搜索设备无响应的解

Windwos7、 Windows Server2008 添加设备时,正在搜索设备无响应的解决办法 问题的发现:前几天做实验,准备在Windows 7的网络设备添加一块Microsoft Loopback Adapter虚拟网卡,进入【添加设备】的时候,发现一直停留在【正在搜索设备... 请确保可以检测您

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值