Servlet之处理请求(六)
6.发送响应
在服务器端,Servlet对请求处理完后,通常需要向客户发回响应。如果需要直接向客户发送响应,需要使用输出流对象,也可以将响应重定向到其他资源。
HTTP响应结构分为三个部分:
1.状态行与状态码
状态行:HTTP版本、说明请求结果的响应状态码以及描述状态码的短语。
2.响应头
响应头是服务器向客户端发送的消息。
3.响应数据:空行后面的就是响应数据。
输出流与内容类型
public PrintWriter getWriter() //返回一个PriterWriterd对象用于向客户发送文本数据;
public ServletOutPutStream getOutputStream() throws IOException //返回一个输出流对象,用来向客户发送二进制数据
public void setContextType(String type) //设置发送到客户端响应的MIME内容类型
1.使用PrintWriter
PrintWriter对象被Servlet用来动态产生页面。调用响应对象的getWriter()返回PriintWriter类对象,它可以向客户发送文本数据:
PrintWriter out =response.getWriter();
2.使用ServletOutputStream:
ServletOutputStream sos= response.getOutputStream();
3.设置内容类型
下面的Servlet使用指标分隔符数据生成Excel电子表格
package com.demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ExcelServlet
*/
@WebServlet("/excel.do")
public class ExcelServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/vnd.ms-excel;charset=Gb2312");
PrintWriter out =response.getWriter();
out.println("学号\t姓名\t年龄\t所在系");
out.println("95001\t李勇\t男\t20\t信息");
out.println("95002\t刘晨\t女\t19\t数学");
}
}
7.响应重定向
响应重定向:客户端的请求发给服务器后,该servlet有可能不直接向浏览器发送响应,而是向浏览器发送一个Location响应头,告诉浏览器访问其他资源
响应重对象是通过响应对象response的sendRedirect()实现,一般格式为:
Public void sendRedirect(String location)
响应重定向与请求转发的区别:
1.地址栏与响应报文:
请求转发:客户浏览器的地址栏不会显示转发后的资源地址,响应状态码:200;
响应重定位:新资源的URL在浏览器的地址栏可见,响应状态码:301,响应头增加location
2.数据共享:
请求转发:可以共享Request和Session作用域的属性(还在同一个请求Request周期内)
响应重定向:不能共享Request的属性,可以使用session对象作用域的数据
下面是使用sendRedirect()重定向请求的例子:
package com.demo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class RedirectServlet
*/
@WebServlet("/redirect.do")
public class RedirectServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//重定向到另一个网页去处理,假设为welcome.jsp
// request.setAttribute("username", "zhangsan");
request.getSession().setAttribute("username", "lisi");;
response.sendRedirect("welcome.jsp");
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陆成功,welcom.jsp</title>
</head>
<body>
<h4>登陆成功,欢迎您!${username}</h4>
</body>
</html>
上一篇: DotNet 资源大全(上)
推荐阅读
-
Servlet(五):一个Servlet处理多个请求
-
.NET Core实战项目之CMS 第十四章 开发篇-防止跨站请求伪造(XSRF/CSRF)攻击处理
-
使用Servlet处理Ajax请求
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之六使用过滤器进行全局请求数据验证
-
请求从Servlet到SpringMVC的处理过程
-
Servlet 3.0异步处理请求
-
servlet-保持前端请求方式和后台处理方式方式一致 1
-
Servlet3.0——异步请求处理
-
servlet-保持前端请求方式和后台处理方式方式一致 2
-
Java Web(8)—Servlet 3.0 的异步请求处理详解