永发信息网

关于java过滤器解决中文乱码的

答案:2  悬赏:80  手机版
解决时间 2021-04-08 04:16
  • 提问者网友:龅牙恐龙妹
  • 2021-04-07 05:28
麻烦帮我看看我这样为什么不能解决乱码
package cc;
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 CharactorFilter implements Filter {
String encoding=null;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(encoding!=null){
//设置request字符编码
request.setCharacterEncoding(encoding);
//设置response字符编码
response.setContentType("text/html;charset="+encoding);
}
//传递给下一个过滤器
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
//获取初始化参数
encoding=filterConfig.getInitParameter("encoding"); }
public void destroy() {
// TODO Auto-generated method stub
encoding=null; }}

a.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
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>
<title>My JSP 'a.jsp' starting page</title>

</head>
<body>
<form action="b.jsp" method="post">
name:<input type="text" name="name"><input type="submit" value="submit">
</form>
</body>
</html>

b.jsp
<%@ page language="java" import="java.util.*" 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>
<title>My JSP 'b.jsp' starting page</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
%>
Hello:${param.name}
</body>
</html>
最佳答案
  • 五星知识达人网友:蓝房子
  • 2021-04-07 05:42
因为你遗漏了重要的一步。正确的方法如下:
 if(encoding!=null){
    //设置request字符编码
    request.setCharacterEncoding(encoding);
    //设置response字符编码
    response.setContentType("text/html;charset="+encoding);
    response.setCharacterEncoding(encoding);
}
//传递给下一个过滤器
chain.doFilter(request, response);
全部回答
  • 1楼网友:十鸦
  • 2021-04-07 06:31
public void dofilter(servletrequest srequest, servletresponse sresponse, filterchain chain) throws ioexception, servletexception { if (null != encoding) { httpservletrequest request = (httpservletrequest)srequest; httpservletresponse response = (httpservletresponse)sresponse; // 对请求进行编码设置 request.setcharacterencoding(encoding); //把请求用指定的方法编码 response.setcontenttype("text/html"); response.setcharacterencoding(encoding); //把返回响应指定 编码方式 system.out.println("------------过滤编码-------------" + encoding); } // 把处理权限交给下一个过滤器 chain.dofilter(srequest, sresponse); }//这是核心方法 正好项目中有用到
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯