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()
容器调用这个方法来表明一个过滤器正在从服务中移除 |
代码示例
// 引入Java包
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*; // 实现 Filter 类
public class LogFilter implements Filter {
public void init(FilterConfig config)
throws ServletException{
// 获取初始化参数
String testParam = config.getInitParameter("test-param"); //打印初始化参数
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws java.io.IOException, ServletException { // 获取客户端ip地址
String ipAddress = request.getRemoteAddr(); // 输出ip地址及当前时间
System.out.println("IP "+ ipAddress + ", Time "
+ new Date().toString()); // 传递请求道过滤器链
chain.doFilter(request,response);
}
public void destroy( ){
/* 在Filter实例在服务器上被移除前调用。*/
}
}
web.xml文件中的JSP过滤器映射
过滤器被定义,然后映射成一个URL或JSP文件名,与servlet被定义然后映射的方式差不多。在部署描述文件web.xml中,使用<filter>标签来进行过滤器映射:
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上述过滤器将会应用在所有servlet和JSP程序中,因为我们在配置中指定了" /*"。您也可以指定一个servlet或JSP路径,如果您只想要将过滤器应用在少数几个servlet或JSP程序中的话。
现在,像平常一样访问servlet或JSP页面,您就会发现服务器日志中产生了关于此次访问的记录。您也可以使用Log4J记录器来把日志记录在其它文件中。
__________________________________________________________________________________________________________
使用多重过滤器
您的网络应用程序可以定义很多不同的过滤器。现在,您定义了两个过滤器,AuthenFilter和LogFilter,其它的步骤与前面讲的一样,除非要创建一个不同的映射,就像下面这样:
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter> <filter>
<filter-name>AuthenFilter</filter-name>
<filter-class>AuthenFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
过滤器的应用顺序
在web.xml中<filter>元素的映射顺序决定了容器应用这些过滤器的顺序。要反转应用的顺序,您只需要反转web.xml中<filter>元素的定义顺序就行了。
比如,上面的例子会首先应用 LogFilter然后再应用AuthenFilter,但是下面这个例子将会反转应用的顺序:
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
jsp提交表单数据乱码,内置对象,以及过滤器的更多相关文章
- JSP脚本中的9个内置对象
JSP脚本中包含9个内置对象,这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化.也就是说它们已经是对象,可以直接使用. 我们随意打开一个由JSP页面生成的Ser ...
- JSP最常用的五种内置对象(out,request,response,session,application)
为了简化开发过程,JSP提供了一些内置对象,它们由容器实现和管理.开发者在JSP页面中无需声明,无需实例化就可使用.主要有out,request,response,session,applicatio ...
- JSP中的Java代码和内置对象
一.JSP中的Java代码 (一)JSP页面中有三种方式嵌入java代码: 1.java的表达式 格式:<%= java表达式 %> 2.java的语句 格式:<% java语句&g ...
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
简单来说,javaweb技术就是让服务器端能够执行Java代码,之后返回数据给客户端(浏览器)让客户端显示数据 jsp页面中可以嵌套java代码(java小脚本)和嵌套Web前端(html,css,j ...
- JSP 脚本中的 9 个内置对象
JSP 脚本中包含了 9 个内置对象,这 9 个内置对象都是 Servlet API 接口的实例,只是 JSP 规范对它们进行了默认初始化. 这 9 个内置对象如下: 1.application:ja ...
- 1.3(学习笔记)JSP(Java Server Pages)内置对象
一.内置对象 内置对象又称内建对象.隐式对象,是由服务器自动创建实例化的, 用户在使用时不需要显示的创建,可直接使用. jsp内置对象名称,类型及作用域 Scope代表该内置对象的作用范围,page表 ...
- JSP(Java Server Pages)内置对象
request对象 (1)访问请求参数 处理HTTP请求中的各项参数.在这些参数中,最常用的就是获取访问请求参数.当通过超链接的形式发送请求时,可以为该请求传递参数,这可以通过在超链接的后面加上问好& ...
- JSP 9个内置对象
JSP内置对象(隐式对象)是JSP容器为每个页面自动实例化的一组对象,开发者可直接使用,也被称为预定义变量. JSP容器提供了9个内置对象 request // javax.servlet.http. ...
- JSP基本的语法、3个编译指令、7个动作指令、9个内置对象
一.jsp概述 JSP是java server page的缩写,其本质是一个简化的servlet,是一种动态网页技术标准.jsp页面是在HTML页面中嵌入java程序段.使用jsp开发的应用程序能够跨 ...
随机推荐
- mysql--sqlalchemy.exc.IntegrityError: (IntegrityError) (1215, 'Cannot add foreign key constraint'
今天在使用mysql时遇到的问题,最后发现问题是,数据类型与外键数据类型不同,改正过来就没有问题了.
- web storage和cookie的区别
Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的.Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外co ...
- 批量转换编码 (gbk -> utf8)
使用 Notepad++ 批量的转换文件编码:Mass convert a project to UTF-8 using Notepad++ 步骤如下: 1.一般 Noptepad++ 安装完后已经自 ...
- ROS的单线程Spinning和多线程Spinning
单线程Spinning ros::spin()是最简单的单线程自旋, 它会一直调用直到结束 用法: ros::spin(); 另一个单线程spinning是ros::spinOnce(),它定期调用 ...
- SQL Server中Text和varchar(max)数据类型区别
SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与v ...
- C#中图片与BASE64码互相转换
//保存目录 string dir = "/upload/user/head"; //站点文件目录 string fileDir = HttpContext.Current.Ser ...
- python【1】-基础知识
1.简介 python是一种解释性的.面向对象的.带有动态语义的高级程序设计语言. 廖雪峰网站:http://www.liaoxuefeng.com/wiki/001374738125095c955c ...
- 用c++写一个广告系统
用到的基础类库 1.sstream <sstream> 库定义了三种类:istringstream.ostringstream和stringstream,分别用来进行流的输入.输出和输入输 ...
- js调用.net后台事件、后台调用前台以及js调用服务器控件
1. javaScript函数中执行C#代码中的函数: 方法一:间接触发后台代码 1.首先建立一个服务端控件按钮命名为btn1,双击进入后台将调用或处理的内容写入btn1_click中; 2.在前台写 ...
- Python之路,Day6 - 面向对象学习
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏 ...