Servlet 编码问题

转自 百度空间A Man 的日志
Servlet 编码问题Servlet 2010-07-31 16:06:43 阅读45 评论0 字号:大中小 订阅
一、静态中文展示


servlet做页面
response.setContentType("text/html;charset=utf-8/gbk/gb2312");


二、动态传递中文参数:可以将中文参数进行单的类型转换(注意:字符编码与参数的元字符编码和参数的目标字符编码要一致)


*get传参:直接修改tomcat服务器中连接期的默认字符编码为utf-8/gbk/gb2312(在servlet.xml文件,连接器<Connector>中增加属性 URIEncoding="utf-8")


*post传参
在servlet获取参数之前调用如下方法,对所有的封装到requset中的参数的字符编码同义转换 request.setCharacterEncoding("utf-8/gbk/gb2312");(关键的代码)
假如页面很多,这种方式就不实用
通过过滤器servlet来调用以上方法,对用户发出请求时的以post方式的传递的中文参数进行统一的字符编码转换
过滤器属于servlet的一种,其加载的优先级高于所有的控制器servlet。其在web容器中的注册信息必须放在所有的控制器servlet注册信息之前。
操作:


1.在配置文件里面
<!-- 注册过滤器 -->
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.qulx.filter.MyFilter</filter-class>
<!-- 设置过滤器使用的字符编码 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<!-- 设置过滤行为是否调用 -->
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 设置过滤器映射名 -->
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

注意如果只想对针对其中的某些参数进行字符编码的转换,可以修改虚拟目录的名称,修改<url-pattern>/虚拟目录/*</url-pattern>
可以把想过滤的内容放在一个虚拟子目录中。

2.在过滤器中写入,需要实现Filter接口

public class MyFilter implements Filter {

private String encoding ="";
private boolean enable = false;
public void init(FilterConfig arg0) throws ServletException {

this.encoding = arg0.getInitParameter("encoding");
String able = arg0.getInitParameter("enable");
if(able.equals("true")){
this.enable = true;
}
}
public void destroy() {
// TODO Auto-generated method stub

}
//执行过滤行为的方法
//FilterChain 负责释放控制权
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

//将request中封装的所有的中文参数统一进行字符编码转换
if(this.enable){
request.setCharacterEncoding(this.encoding);
}
//释放控制权
chain.doFilter(request, response);

}



}


*对post传参和get传参,都能进行字符编码转换,请求的参数.getBytes("iso-8859-1","")

eg :String name = request.getParameter("name");

  name = new String (name.getBytes("gbk"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值