25@JSP_day10

1、过滤器
  1)什么是过滤器?
    servlet规范中定义的一种特殊的类,可以拦截容器(服务器)的调用过程。
  2)编程
    step1 写一个java类,实现Filter接口。
    step2 在doFilter方法里,实现处理逻辑。
    step3 在web.xml文件里,配置过滤器。
    练习:
      写一个过滤器CommentFilterB,检查评论中字符的个数,如果超过20个字符,则提示用户评论字数过多,否则,调用CommentServlet输出用户的评论。
  3)过滤器的优先级
    由web.xml配置文件中的<filter-mapping>的先后顺序决定。
  4)初始化参数
    step1 在web.xml文件中,使用<init-param>配置初始化参数。
    step2 读取初始化参数
      String FilterConfig.getInitParameter(String paraName);    
  5)过滤器的优点
    a, 可以将多个模块相同的处理逻辑放在过滤器当中来处理(比如,session验证、权限管理、安全控制、编码处理等等),这样做的好处是方便代码的维护。
    b,可以实现代码的"可插拔性"。
      增加或者减少某个模块,不会影响到整个程序的运行。


2、监听器

  1)什么是监听器
    servlet规范当中定义的一种特殊的类,当容器创建或者销毁request,session,ServletContext,或者对这三个对象调用了setAttribute,removeAttribute方法时
产生的事件进行处理。
  2)编程
    step1 写一个java类,实现相应的监听器接口。
    step2 在监听器接口方法中,实现监听的逻辑。
    step3 web.xml文件当,配置。
    统计系统在线人数。

  3)ServletContext
    servlet上下文
    当servlet容器(服务器)启动时,会为每个应用创建唯一的一个ServletContext对象。该对象会一直存在,除非关闭服务器。
    a,获得servlet上下文
      方式一   GenericServlet.getServletContext();
      方式二   HttpSession.getServletContext();
      方式三   ServletConfig.getServletContext();
    b, 作用:
      作用一:绑订数据
        setAttribute(String name,Object obj);
        Object getAttribute(String name);
        removeAttribute(String name);
      作用二:访问全局的初始化参数
        step1 在web.xml文件当中,使用<context-param>配置全局的初始化参数
        step2 String getInitParameter(String paraName);
      作用三:  获得逻辑路径对应的实际部署时的物理路径。
        String getRealPath(String path);


 

3、上传文件(了解)    

  step1 设置表单的提交方式为post,并且设置表单的enctype属性:
    <form action="" method="post" enctype="multipart/form-data">
    此时,浏览器会将表单中的数据直接以二进制流的方式发送给服务器(不再进行url编码,即打开页面的编码是什么,就会对表单中的数据使用这种编码格式者编码)。
  step2 在服务器端,不能够使用request.getParameter方法。要使用request.getInputStream方法获得一个InputStream,然后分析这个输入流,获得相应数据。
    一般使用一些工具来分析。
    比如  apache提供的 commons-fileupload.jar提供的一些类来分析。
      将commons-fileupload.jar及相关的jar文件拷贝到WEB-INF\lib下,然后使用相应的api解析请求即可。


4、servlet的线程安全问题

  1)线程安全问题产生的原因
    容器在默认情况下,对于某个servlet,只会创建唯一的一个实例;如果多个请求到达容器,容器会启动多个线程来处理,此时,如果多个线程都访问了同一个servlet实例,就可能会产生线程安全问题(比如,修改servlet的属性)。
  2)解决方式
    a,加锁,使用synchronized对代码块加锁。
    b, 让servlet实现SingleThreadModel接口(没有定义任何的方法,是一个标识接口)。
      容器会为每一个线程分配一个servlet实例。
      不建议使用,因为容器内部会产生过多的servlet实例。


servlet知识点小结

  一、servlet基础
    1、什么是servlet?
    2、什么是servlet容器?
      符合servlet规范的程序,为servlet提供运行环境并且管理servlet的生命周期。
      servlet开发完成之后,必须部署到servlet容器当中才能运行。
    3、如何开发一个servlet?
    4、了解http协议    
  二、servlet核心
    1、表单处理
      1)如何获得表单中的参数值
        String request.getParameter(String name);
        String[] request.getParameterValues(String name);
      2)如何处理中文参数值
        step1 表单所在的页面以指定的编码格式打开(.jsp,使用page指令; html使用meta标记)并且,表单使用post方式提交。
        step2 在服务器端使用
          request.setCharacterEncoding(String code);
    2、get请求与post请求
      1)哪一些是get请求
      2)get请求的特点
      3)哪一些是post请求
      4)post请求的特点
    3、转发与重定向
      1)什么是转发?
      2)怎样转发(编程)?
        request.setAttribute(String name,Object obj);
        request.getRequestDispatcher(String url).forward(request,response);
      3)转发与重定向编程当中需要注意的问题
        转发或者重定向之前,会清空response中缓存的数据;如果调用了out.close,out.flush,会报错。
      4)转发的特点?
      5)什么是重定向?
      6)如何重定向(编程)?
      7)重定向的特点?
      8)转发与重定向的区别?
        转发:
          目的地只能是同一个应用内部的某个组件。
          浏览器地址栏的地址不变。
          可以共享request。
        重定向:
          目的地是任意的。    
          浏览器地址栏的地址会变。
          不能共享request。
    4、servlet的生命周期
      1)生命周期分成哪几个阶段?
        a,(两种情况)
        b,初始化(init方法)
        c,就绪(service方法)
        d,销毁(destroy方法)
      2)servlet的初始化参数
        a,<init-param>配置
        b,String ServletConfig.getInitParameter(String paraName);
      3) 基础的类与接口
        a,Servlet接口
        b,GenericServlet抽象类
        c,HttpServlet抽象类
        d,ServletConfig接口
        e,ServletRequest接口,ServletResponse接口
        f,HttpServletRequest接口,HttpServletResponse接口
        g,ServletContext接口
          setAttribute,getAttribute,removeAttribute
          String getInitParameter(String paraName);
          String getRealPath(String path);
  三、状态管理
    1、什么是状态管理
    2、如何进行状态管理
    3、cookie技术
      1)什么是cookie?
      2)创建cookie?
        Cookie c = new Cookie(String name,String value);
        response.addCookie(c);
      3)编码问题
        URLEncoder.encode(String str,String code);
        String URLDecoder.decode(String str,String code);
      4)生存时间
        cookie.setMaxAge(int seconds);
      5)路径问题
        cookie.setPath(String path);    
      6)限制
    4、session技术    
      1)什么是session?
      2)如何获得session?
        a, HttpSession request.getSession();    
        b, HttpSession request.getSession(boolean flag);
      3)session常用方法
        a setAttribute,getAttribute,removeAttribute;
        b,String getId();
      4)session的超时
        a, setMaxInactiveInterval(int seconds);
        b,配置文件
      5)删除session
        session.invalidate();
  四、数据库访问
    1)如何使用jdbc访问数据库
    2)dao
  五、过滤器和监听器
    1)什么是过滤器?
    2)如何写一个过滤器?
    3)初始化参数
      a, <init-param>
      b,String FilterConfig.getInitParameter(String paraName);
    4)优先级
    5)优点
    6)什么是监听器?
    7)如何写一个监听器?
  六、上传文件(了解)
  七、案例
    员工管理
    session验证
    验证码
    购物车

 


综合练习:

                
    
         
         

            
        
        
    
    
        
        
       

posted @ 2012-06-03 23:19  笑仁术Rex  阅读(199)  评论(0编辑  收藏  举报