精华帖 (0) :: 良好帖 (0) :: 新手帖 (13) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-28
在javaeye发了2个帖 都被扣了分 一个还直接被拉到隐藏 所以这个问题我按照论坛的规定一步步来 自己思考 做测试 查资料 但是都没有结果 才敢发这个帖子 斑竹 请您看清楚 主要是关于 一个EL表达式的 ${ param.XXX } 于是我写了以下一个测试页面 x.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <body> ${ param.a} </body> </html> 然后我在地址栏 直接输入Http://127.0.0.1:8080/demo/x.jsp?a=大家好 显示为乱码 于是我开始了一系列转码和查资料过程 1 加入代码块 request.setCharsetEncoding("UTF-8"); 不能成功 乱码 2 利用jstl <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 在body下输入 <fmt:requestEncoding value="UTF-8" /> 不能成功 乱码 随后查了些资料 找到下面这句 使用get方法提交表单,浏览器会对URL中的参数使用UTF-8编码,但是由于get方法提交内容没有在HTTP请求中指定参数的编码方式,所以服务器端会使用默认的编码方式来对URL的参数进行解码 那么我就写了一个过滤器 依然没有成功 这里我要声明 我能保证正我的过滤器是正确的 因为我做了测试 如果是用 页面->Servlet 那么无论get 还是 post都是可以正确显示 然而加上过滤器后 在地址栏 直接输入Http://127.0.0.1:8080/demo/x.jsp?a=大家好 还是显示的是乱码 到此 我也没有其他可行的办法 是不是这是EL里面 param的一个缺陷呢? 对于直接输入的URL重写(我说的是直接输入) 无法进行转码 ? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-28
补:
刚才准备发贴的时候 又把所有办法都试验了一次 还是不行 |
|
返回顶楼 | |
发表时间:2008-05-28
为了大家更加看清楚 我将我的过滤器贴上来
package classmate; 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 EncodingFilter implements Filter { FilterConfig filterConfig; public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { MyRequest req = new MyRequest( (HttpServletRequest)arg0);//设置代理请求 arg2.doFilter(req, arg1); } public void init(FilterConfig arg0) throws ServletException { this.filterConfig = arg0; } } package classmate; import java.io.UnsupportedEncodingException; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; public class MyRequest extends HttpServletRequestWrapper { HttpServletRequest request; public MyRequest(HttpServletRequest request) { super(request); // TODO Auto-generated constructor stub this.request = request; } public String getParameter(String name) { String str = super.getParameter(name); str = this.myEncoding(str); return str; } public String[] getParameterValues(String name) { String strs[] = super.getParameterValues(name); for(int i=0;i<strs.length;i++) { strs[i] = this.myEncoding(strs[i]); } return strs; } private String myEncoding(String input) { String output =""; try { output = new String(input.getBytes("ISO-8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return output; } } 在 HttpServletRequestWrapper 我重写了2个 方法. 在我的Servlet里面就可以直接 request调用 只要是页面提交到Servlet进过该过滤器 都可行 |
|
返回顶楼 | |
发表时间:2008-05-28
tomcat是可以设置编码过滤的,不过值针对get请求,在配置文件中加入这个参数就可以了 URIEncoding="UTF-8"
|
|
返回顶楼 | |
发表时间:2008-05-28
补充一句:针对8080端口和8009端口的都加上那个参数,至于什么原因去网上查
|
|
返回顶楼 | |
发表时间:2008-05-28
josen 能给出具体修改方法吗? 比如在哪个文件下面?
|
|
返回顶楼 | |
发表时间:2008-05-28
conf下面的server.xml
具体还不知道对你的问题是否有效,去试试吧 |
|
返回顶楼 | |
发表时间:2008-05-28
conf下面的server.xml
汗了 我也知道在 server.xml 麻烦你写出来好吗 我网上找了没有相关的 |
|
返回顶楼 | |
发表时间:2008-05-28
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/> |
|
返回顶楼 | |
发表时间:2008-05-28
你的文件本身的编码方式的问题。
另外,url直接传参数应该转码,这是起码的常识。 |
|
返回顶楼 | |