过滤器解决中文编码问题

来源:互联网 发布:vb系列游戏是什么 编辑:程序博客网 时间:2024/06/04 23:22

 

 

不多说,上代码

如果不使用struts标签库的话,可以考虑我写的这个简单例子

JSP:

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
    <title>My JSP 'TestForm.jsp' starting page</title>

 </head> 
  <body> 
    <form action="testForm.action" name="t" method="post" >
    姓名111<input name="name" type="text"/>
    <input type="button" value="提交" onclick="javascript:t.submit();">
    </form>
  </body>
</html>

Filter:

package strutsTest;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class SetCharacterEncodingFilter implements Filter {

 private String encoding;
 private FilterConfig filterConfig=null;
 

 public void destroy() {
  // TODO Auto-generated method stub
  
 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  // TODO Auto-generated method stub
  HttpServletRequest r=(HttpServletRequest) request; 
  if(null==request.getCharacterEncoding())
  {  
   r.setCharacterEncoding(encoding);
   System.out.println("FILTER SET ENCODING SUCCESS!");
  }
   
  System.out.println("filter encoding:"+r.getCharacterEncoding());
  System.out.println("filter param :"+r.getParameter("name"));//这两句话一定要放在setCharacterEncoding的后面,否则的话还是乱码,传到Action也会乱码,或者去掉这两行

  chain.doFilter(request, response);
  
 }

 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub
  this.filterConfig = arg0;
        this.encoding = filterConfig.getInitParameter("encoding");
     
 }
  protected String selectEncoding(ServletRequest request) {

         return (this.encoding);

     }
}

web.xml:

<filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>strutsTest.SetCharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>utf-8</param-value>
  </init-param>
  
 </filter>
  <filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>*.action</url-pattern>
 </filter-mapping>

 

struts.xml:

<package name="zxl" extends="struts-default">
  <!-- 测试form表单参数请求会不会出现在url地址栏里面 -->
  <action name="testForm" class="strutsTest.TestForm">
  <!-- / 表示跟路径下 即webRoot路径下面 -->
   <result name="success">/jsp/TestFormSuccess.jsp</result> 
  </action>
 </package>

 

action代码:

package strutsTest;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

public class TestForm  {

 private String name;

 public String getName() {
  return name;
 }

 public void setName(String name) {
 
  this.name = name;
  System.out.println("TestForm.java:"+name);
  /*try {
   System.out.println("TestForm.java:"+new String(name.getBytes("ISO-8859-1"),"UTF-8"));
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  */
 }
 
 public String execute(){
  return "success";
 }

}

 

 

 

0 0
原创粉丝点击