用struts的时候怎么解决乱码问题?

ben0759 2008-09-08 04:57:00
用struts的时候怎么解决乱码问题?很奇怪,我只是在JSP页面提交一个FORM到另外一个JSP展示,却有乱码,2个JSP页面都已经编码成了GBK.有什么办法解决?
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
这句话的pageEncoding是对REQUEST编码还是对RESPONSE编码?
...全文
209 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
dadi5566 2008-09-10
  • 打赏
  • 举报
回复
使用过滤器不就可以了吗
nanjg 2008-09-10
  • 打赏
  • 举报
回复
db编码
页面编码
ide编码
request--过滤器
response--tomcat server。xml文件
都要统一
lixiaolong3399 2008-09-09
  • 打赏
  • 举报
回复
有两中形式,
1种是写过滤器。
另外一种,就是在你的Tomcat下conf中的server.xml里面端口号为8080的<Connector>中,添加设置,也同样可以。
andy_tocm 2008-09-09
  • 打赏
  • 举报
回复
方法1。用过滤类直接过滤编码
方法2。在取得传递参数过来之前使用request.setCharacterEncoding("UTF-8");
Oo云 2008-09-09
  • 打赏
  • 举报
回复
<%!
public static String Code(String strvalue)
{
try{
if(strvalue==null)
return null;
else
{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}
%>
用这个方法处理一下String类型的就可以了!
String name = Code(request.(getParameter("Name"));
String phone = Code(request.getParameter("Phone"));
songjun37 2008-09-09
  • 打赏
  • 举报
回复
在两个jsp文件中传递中文的时候 除了用过滤器外
还有一个快捷的方法就是

String data2 = new String(data1.getBytes("ISO8859-1"),"GBK");

将data1接收到的数据使用gbk的字符编码集来保存到data2中
mellow_msb 2008-09-09
  • 打赏
  • 举报
回复
重写这个类import java.io.UnsupportedEncodingException;

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

import org.apache.struts.action.RequestProcessor;

public class MyRequestProcessor extends RequestProcessor {

protected boolean processPreprocess(HttpServletRequest arg0, HttpServletResponse arg1) {
// TODO Auto-generated method stub
try {
arg0.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
arg1.setCharacterEncoding("UTF-8");
return super.processPreprocess(arg0, arg1);
}

}然后在struts-config.xml里配置
<controller
processorClass="com.mellow.cnyf.filters.MyRequestProcessor">
</controller>这个节点就可以了
wpabbs 2008-09-09
  • 打赏
  • 举报
回复
两个简单的JSP用不了那么麻烦啊。首先你提交的时候,要用POST方式。如果用get方式就出现乱码(要先处理编码)。如果你是通过url传中文的话,也要重新编码一次。要不也会出现乱码。
如果url含有中文请先编码:url = encodeURI(url);
后台取出数据 String str= new String(request.getParameter("str").getBytes("ISO-8859-1"),"UTF-8");
fiona341 2008-09-09
  • 打赏
  • 举报
回复
你到server.xml里面添加一个URIEncoding=gbk,你这样设置应该没问题的呀
rock_LL 2008-09-09
  • 打赏
  • 举报
回复
set SRC_FILE=ApplicationResources.properties
set DES_FILE=ApplicationResources_zh_cn.properties

if exist "%DES_FILE%" del %DES_FILE%
native2ascii -encoding GBK %SRC_FILE% %DES_FILE%
rock_LL 2008-09-09
  • 打赏
  • 举报
回复
将汉字转换称asicII码,在属性文件中读取出来
ben0759 2008-09-09
  • 打赏
  • 举报
回复
过滤器我设置了,没起作用,怀疑是底层的TOMCAT有问题.为什么这样的呢?
gouzai 2008-09-08
  • 打赏
  • 举报
回复
习惯用三楼的方法
FL1429 2008-09-08
  • 打赏
  • 举报
回复
一般的解决办法是价格过滤器..
yl5909272 2008-09-08
  • 打赏
  • 举报
回复
写个过滤器
LazyCat2222 2008-09-08
  • 打赏
  • 举报
回复
request和response都设置一下啊
添加过滤器也是很不错的
也可以在server.xml设置编码
sheng_feng_java 2008-09-08
  • 打赏
  • 举报
回复
添加一个过滤器
package com.bean;

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

public class EncodingFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws ServletException, IOException {
request.setCharacterEncoding("GBK");

chain.doFilter(request, response);
response.setCharacterEncoding("GBK");

}

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

}

}



在web.xml中配置
.........
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.bean.EncodingFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<servlet-name>*.jsp</servlet-name>
</filter-mapping>
........

针对与struts用!
GTRGTR 2008-09-08
  • 打赏
  • 举报
回复
1楼正解
或者加个RequestProcessor


import java.io.UnsupportedEncodingException;

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

import org.apache.struts.action.RequestProcessor;

public class MyRequestProcessor extends RequestProcessor {

@Override
protected boolean processPreprocess(HttpServletRequest arg0, HttpServletResponse arg1) {

try {
arg0.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return super.processPreprocess(arg0, arg1);
}

}


在struts-config.xml中还需要配置

<controller processorClass="MyRequestProcessor"/>

翱翔码海 2008-09-08
  • 打赏
  • 举报
回复
在struts接收 数据时 也需要设置编码格式为 gbk
缘来是你 2008-09-08
  • 打赏
  • 举报
回复
你可以加一个监听器
类:
package com.bean;

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;

public class FilterEncoding implements Filter {
private FilterConfig filterConfig=null;
private String encoding=null;

/* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
this.encoding=filterConfig.getInitParameter("encoding");
}

/* (non-Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String encoding=this.encoding;
if(encoding!=null)
{
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}

/* (non-Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
this.encoding=null;
this.filterConfig=null;

}

}
然后在web.xml配置

<filter>
<filter-name>setEncoding</filter-name>
<filter-class>
com.bean.FilterEncoding
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setEncoding</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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