response对象&重定向 详解

版权声明:本文为博主原创,无版权,未经博主允许可以随意转载,无需注明出处,随意修改或保持可作为原创! https://blog.csdn.net/qq_41517071/article/details/83417213

2018年10月26日16:10:47 于易动


客户端浏览器和服务器: 
 请求的时候: request对象:    HttpServletRequest 
 响应的时候: response对象: HttpServletResponse 
 
 service(HttpServletRequest request, HttpServletResponse response )

这两个参数对象,经常成对存在
 
 
 response对象:  
 1: 生命周期:
   诞生:  服务器端接收到请求的时候,创建。 
   销毁:  service方法执行完毕,也就是响应结束, 对象销毁。 

生命周期很短暂,唉~
   
   
 2: 获得: 直接使用: tomcat服务器已经创建好。 
 
 3: 作用: 
  a: 设置响应正文: 
  b: 设置响应头信息: 
  c: 发送状态码: 
  d: 重定向: 
  
  
  
  b: 设置响应头信息:  告知浏览器, 浏览器可以根据响应头信息进行解析文档: 
   response.setHeader("headName","headValue"); 默认头和头的值 都是String类型。

 
   setDateHeader(java.lang.String name, long date)  头是String类型。 头值Date类型。 
   
   getHeader(java.lang.String name) 返回的String类型。

 
   getHeaderNames()  获得所有头的名称:

 
   getHeaders(java.lang.String name)   获得一个头对应多个值的情况。 

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * 演示response对象的: 设置响应头信息: 
 * response.setHeader(); 
 */
public class AServlet extends HttpServlet {

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		
		response.setHeader("content-type", "text/html;charset=gbk"); 
		
		//常见的:  和页面刷新相关: 
//		response.setHeader("refresh", "5");//  设置页面5S刷新一次。
		
//		response.setHeader("refresh", "5;http://www.baidu.com");//5S后 刷新到百度。 
		
		//设置页面的不缓存: 
		response.setHeader("expires", "-1"); //页面立刻过期: 
		response.setHeader("pragma", "no-cache");// 这是http1.0不缓存: 
		response.setHeader("cache-control", "no-cache"); 
		
	}

}


  a: 设置响应正文:  
  方式一: 使用字符流: 
   response.getWriter(); PrintWriter;
   响应的内容: 
   (1)可以是字符串类型。 
   (2)可以是html标签。  浏览器能够自动解析。  
 方式二: 使用字节流: 
   response.getOutputStream(); OutputStream: 
   
   注意: response对象 使用字符流或者是字节流,只能选择其中的一个。  不能同时使用。 
   如果同时使用,就会触发一个异常: IllegalStateException 
   

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * response 对象:设置响应正文: 
 *  
 *  方式一: 使用字符流: 
 *  方式二: 使用字节流: 
 */
public class BServlet extends HttpServlet {

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		//使用字符的方式: 设置响应内容: 
		PrintWriter out = response.getWriter();
		out.println("俊哥");
		out.println("<br/>");
		out.println("<font color='red' size='7'>你很帅</font>");
		
		
		
		out.close();
		
		
		//使用字节流 设置响应体: 
		ServletOutputStream outputStream = response.getOutputStream();
		outputStream.write("俊哥 ,你真的很帅~ oh year".getBytes());
		
		outputStream.close(); 
	
	}

}


   c: 设置响应状态码, 和其他的API方法: 
   sendError(int sc)                             发送一个错误的状态码; 
   sendError(int sc,String message);  发送错误的状态码,并且带有描述性的信息。 
   setStatus(int code);                         给客户端浏览器发送一个状态码。 
   

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * 设置状态码 和其他的API方法: 
 */
public class CServlet extends HttpServlet {

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		//发送一个错误的状态码: 
//		response.sendError(404,"你访问的资源,存在的,当时不给看"); 
		
		response.setStatus(500); 
	}

}

 D:重定向: (重点)面试问题

扫描二维码关注公众号,回复: 3919208 查看本文章

访问的是bservlet,地址栏会发生变化
   特点: 
   (1)两次请求 两次响应。 
   (2)地址栏会发生变化。  最终显示的是重定向后的地址。 
   (3)重定向是客户端的行为: 
   (4)重定向的地址可以是外部的资源。  
   (5)负责重定向的servlet 不要向客户端浏览器发送数据, 可能会引发异常。 
   
  使用代码实现: 
  实现方式一: 
     response.setStatus(302); 
     response.setHeader("location","URL"); 
     

负责重定向的servlet:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * 负责重定向的servlet: 
 */
public class DServlet extends HttpServlet {

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		response.getWriter().println("这是负责重定向的Dservlet。 ");
		
		//完成重定向: 
//		response.setStatus(302); 
//		response.setHeader("location", "/javaEE-06/servlet/EServlet");// EServlet: 属于本系统内资源。  
//		response.setHeader("location", "http://www.baidu.com");// 定向到站外的资源。 
		
		
		//使用便捷方法: 
		response.sendRedirect("EServlet"); //                   / : 相对于主机: http://locahost:8080
		// 没有使用/开头: 相对于当前文件的存在位置:  建议使用/开头。 
		
	}

}

被重定向的servlet:

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * 被重定向过来的servlet。 
 */
public class EServlet extends HttpServlet {

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

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		response.getWriter().println("我是被重定向过来的EServlet");
	}

}

 
     方式二: 完成重定向的便捷方式: 
     response.sendRedirect("location "); 

使用 /开头       : 其中的location是相对路径,相对于主机。

没有使用/ 开头:是相对于当前文件的位置

猜你喜欢

转载自blog.csdn.net/qq_41517071/article/details/83417213