JSP基础知识➣获取参数和过滤器(四)

摘要:
获取的参数值主要通过请求进行处理。请求。getParameter()方法用于获取表单参数的值。调用此方法从客户端读取二进制数据流。当客户端请求与方法和过滤器设置匹配的URL时,servlet容器将首先调用过滤器的doFilter方法。3.publicvoid destroy()servlet容器在销毁过滤器实例之前调用此方法,并释放servlet过滤器在此方法中占用的资源。

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>

免责声明:文章转载自《JSP基础知识➣获取参数和过滤器(四)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇spark集群搭建【转】bt协议的详细分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

osgEarth学习笔记

osgEarth学习笔记     这是个人在学习osgEarth时根据体会或从别的地方看到的做的一个简单整理,有些东东就是官方文档翻译过来的,都是根据自己的需要感觉需要记录下来什么东西就随便记录下来了,也没有个条理,都是用到哪记到哪,别见怪。对个人在初期使用osgEarth时有很多帮助,所以特发上来,希望对大家也有帮助 osgEarth学习笔记 1.   ...

onkeypress与onkeydown及 oncopy和onpaste 事件区别详细说明

onkeypress与onkeydown 具体区别: 1. 一个放开一个没有放开,onkeydown 先于 onkeypress 发生。 2.onkeypress 无法系统按钮。 2.onkeydown 捕获的 keyCode 不区分字母大小,而 onkeypress 区分。 onkeypress是在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键...

vue.js中v-for的使用及索引获取

2.x版本: v-for="(item,index) in items" index即索引值。  ==========================分割线============================== 1.x版本: 1.v-for   示例一: <!DOCTYPE html> <html> <head>...

appium -- 页面出现弹窗,关闭后,无法识别页面元素

1. 问题:如图所示:在修改手势密码的过程中,点击了返回按钮后,弹出该弹窗;点击继续设置后,就发现 driver.getPageSource()获取不到页面元素。在找了一圈无用的资料后,没有什么好的处理方式,本来想着那我就放弃设置就好了。 结果在别的页面也出现了类似的情况。最终只能硬着头皮解决该问题了。 2. 解决方法:    方法真的很简单,就一行代码...

spring boot2.0.4集成druid,用jmeter并发测试工具调用接口,druid查看监控的结果

一、项目介绍(本项目用的编程语言是jdk8,项目源码: https://github.com/zhzhair/mybatis-druid-spring-boot.git)   1.引入pom依赖:   <dependencies>     <dependency>       <groupId>org.springfra...

Maven 多模块父子工程 (含Spring Boot示例)

 一、为什么要用Maven多模块 假设有这样一个项目,很常见的Java Web应用。在这个应用中,我们分了几层: Dao Service Web 对应的,在一个项目中,我们会看到一些包名: org.xx.app.dao org.xx.app.service org.xx.app.web org.xx.app.util 但随着项目的进行,你可能会遇...