Servlet初步总结《2》

Servlet初步总结《2》,第1张

Servlet初步总结《2》

7.范围对象
  1.范围对象
    request        在同一个请求内有效
    session        在同一个会话内有效
    application    在同一个项目内有效
  2.如何获取三种对象
    1、request对象        方法中的request参数可以直接使用
    2、session对象        HttpSession session = request.getSession();
                (其中括号中默认为true:就是当没有session对象的时候就创建一个新的)
                (当括号中为false的话就是没有session对象就返回null)
    3、application对象    ServletContext application = request.getServletContext();
  3.生命周期
    1.request对象:        每次请求都是一个全新的request对象。
    2.session对象:        1.request.getSession() 方法第一次被调用时,会创建session对象, session.invalidate() 调用的
                时候会销毁session。
                2.并且一个会话中可以有多个request请求,所以放在session中的数据,可以被多个请求所共享。
                3.默认超时时间为30分钟,可以在web.xml中进行设置,单位是分钟
    3.application对象    启动tomcat服务器的时候,就会被创建,关闭tomcat服务器的时候,就会被销毁。
                每个项目在运行期间,都会有且只有一个application对象,与这个项目对应。
  4.存取数据
    三个对象的存取数据方式都是一样的:
        .setAttribute("key", value);
        .getAttribute("key", value);
        .removeAttribute("key", value);

8.会话追踪
    1.cookie:
       常用到的一种会话追踪技术,cookie是浏览器中用来存储信息的一种本地文件,浏览器再向服务
    器发送请求的时候,可以根据服务器的地址,将对应的cookie中的信息,携带到请求头中,一起发送给
    服务器
    2.cookie和session的联系
    简单来说:
      浏览器发送请求至服务器,服务器会产生session对象,服务器在返回响应时,将session对象的id值(JSESSIONID)
    进行返回给浏览器中的cookie文件来保存。
      服务器通过JESSIONID的值,就能够知道服务器内存中是哪一个session对象,和当前这个客户端对应
      这样就能到达一个效果,客户端的每一次访问,在服务器端都能够拿到相同的一个session对象,
    从而实现不同请求之间通过相同的session对象进行数据的共享
    3. 服务器写回cookie
    4. 服务器读取cookie
    5.  URL重写
        会话追踪,除了使用cookie技术来实现之外,还可以使用另一种方式来实现:URL重写
       String url = response.encodeURL("url")
    1、测试前先确保浏览器的cookie功能已经被禁用
    2、 response.encodeURL(url); 核心代码分别注释掉和代开,来观察测试结果
    注意,无论是cookie还是URL重写,其核心都是将sessionID保存到客户端,然后发请求的时候,把
    这个id值传给服务器,服务器通过这个id值,找到服务器内存中哪一个session对象和当前请求相对 应。
9. filter(过滤器)
    1.定义
      在一个请求去访问某个资源的时候,filter(过滤器)可以在这个请求,访问到这个资源之前,把请求拦
    下,然后做出一系列的处理,例如编码转换、信息过滤、权限判断、登录验证等等,最后filter再决定,
    是否要让这个请求去访问那个目标资源。
    2.步骤
      2.1实现Filter接口,重写doFilter方法。
      2.2通过xml或者注解进行filter的配置(配置信息中/*表示全部拦截过滤)
           四种过滤方式:
            精确匹配
            表示此拦截器只会拦截/test_servlet这一个路径
            扩展名匹配
            例如, *.html
            表示此拦截器只会拦截后缀名是.html的路径
            路径匹配
            例如, /test/*
            表示此拦截器拦截/test路径下的所有资源
            匹配任意路径
            例如, /*
            表示此拦截器拦截项目下所有资源
    3. 生命周期
      当前服务器启动的时候,Filter会被创建并调用init方法初始化,服务器关闭的时候会被销毁并调用
      destory方法。
10.listener
    1.定义
      监听器(listener)用于监听web程序中的事件,监听器主要用于对 Session、request、application进行监控。
    2.不同功能的监听器,需要实现不同的接口,可以大致分为以下几种监听器类型:
      1、监听 request、Session、application 的创建和销毁,这些接口分别为
        ServletRequestListener
        HttpSessionListener
        ServletContextListener
      2、监听request、session、application三个对象中属性变化,这些接口分别为
        ServletRequestAttributeListener
        HttpSessionAttributeListener
        ServletContextAttributeListener
    3. error-page
      在web.xml中,可以使用 来定制错误的返回页面
      可以用于404以及各种异常的情况
        404:
        
        404
        /404.html
        

        异常:
        
        java.io.FileNotFoundException
        /not_found.html
        

    4.WEB-INF
      WEB-INF是Java的WEB应用中的安全目录。
      安全目录指的是客户端无法访问,只有服务端可以访问的目录。(想访问的话可以通过跳转)
11.上传
    1.主要代码
    //注解
    @MultipartConfig(location = "D:\briup\upload")
    String username = request.getParameter("username");
    //获取上传的文件
    Part part = request.getPart("file");
    //获取上传文件的名字
    //servlet3.1的方法
    String fileName = part.getSubmittedFileName();
    System.out.println(username+" 上传了文件:"+fileName);
12.下载
    1.注意事项
      1. servlet其实就是用io流不停的去读那个文件,然后再用输出流不停的写给客户端浏览器
      2. 下载结束,也就是说输出流结束之后,下面是不能再写跳转的代码的,要不然会报错
      3. 按照http协议的要求,设置下载的响应类型ContentType,以及设置响应头Content-Disposition来指
         定下载文件的名字
    2.主要代码
      String fileName = request.getParameter("fileName");
      response.setContentType("application/x-download");
      // 下载文件时显示文件的保存名称
      String fileDisplay = "briup_"+fileName;
      // 下载文件名的中文编码转换 因为写回去的时候是字节流
      // 不设置会出现下载文件的中文名字乱码
      fileDisplay = new String(fileDisplay.getBytes("utf-8"),"ISO-8859-1")
      response.addHeader("Content-Disposition","attachment;filename="+fileDisplay);
      (后面就是流的 *** 作了,这里不再写了)
12.7 三层架构
    1.三层架构:
      web层
      service层
      dao层
    2.任务
      web层中代码的主要任务:
        接收客户端传来的参数
        把参数封装成对象
        把封装好的对象/数据传给service
        根据service层的处理结果决定把那个页面/数据返回给客户端
    service层中代码的主要任务:
        接收web层传过来的对象/数据(如果有的话)
        根据这些信息进行业务逻辑处理
    dao层中代码的主要任务:
        接受service传的参数(如果有的话)
        和数据库进行交互
        把交互结果返回给service层

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4666786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存