zoukankan      html  css  js  c++  java
  • JSP基础知识➣获取参数和过滤器(四)

    JSP表单提交和参数获取

      JSP表单提交的两种方式:post和get,通过这两种方式提交的参数到后台,获取参数的值主要由request来处理,获取值的方式有以下几种:

    • getParameter(): 使用 request.getParameter() 方法来获取表单参数的值。

    • getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkbox类型

    • getParameterNames():该方法可以取得所有变量的名称,该方法返回一个Emumeration。

    • getInputStream():调用此方法来读取来自客户端的二进制数据流。

      对于获取参数中含有中文的,我们可以转换成UTF-8来实现乱码处理:

      new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8")来转换编码

    JSP 过滤器

      JSP 和 Servlet 中的过滤器都是 Java 类。过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

      可以实现以下目的:

    • 在客户端的请求访问后端资源之前,拦截这些请求。
    • 在服务器的响应发送回客户端之前,处理这些响应。

      根据规范建议的各种类型的过滤器:

    • 身份验证过滤器(Authentication Filters)。
    • 数据压缩过滤器(Data compression Filters)。
    • 加密过滤器(Encryption Filters)。
    • 触发资源访问事件过滤器。
    • 图像转换过滤器(Image Conversion Filters)。
    • 日志记录和审核过滤器(Logging and Auditing Filters)。
    • MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)。
    • 标记化过滤器(Tokenizing Filters)。
    • XSL/T 过滤器(XSL/T Filters),转换 XML 内容。

      Servlet过滤器方法

    1public void doFilter (ServletRequest, ServletResponse, FilterChain)
    该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
    2public void init(FilterConfig filterConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦
    截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
    3public void destroy() Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

      过滤器的实现

      1、编写Filter类,继承javax.servlet.Filter,实例如下

    //@WebFilter(
    //        description = "测试", 
    //        urlPatterns = { "/*" }, 
    //        initParams = { 
    //                @WebInitParam(name = "Site", value = "博客园")
    //        })
    public class LogFilter implements Filter {
    
        /**
         * Default constructor. 
         */
        public LogFilter() {
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see Filter#destroy()
         */
        public void destroy() {
            // TODO Auto-generated method stub
        }
    
        /**
         * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            // TODO Auto-generated method stub
            // place your code here
    
            // pass the request along the filter chain
            System.out.println("拦截器监听客户端IP:"+request.getRemoteAddr());
            chain.doFilter(request, response);
        }
    
        /**
         * @see Filter#init(FilterConfig)
         */
        public void init(FilterConfig fConfig) throws ServletException {
            // TODO Auto-generated method stub
            String site=fConfig.getInitParameter("Site");
            System.out.println("网站名称:"+site);
        }
    
    }

      2、配置web.xml内容节点

      节点说明

    • <filter>指定一个过滤器。
      • <filter-name>用于为过滤器指定一个名字,该元素的内容不能为空。
      • <filter-class>元素用于指定过滤器的完整的限定类名。
      • <init-param>元素用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名字,<param-value>指定参数的值。
      • 在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
    • <filter-mapping>元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径<servlet-name>指定过滤器所拦截的Servlet名称。
      • <filter-name>子元素用于设置filter的注册名称。该值必须是在<filter>元素中声明过的过滤器的名字
      • <url-pattern>设置 filter 所拦截的请求路径(过滤器关联的URL样式)
    • <dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARDERROR之一,默认REQUEST。用户可以设置多个<dispatcher>子元素用来指定 Filter 对资源的多种调用方式进行拦截。
    • <dispatcher>子元素可以设置的值及其意义
      • REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
      • INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
      • FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
      • ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

      xml实例

    <filter>
          <filter-name>LogFilter</filter-name>
          <filter-class>com.selfcom.LogFilter</filter-class>
          <init-param>
              <param-name>Site</param-name>
              <param-value>A级博客园</param-value>
          </init-param>      
      </filter>
      <filter-mapping>
          <filter-name>LogFilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
  • 相关阅读:
    SoapUI 使用笔记
    git 使用笔记(二)
    git 使用笔记(一)
    jquery 拓展
    hdu 1024 Max Sum Plus Plus (DP)
    hdu 2602 Bone Collector (01背包)
    hdu 1688 Sightseeing (最短路径)
    hdu 3191 How Many Paths Are There (次短路径数)
    hdu 2722 Here We Go(relians) Again (最短路径)
    hdu 1596 find the safest road (最短路径)
  • 原文地址:https://www.cnblogs.com/xibei666/p/6507137.html
Copyright © 2011-2022 走看看