J2EE之Servlet学习笔记(八):response常见方法

学习资料:http://how2j.cn/k/servlet/servlet-response/556.html#nowhere

response对象的类是HttpServletResponse,用于提供给浏览器的响应信息

1.设置响应内容
前栗中很常见的PrintWriter pw=response.getWriter();
通过response.getWriter(); 获取一个PrintWriter对象
可以使用println(),append(),write(),format()等方法设置返回给浏览器的html内容

import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HelloServlet extends HttpServlet{
     
    public void doGet(HttpServletRequest request, HttpServletResponse response){
         
        try {
            PrintWriter pw= response.getWriter();
            pw.println("

Hello Servlet

"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

2.设置响应格式

response.setContentType("text/html");

"text/html" 即是格式 ,在request获取头信息 中对应的request.getHeader("accept"). 
如果"text/html" 是存在的,表示浏览器可以识别这种格式
如果换一个其他的格式, 比如 "text/lol" ,浏览器不能识别,那么打开此servlet就会弹出一个下载的对话框

import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HelloServlet extends HttpServlet {
 
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
 
        try {
            PrintWriter pw = response.getWriter();
            pw.println("

Hello Servlet

"); response.setContentType("text/lol"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

3.设置响应编码
设置响应编码有两种方式
1)response.setContentType("text/html; charset=UTF-8");
2)response.setCharacterEncoding("UTF-8");
两种方式都需要在response.getWriter调用之前执行才能生效

他们的区别在于
setContentType()
发送到浏览器的内容使用UTF-8编码,同时还通知浏览器使用UTF-8编码方式进行显示,所以总能正常显示中文
setCharacterEncoding
发送到浏览器的内容使用UTF-8编码,但是不通知浏览器用哪种编码方式显示,所以当浏览器的显示编码方式不是UTF-8的时候,就会看到乱码,需要手动再进行一次设置

import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HelloServlet extends HttpServlet {
 
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        try {
            response.setContentType("text/html; charset=UTF-8");
//          response.setCharacterEncoding("UTF-8");
 
            PrintWriter pw = response.getWriter();
            pw.println("

第一次 使用 Servlet

"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

4.301或302客户端跳转
客户端有两种跳转:301 表示永久性跳转,302 表示临时跳转
之前跳转到失败页面就是302跳转

response.sendRedirect("fail.html");

301跳转要使用另外的方式

response.setStatus(301);
response.setHeader("Location", "fail.html");

用户感受不出这两种跳转的区别,但是可以借助火狐的调试工具看到响应的头信息是:301 Moved Permanently
301和302的区别主要在搜索引擎对页面排名的时候有影响,这是属于SEO范畴的概念

5.设置不使用缓存
使用缓存可以加快页面的加载,降低服务端的负担,但是也可能使浏览器显示过时的信息
可以通过如下手段通知浏览器不要使用缓存

import java.io.IOException;
import java.util.Date;
 
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HelloServlet extends HttpServlet {
 
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
 
        try {
            response.setDateHeader("Expires", 0);
            response.setHeader("Cache-Control", "no-cache");
            response.setHeader("pragma", "no-cache");
            response.getWriter().println("

Hello Servlet!

"); response.getWriter().println(new Date().toLocaleString()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

 

你可能感兴趣的:(Java,Servlet,Java,Servlet,J2EE)