struts工程form表单提交乱码问题  谢谢了用了 几种方法都不行啊

neusoftxu 2007-01-18 11:54:27
public class MyRequestProcessor extends RequestProcessor{
public MyRequestProcessor(){}
protected boolean processPreprocess(HttpServletRequest request,
HttpServletResponse response){
try{
request.setCharacterEncoding("GBK");//在此设置字符集
}
catch(Exception ex){
System.out.println("字符集设置失败");
}
return true;
}
}

在struts-config.xml中
<controller processorClass="com.ccu.bbs.requestprocessor.MyRequestProcessor" />



就是不好用 是什么原因呢?
...全文
355 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
凉凉二点凉 2007-01-19
  • 打赏
  • 举报
回复
我就是gb2312怎么没有问题啊?
minisun2000 2007-01-19
  • 打赏
  • 举报
回复
你只改了获得参数时的编码,但是根本没有体现你form中参数原来的编码,出现乱码很正常。
包含form的JSP页面的编码是什么?response.setCharacterEncoding为何值?
othella 2007-01-19
  • 打赏
  • 举报
回复

解决页面上的中文显示或者Form提交会乱码的问题,在web.xml加入字符集过滤,如下:
<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>com.company.filter.CharsetFilter</filter-class>
<init-param>
<param-name>charsetEncodingType</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
对应的com.company.filter.CharsetFilter类如下:

package com.company.filter;

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 org.apache.commons.lang.StringUtils;

public class CharsetFilter implements Filter{

private static final String characterEncodingType="charsetEncodingType";
private static final String defaultCharsetEncode="gb2312";
private String charsetEncode=null;

public void init(FilterConfig arg0) throws ServletException {
charsetEncode=arg0.getInitParameter(characterEncodingType);
if(StringUtils.isEmpty(charsetEncode)){
System.out.println("characterEncodingType is empty. so default is gb2312");
charsetEncode=defaultCharsetEncode;
}
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
request.setCharacterEncoding(charsetEncode);
filterChain.doFilter(request,response);
}

public void destroy(){}

}
另外,页面上也要设置charset为gb2312
jhandsome007 2007-01-19
  • 打赏
  • 举报
回复
用这个方法吧:

public String getStr(String str)
{
try
{
byte[] bt = str.getBytes("ISO8859-1");
String temp = new String(bt);
}catch(Exception e)
{
}
return temp;
}
FAT0708 2007-01-18
  • 打赏
  • 举报
回复
用过滤器吧
凉凉二点凉 2007-01-18
  • 打赏
  • 举报
回复
package app;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.RequestProcessor;

public class MyRequestProcessor extends RequestProcessor
{
public MyRequestProcessor() {}
protected boolean processPreprocess(HttpServletRequest request,HttpServletResponse response)
{
try
{
request.setCharacterEncoding("gb2312");
}catch (Exception ex)
{
ex.printStackTrace();
}
return true;
}


}
改成gb2312
leojay1 2007-01-18
  • 打赏
  • 举报
回复
应改没有问题的。。。
你重新启动一下在看看
neusoftxu 2007-01-18
  • 打赏
  • 举报
回复
gb2312 我试了 也不好用

过滤器 我也用了
如下:
package com.ccu.bbs.filter;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;



public class SetCharacterEncodingFilter extends HttpServlet implements Filter
{
private FilterConfig filterConfig;

/**
* <p>Discription:[字段功能描述]</p>
*/
protected String encoding; //字符集编码

/**
* <p>Discription:[字段功能描述]</p>
*/
protected boolean ignore; //是否不使用字符集

//Handle the passed-in FilterConfig
/**
* <p>Discription:[方法功能中文描述]</p>
* @param filterConfig
* @author:[创建者中文名字]
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void init(FilterConfig filterConfig)
{
this.filterConfig = filterConfig;
encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");

if (value == null)
{
ignore = true;
}
else if (value.equalsIgnoreCase("true"))
{
ignore = true;
}
else if (value.equalsIgnoreCase("yes"))
{
ignore = true;
}
else
{
ignore = false;
}
this.filterConfig = filterConfig;
}

//Process the request/response pair
/**
* <p>Discription:[方法功能中文描述]</p>
* @param request
* @param response
* @param filterChain
* @author:[创建者中文名字]
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain)
{
try
{
if (ignore || request.getCharacterEncoding() == null)
{
String encoding = selectEncoding(request);

if (encoding != null)
{
request.setCharacterEncoding(encoding);
}
}
filterChain.doFilter(request, response);
}
catch (ServletException sx)
{
filterConfig.getServletContext().log(sx.getMessage());
}
catch (IOException iox)
{
filterConfig.getServletContext().log(iox.getMessage());
}
}

//为子类提供扩展的能力
protected String selectEncoding(ServletRequest request)
{
return encoding;
}

//Clean up resources
/**
* <p>Discription:[方法功能中文描述]</p>
* @author:[创建者中文名字]
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void destroy()
{
encoding = null;
}
}


web.xml中
<filter>
<filter-name>encodingfilter</filter-name>
<filter-class>com.ccu.bbs.filter.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>



<filter-mapping>
<filter-name>encodingfilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingfilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>



就是不好用 真的不知道怎么办了

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧