URL重写、Filter(过滤器)、监听器(Listener)

14.URL重写
    也属于会话追踪技术的一种.

    URL重写解决了这样一个问题:
    当前浏览器把cookie禁用之后,浏览器在发请求的时候,就不会把cookie带到服务器端了(其中最重要的也包括JSESSIONID),因为禁用cookie之后浏览器拒绝一切站点向浏览器写入cookie的(注意再禁用之前是否已经有一些已经存在的cookie了),这样的话,多个请求就不能在服务器端拿到同一个session对象了(因为发送请求的时候没有把JSESSIONID的值传给服务器)。

    把JSESSIONID从客户端传给服务器,有俩种方式:
    1.JSESSIONID保存在cookie文件中,浏览器发送请求的时候把这个cookie文件中的数据带给服务器(cookie).

        2.通过传参的方式,把JSESSIONID的值通过要访问的URL传给服务器.(URL重写)

    
    如何实现URL重写:
    String url = resp.encodeURL("..");
    这个方法参数就是我们要访问的URL,这个方法会把重写后的URL以字符串的形式返回.

    例如:在一个超链接中,本来要访问的URL是:<a href="GetDataFromSession">
    
    重写后:
    <a href="GetDataFromSession;jsessionid=5480EF9016295A73DC56731A2F123246">
    

    15.Filter(过滤器)
    作用:在一个请求去访问某个资源的时候,filter可以在这个请求访问到这个资源之前,把请求拦下,然后做出一系列的处理或者判断(比如编码的转换,信息的过滤、权限的判断、是否已经登录的验证等等),最后filter再决定是否要让这个请求去访问那个资源.

    如何写一个filter:
    写一个java类,然后实现javax.Servlet.Filter接口

    这个接口中有三个方法:
    init  destroy  doFilter
    init:这个过滤器类被服务器创建对象的时候会调用到这个方法。
    destroy:过滤器对象被销毁的时候会调用这个方法。
    doFilter:当过滤器拦截到请求的时候,会调用这个doFilter.
    
    注意:
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain)

    这个方法有三个参数,第三个参数表示的一个过滤器链对象,因为同一个请求有可能要依次的通过俩个或者多个过滤器,在web中把这样多个过滤器看做一个过滤器链条对象,就是用这个FilterChain类型的对象来表示。
    chain.doFilter(req,res)表示把当前的req和res传给这个过滤器链条中的下一个过滤器进行过滤,如果说链条中已经没有下一个过滤器,那么就把这次访问放行,让它去访问它真正要访问的资源.

    注意:如果这次访问没有符合过滤器中的条件,那么我们就不用调用chain.doFilter(req,res)这个方法把这次访问放行了,而是可以直接进行跳转(服务器内部跳转或者客户端重定向),跳转到一个页面,页面中提示用户一下,为什么这次不让他去访问,比如说 还没有登录、权限不够等等原因。


        最后还需要在web.xml文件中进行配置:
    例如:
  <filter>
      <filter-name>encodingFilter</filter-name>
      <filter-class>com.briup.filter.EncodingFilter</filter-class>
  </filter>
  
  <filter-mapping>
      <filter-name>encodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

    这个配置和servlet的配置很相似。

    <url-pattern>/*</url-pattern>
    表示当前这个过滤器,要拦截的路径是/*,表示项目中所有的资源。
    
    <url-pattern>/servlet/*</url-pattern>
    表示当前这个过滤器,要拦截的路径是/servlet/*,也就是项目下面的servlet路径下面的所有资源.

    <url-pattern>/firstServlet</url-pattern>
    表示当前这个过滤器,要拦截的路径是/firstServlet,也就是说这个过滤器只会拦截这一个路径.

    如果要拦截的路径有俩个,我们可以配置俩个<filter-mapping>标签分别都去和同一个<filter>标签对应。

     注意:1.这里的/代表地址栏中项目名字后的/
      2.某一个资源是不是会被拦截,要看地址栏中会不会出现我们在web.xml文件所配置的要拦截的路径.


    16.监听器(Listener)
    作用:监听web中的一些事件的发生,如果某些事件一旦发生了,那么这个监听器就会调用某些方法进行处理.
    比如:在web中可以监听request对象的创建和销毁.

    如何去写一个监听器:
    1.写一个类,实现一个特点的接口。
    2.在web.xml文件中进行配置。
    web.xml:
     <listener>
          <listener-class>com.briup.listener.RequestListener</listener-class>
     </listener>
    
    比如:
    监听request对象的创建和销毁要实现接口ServletRequestListener
    监听session对象的创建和销毁要实现接口HttpSessionListener
    监听application对象的创建和销毁要实现接口  

    JSP
  属于动态网页技术的一种.
  (servlet、jsp、PHP、asp等等)

猜你喜欢

转载自blog.csdn.net/bifuguo/article/details/82964972