zoukankan      html  css  js  c++  java
  • jsp提交表单数据乱码,内置对象,以及过滤器

                    jsp提交表单数据乱码解决方案

     通过form表单给服务器提交数据的时候,如果提交的是中文数据,那么可能会出现乱码,如果表单的请求方式是post请求,那么可以使用如下方案解决乱码:

     在调用getParameter()之前,设置请求对象request的编码方式。

    <% request.setCharacterEncoding("utf-8");%>

      002.如果是通过get方式提交的form,两种处理乱码方案:

     01.通过new String(str.getBytes(“iso-8859-1”),”utf-8”);

      这种方式的缺点,每获取到一个用户提交的数据就要进行一道转换

      02.通过conf下的server.xml文档的

                  <Connector port="8080" protocol="HTTP/1.1"

                   connectionTimeout="20000"

                   redirectPort="8443" URIEcoding=”utf-8”      />

    不推荐使用第二种方式,但是要了解,因为真正的开发中,我们接触不到服务器。

                          jsp过滤器

    Servlet和JSP中的过滤器都是Java类,它们存在的目的如下:

    • 在请求访问后端资源时拦截它
    • 管理从服务器返回给客户端的响应

    下面列出了多种常用的过滤器类型:

    • 认证过滤器
    • 数据压缩过滤器
    • 加密过滤器
    • 触发资源访问事件的过滤器
    • 图像转换过滤器
    • 登录和验证过滤器
    • MIME类型链过滤器
    • 令牌过滤器
    • 转换XML内容的XSL/T过滤器

    过滤器将会被插入进web.xml文件中,然后映射servlet、JSP文件的名字,或URL模式。部署描述文件web.xml可以在 <Tomcat-installation-directory>conf 目录下找到。

    当JSP容器启动网络应用程序时,它会创建每一个过滤器的实例,这些过滤器必须在部署描述文件web.xml中声明,并且按声明的顺序执行。

    Servlet过滤器方法

    一个过滤器就是一个Java类,它实现了javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法:

    序号方法 &描述
    1 public void doFilter (ServletRequest, ServletResponse, FilterChain) 每当 request/response要通过过滤链时容器会调用这个方法,因为客户端请求链尾的资源
    2 public void init(FilterConfig filterConfig) 容器调用这个方法来表明一个过滤器被安置在服务中
    3 public void destroy() 容器调用这个方法来表明一个过滤器正在从服务中移除

    代码示例

     1 //  引入Java包
     2 import java.io.*;
     3 import javax.servlet.*;
     4 import javax.servlet.http.*;
     5 import java.util.*;
     6  
     7 // 实现 Filter 类
     8 public class LogFilter implements Filter  {
     9    public void  init(FilterConfig config) 
    10                          throws ServletException{
    11       // 获取初始化参数
    12       String testParam = config.getInitParameter("test-param"); 
    13  
    14       //打印初始化参数
    15       System.out.println("Test Param: " + testParam); 
    16    }
    17    public void  doFilter(ServletRequest request, 
    18                  ServletResponse response,
    19                  FilterChain chain) 
    20                  throws java.io.IOException, ServletException {
    21  
    22       // 获取客户端ip地址  
    23       String ipAddress = request.getRemoteAddr();
    24  
    25       // 输出ip地址及当前时间
    26       System.out.println("IP "+ ipAddress + ", Time "
    27                                        + new Date().toString());
    28  
    29       // 传递请求道过滤器链
    30       chain.doFilter(request,response);
    31    }
    32    public void destroy( ){
    33       /* 在Filter实例在服务器上被移除前调用。*/
    34    }
    35 }
    View Code

    web.xml文件中的JSP过滤器映射

    过滤器被定义,然后映射成一个URL或JSP文件名,与servlet被定义然后映射的方式差不多。在部署描述文件web.xml中,使用<filter>标签来进行过滤器映射:

     1 <filter>
     2    <filter-name>LogFilter</filter-name>
     3    <filter-class>LogFilter</filter-class>
     4    <init-param>
     5       <param-name>test-param</param-name>
     6       <param-value>Initialization Paramter</param-value>
     7    </init-param>
     8 </filter>
     9 <filter-mapping>
    10    <filter-name>LogFilter</filter-name>
    11    <url-pattern>/*</url-pattern>
    12 </filter-mapping>
    View Code

    上述过滤器将会应用在所有servlet和JSP程序中,因为我们在配置中指定了" /*"。您也可以指定一个servlet或JSP路径,如果您只想要将过滤器应用在少数几个servlet或JSP程序中的话。

    现在,像平常一样访问servlet或JSP页面,您就会发现服务器日志中产生了关于此次访问的记录。您也可以使用Log4J记录器来把日志记录在其它文件中。

    __________________________________________________________________________________________________________

    使用多重过滤器

    您的网络应用程序可以定义很多不同的过滤器。现在,您定义了两个过滤器,AuthenFilter和LogFilter,其它的步骤与前面讲的一样,除非要创建一个不同的映射,就像下面这样:

     1 <filter>
     2    <filter-name>LogFilter</filter-name>
     3    <filter-class>LogFilter</filter-class>
     4    <init-param>
     5       <param-name>test-param</param-name>
     6       <param-value>Initialization Paramter</param-value>
     7    </init-param>
     8 </filter>
     9  
    10 <filter>
    11    <filter-name>AuthenFilter</filter-name>
    12    <filter-class>AuthenFilter</filter-class>
    13    <init-param>
    14       <param-name>test-param</param-name>
    15       <param-value>Initialization Paramter</param-value>
    16    </init-param>
    17 </filter>
    18  
    19 <filter-mapping>
    20    <filter-name>LogFilter</filter-name>
    21    <url-pattern>/*</url-pattern>
    22 </filter-mapping>
    23  
    24 <filter-mapping>
    25    <filter-name>AuthenFilter</filter-name>
    26    <url-pattern>/*</url-pattern>
    27 </filter-mapping>
    View Code

    过滤器的应用顺序

    在web.xml中<filter>元素的映射顺序决定了容器应用这些过滤器的顺序。要反转应用的顺序,您只需要反转web.xml中<filter>元素的定义顺序就行了。

    比如,上面的例子会首先应用 LogFilter然后再应用AuthenFilter,但是下面这个例子将会反转应用的顺序:

    1 <filter-mapping>
    2    <filter-name>AuthenFilter</filter-name>
    3    <url-pattern>/*</url-pattern>
    4 </filter-mapping>
    5  
    6 <filter-mapping>
    7    <filter-name>LogFilter</filter-name>
    8    <url-pattern>/*</url-pattern>
    9 </filter-mapping>
    View Code

  • 相关阅读:
    JSON使用——获取网页返回结果是Json的代码
    关于android:inputType属性的说明
    MySQL无视密码进入Server
    Linux下MySQL使用
    Linux下mv命令详解
    软件测试:测试用例
    软件测试:概述
    《零售业务中台架构设计探讨及实践》阅读笔记
    Python开发:OpenCV版本差异所引发的cv2.findContours()函数传参问题
    《小米网抢购系统开发实践》阅读笔记
  • 原文地址:https://www.cnblogs.com/meixinyuan/p/4967933.html
Copyright © 2011-2022 走看看