• Servlet系列教材 (十一)- 基础


     

    response是HttpServletResponse的实例,用于提供给浏览器的响应信息

    步骤1:设置响应内容
    步骤2:设置响应格式
    步骤3:设置响应编码
    步骤4:301或者302客户端跳转
    步骤5:设置不使用缓存

    示例 1 : 设置响应内容

    通过response设置响应已经用得比较多了,在前面的Servlet学习中都是用到
    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("<h1>Hello Servlet</h1>");

                 

            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("<h1>Hello Servlet</h1>");

                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调用之前执行才能生效。

    他们的区别在于

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


    不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文

    2. response.setCharacterEncoding("UTF-8"); 


    仅仅是发送的浏览器的内容是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("<h1>第一次 使用 Servlet</h1>");

            catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

    示例 4 : 301或者302客户端跳转

    客户端有两种跳转
    302 表示临时跳转
    301 表示永久性跳转

    302就是前面在客户端跳转章节用到过的

    response.sendRedirect("fail.html");



    301要使用另外的手段:

    response.setStatus(301);

    response.setHeader("Location""fail.html");


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

    301或者302客户端跳转

    import java.io.IOException;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class LoginServlet extends HttpServlet {

        private static final long serialVersionUID = 1L;

        protected void service(HttpServletRequest request, HttpServletResponse response)

                throws ServletException, IOException {

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

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

            if ("admin".equals(name) && "123".equals(password)) {

                request.getRequestDispatcher("success.html").forward(request, response);

            else {

                response.setStatus(301);

                response.setHeader("Location""fail.html");

            }

        }

    }

    示例 5 : 设置不使用缓存

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

    response.setDateHeader("Expires",0 );

    response.setHeader("Cache-Control","no-cache");

    response.setHeader("pragma","no-cache");

    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("<h1>Hello Servlet!</h1>");

                response.getWriter().println(new Date().toLocaleString());

            catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }


    更多内容,点击了解: https://how2j.cn/k/servlet/servlet-response/556.html

  • 相关阅读:
    VS2019正式版 密钥 Visual Studio 2019 破解 激活码 Key
    关于随机数的前世今生
    木兮的纪中集训感想
    浅谈欧洲算法——模拟退火
    你没听过的梅森旋转算法
    二分贪心杂题
    DP专项训练
    实验八 进程间通信
    实验七 信号
    实验六 进程基础
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615414.html
Copyright © 2020-2023  润新知