程序员社区

【Servlet-2】HttpServletResponse接口

在这里插入图片描述

文章目录

      • 1.向客户端发送数据
      • 2.请求转发与重定向

web服务器收到一个Http请求后,会针对每个请求创建一个HttpServletRequest对象和HttpServletResponse对象,如果需要获取客户端提交请求的相关信息,需要从HTTPServletRequest对象中获取,如果需要向客户端发送数据,则需要通过HttpServletResponse对象来文成。

1.向客户端发送数据

ServletResponse有一个方法getWriter(),用于获取到一个输出流对象PrintWriter,专门用于向客户端输出数据的,称为标准输出流。

package HttpServletResponse;

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;
import java.io.PrintWriter;

@WebServlet("/ServletResponseDemo1")
public class ServletResponseDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取标准输出流
        PrintWriter out = response.getWriter();

        //向输出流中写入数据,客户端浏览器就会看到这些数据
        out.println("<h1>abc</h1>");
        out.print("我爱中国");
    }

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

在这里插入图片描述
可以通过设置响应的编码类型:
response.setContentType("text/html;charset=UTF-8");

	response.setContentType("text/html;charset=UTF-8");
      //获取标准输出流
      PrintWriter out = response.getWriter();

      //向输出流中写入数据,客户端浏览器就会看到这些数据
      out.println("<h1>abc</h1>");
      out.print("我爱中国");

在这里插入图片描述

2.请求转发与重定向

通过HTTPServletRequest获取到的RequestDispatcher对象的forward()方法,可以完成请求转发功能。而通过HttpServletResponse的sendRedirect()方法,可以完成重定向功能。
在这里插入图片描述
在这里插入图片描述
请求转发与重定向均是指请求的跳转方式:
请求转发也称为服务器内部跳转
重定向也称为服务器外部跳转

Forward文件:请求转发到OtherServlet文件
在里面设置域属性,在OtherServlet文件中可以取到域属性的值

package 请求转发;

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("/Forward")
public class Forward extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        //设置域属性
        request.setAttribute("name",name);
        request.setAttribute("age",age);
        request.getRequestDispatcher("/OtherServlet").forward(request,response);
    }

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

OtherServlet文件:在转发的文件中取到域属性的值

package 请求转发;
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;
import java.io.PrintWriter;

@WebServlet("/OtherServlet")
public class OtherServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.print("otherServlet......");

        Object name = request.getAttribute("name");
        Object age = request.getAttribute("age");
        out.println("name="+name);
        out.println("age="+age);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

在这里插入图片描述
重定向:

package 响应重定向;

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("/Redirect")
public class Redirect extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("执行Redirect。。。。");
        //重定向
        response.sendRedirect("/34/RedirectServlet");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
package 响应重定向;

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;
import java.io.PrintWriter;

@WebServlet("/RedirectServlet")
public class RedirectServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("执行RedirectServlet.....");
    }

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

在这里插入图片描述
通过上面的视频可看出,重定向地址栏地址改变了。

请求转发:
 浏览器只发出一次请求,收到一次响应
 请求转发到的资源中可以直接获取请求中所携带的数据
 浏览器地址栏显示的用户所提交的请求路径
 只能跳转到当前应用的资源中
 
重定向:
 浏览器发出两次请求,接收到两次响应
 重定向到的资源不能直接获取到用户提交请求中所携带的数据
 浏览器地址栏显示的为重定向的请求路径,而非用户提交请求的路径
 重定向不仅可以跳转到当前应用的其他资源,也可以跳转到其他应用中资源

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【Servlet-2】HttpServletResponse接口

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区