zoukankan      html  css  js  c++  java
  • 5.Servlet 对象(request-response)


    /*ServletResponse*/

    /*responese常见应用*/

      1.向客户端输出中文数据 (分别以OutputStream 和 PrintWriter输出) 

      2.文件下载和中文文件的下载 ( /*ResponseDemo3*/)

      3.完成类似验证码的功能 (输出一张随机图片)

      4.用refresh控制浏览器自动刷新 

      5.控制浏览器缓存(保存一定时间)

      6.实现重定向 (一般能不采用 就 不采用)(因为重定向是转到其他地址,所以重定向的地址需要比 转发 的地址 /*多上web应用名称*/)

    Response的小细节:
      1.getOutputStream 和 getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOutputStream、PrintWriter对象

      2.getOutputStream 和 getWriter 这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另外一个方法

      (转到另外的页面上,如果是通过重定向转的,就可以同时使用(因为重定向 向服务器发送了两次请求,有两个response,两次调用的是不同的))

      3.Servlet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法。

       如果没有,Servlet引擎将调用close方法关闭输出流对象。

      (即程序里面可以不用去 close )

    4./*Request*/

    request的常用方法:

      (获得客户机信息) (URL(网络上的web应用)和URI(所有web应用)的关系 : 狗和动物)

      getRequestURL 返回客户端发出请求时的完整URL

      getRequestURI 返回请求行中的资源名部分

      getQueryString 返回请求行中的参数部分

      getRemoteAddr 返回发出请求的客户机的IP地址

      getRemoteHost 返回发出请求的客户机的完整主机名

      getRemotePort 返回客户机所使用的网络端口号

      getLocalAddr 返回web服务器的IP地址

      getLocalName 返回web服务器的主机名

      getMethod 得到客户机请求方式

      /*request获取请求头和请求数据 RequestDemo2 test.html*/


      /*通过表单搜集用户数据*/ /*主要是HTML方面的 暂时先不写了*/


      /*request乱码问题*/

        通过表单提交中文字符产生的乱码问题 : 1. get(手工) 2.post

        通过超链接提交中文字符 : 想要避免乱码问题 (手工)

    /*MVC设计*/ //MVC (m model (javabaen) ; v view (jsp) ; c controller (servlet) ) 处理请求的是处理请求的 封装数据的是封装数据的 显示数据的是显示数据的

      servlet收到请求 返回数据,数据封装到javabean中,javabean中的数据存到request域中,通过转发(forword)技术将转到jsp页面,jsp页面从request域中取出数据显示


    请求转发的细节: ( /*只有在客户端没有输出时,才可以调用forword方法*/)

    1.forword方法用于将请求转发到 RequestDispatcher 对象封装的资源

    2.如果在forword方法之前,在servlet程序写入的部分内容已经被真正传递到了客户端 (流的关闭以及多个forword跳转都可能导致),forword方法将抛出异常 

    3.如果在调用forword方法之前,向servlet引擎的缓冲区(response)中写入了内容,只要写入到缓冲区的内容还没有真正输出到客户端,

     forword方法就可以被正常执行,原来写入到输入缓冲区的内容将被清空

      例:String value = "aaaa";

      response.getWriter().write(value); //此时 数据还没有写入到客户机中,如果这个时候forword的话,response中的内容将被清空,转发正常执行

      request.getRequestDispatcher("/index.jsp").forward(request, response);

    request实现页面包含 (用include实现页面包含(包含一些公共的页面) ,一般不使用,因为这是动态包含(一般在jsp中做静态包含更好 )) 

     1 //用include实现页面包含(包含一些公共的页面) (一般在jsp中做包含 )
     2 public class RequestDemo6 extends HttpServlet {
     3 
     4     public void doGet(HttpServletRequest request, HttpServletResponse response)
     5             throws ServletException, IOException {
     6         
     7         request.getRequestDispatcher("/public/Head.jsp").include(request, response);    
     8         String value = "body";
     9         response.getWriter().write(value);
    10         request.getRequestDispatcher("/public/Foot.jsp").include(request, response);    
    11     }
    12 
    13     public void doPost(HttpServletRequest request, HttpServletResponse response)
    14             throws ServletException, IOException {
    15         doGet(request, response);
    16     }
    17 
    18 }

    web工程中各类地址的写法( /*看地址是给谁用的*/)

    利用referer防盗链

    //利用referer防盗链
    public class RequestDemo7 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            
            String referer = request.getHeader("referer");
            
            if(referer == null || !referer.startsWith("localhost")) {    //如果页面时直接访问,没有经过跳转||或者不是以localhost开头
                response.sendRedirect("/day06/index.jsp");
                return;
            }
            
            String data = "日记";
            response.getWriter().write(data);
    
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
  • 相关阅读:
    【Android】【踩坑日记】RecyclerView获取子View的正确姿势
    【Thinking in Java】编写构造器时应注意:尽量避免调用其他非private方法
    为什么匿名内部类只能访问final变量【转】
    【Thinking in Java】类和对象的初始化过程
    【Thinking in Java】Java Callable的使用
    【算法与数据结构】二叉搜索树的Java实现
    【Thinking in Java】组合、继承和代理的区别
    【面试经历】腾讯一二面分享与总结
    【面试经历】腾讯、网易有道和阿里的笔试分享及自我总结
    《Unity預計算即時GI》笔记:三、Clusters和总结
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7356872.html
Copyright © 2011-2022 走看看