初学servlet遇到了中文乱码问题,求指教
初学servlet遇到了中文乱码问题,求指教,问题如下:(简单描述)login.jsp作为登录界面获取登录信息username,点击提交按钮到LoginServlet进行信息验证,
验证时通过new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
使用控制台输出时显示是中文,但通过response.sendRedirect("WelcomeServlet?username="+username);将username传到WelcomeServlet界面后,
即使使用new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");输出的也是乱码,不是用上述方法可以将中文正常输出吗,迷惑了 --------------------编程问答-------------------- 你试试这样new String(new String(request.getParameter("username"),"iso-8859-1").getBytes(),"UTF-8"); --------------------编程问答-------------------- new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8")--注意这里使用的utf-8要和login.jsp中的编码方式一样 --------------------编程问答-------------------- jsp页面的编码改成utf-8,servlet中添加一句request.setCharacterEncoding("utf-8") --------------------编程问答--------------------
在servlet的doPost或doGet的第一行写这两句:
request.setCharacterEncoding("utf-8");//接收请求
response.setCharacterEncoding("utf-8");//响应客户端
还要在JSP页面上的编码也要设置utf-8
注意编码要统一 --------------------编程问答-------------------- 额。。。楼上的我都试了,还是不行
主要是从JSP界面传到loginServlet将数据转成utf-8后,再重新传给浏览器出现了问题
我现在的处理办法是,先将JSp登录界面传来得数据转成utf-8进行验证后,再转成ISO-8895-1传给浏览器就可以了,办法有点笨了 --------------------编程问答--------------------
jsp的编码改了么,在最上边,实在不行就改tomcat的配置文件试试 --------------------编程问答-------------------- 费那么大劲干嘛~~~
你将jsp页面的编码集改为utf-8
然后再servlet中 dopost 方法第一句话写 request.setCharacterEncoding("utf-8");就Ok了~~~转来转去太麻烦~~~
或者写一个过滤器~~~~ --------------------编程问答--------------------
+1 --------------------编程问答-------------------- +1 --------------------编程问答-------------------- 经典的java乱码问题,最重要的一点的保证所有的页面编码都一样。 --------------------编程问答--------------------
+1 --------------------编程问答--------------------
+1 --------------------编程问答--------------------
把这两行写入到过滤器filter中,其它什么问题都没了
参考代码如下:
<!-- 编码过滤器 -->
<filter>
<filter-name>jspencodfilter</filter-name>
<filter-class>com.易做图ong.filter.JspEncoding</filter-class>
<!-- 统一用utf-8编码 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jspencodfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
--------------------编程问答--------------------
package com.易做图ong.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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class JspEncoding implements Filter {
private final String TAG = "JspEncoding - ";
String jspEncoding = null;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
// TODO Auto-generated method stub
//System.out.println("JspEncoding - dofilter jspencoding = "+jspEncoding);
request.setCharacterEncoding(jspEncoding);
response.setContentType("text/html;charset="+jspEncoding);
filterChain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
//此中的encoding与web.xml中的filter中initparam 名字相同
jspEncoding = arg0.getInitParameter("encoding");
}
}
初学者你不应该给他教这个方法,你还得给他解释初始化方法时解析web.xml
简单的就可以~~~这样会让他更晕!!! --------------------编程问答-------------------- 谢谢各位的热心解答 --------------------编程问答-------------------- 第一:把你的tomcat中的默认编码改了,位置在 tomcat主目录 -----> conf 文件夹 ------> server.xml中:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
第二:写个filter过滤器:
public class EncodingFilter implements Filter {
String encoding = null;
@Override
public void init(FilterConfig filterConfig) throws ServletException { //初始化Filter
encoding = filterConfig.getInitParameter("encoding"); //获取配置中的encoding
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
//response.setContentType("text/html;charset="+encoding);这句可加/根据需求
chain.doFilter(request, response); //这句代码很重要,如果不加上这句,那么你这个Filter是无效的
}
@Override
public void destroy() { //用于释放资源
encoding = null;
}
}
web.xml中配置该Filter:
<filter>
<filter-name>encoding__filter</filter-name>
<filter-class><!-- 这儿写当前这个Filter的完整名称(包名+类名) --></filter-class>
<!-- 统一用utf-8编码 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding__filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
接下来就是你eclipse工作空间的编码集了:位置 Windows ----> Preferences ----->General ---->WorkSpace 里面有个选项 Text file encoding,这里可以设置,为了统一,都设置成UTF-8.然后看一下你这个项目的编码集,位置Project---->Properties----Resource 中的Text file encoding,看是不是UTF-8.
最后就是你的jsp了: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
好了,说到这里估计应该不存在乱码了。 --------------------编程问答-------------------- 这个就是个人习惯问题了、在打开一个工作空间之后就要设置一些文件的编码类型(这些类型必须统一),这样出现乱码的几率就会小很多,还有就是Servlet要设置request和response的编码类型,或者写一个filter这样你的编码类型同意之后就没有什么问题了 --------------------编程问答-------------------- 表单method属性设置为post,然后servlet get方法里面添加request.setCharacterEncoding("utf-8");基本就不会有请求乱码了! --------------------编程问答-------------------- 试试过滤器的方法吧,挺好用的!
import java.io.IOException;--------------------编程问答-------------------- 楼上各位好厉害啊。。
import java.util.Enumeration;
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 EnCodeFilter implements Filter{
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
Enumeration enums = request.getParameterNames();
if(enums!=null){
while(enums.hasMoreElements()){
String name = (String) enums.nextElement();
String values[] = request.getParameterValues(name);
for(int i=0;i<values.length;i++){
values[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8");
}
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
这帖子我要标记一下 --------------------编程问答--------------------
呵呵,或许也有道理 吧。偶也刚学jsp不久,发现这种方法最好了。给楼主推荐下。 --------------------编程问答-------------------- http://blog.csdn.net/wm5920/article/details/7584650
这里面的两个方法你看可行 --------------------编程问答-------------------- http://blog.csdn.net/tianyazaiheruan/article/details/8102999 --------------------编程问答--------------------
servlet乱码解决,以及servlet的其他知识 --------------------编程问答-------------------- 我也是一个jsp初学者。前两天也出现过乱码的困扰,所以首先同情楼主,我们都是可怜的小菜鸟。
其次呢,给楼主一个建议,你应该好好的看一下这个字符乱码的的缘由,你搞不清问题的根源只是在论坛里求助,不容易解决问题,也不利自己提高。
然后呢,我的乱码问题也是各位大牛帮忙解决的,帖子地址给你
http://bbs.csdn.net/topics/390283289?page=1#post-392933314
我相信你看以后,一定会明白。
最后,希望我和楼主还有各位友友能早日成长成牛主。 --------------------编程问答-------------------- 不是在servlet添加request.setCharacterEncoding("gbk");就可以么,我好像一直都是这样用的啊。。 --------------------编程问答-------------------- 干脆你都来改下,将jsp页面的编码集改为utf-8,然后把servlet类上点击属性,在other里改成utf-8,然后在doget或dopost方法里的第一行写上request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8");不信改不了 --------------------编程问答-------------------- 添加一个过滤器,统一设置编码 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 保险的办法是在jsp页面与servelt类中都设置请求与响应编码
--------------------编程问答-------------------- 一个乱码那么多人跟帖 ....
前台JSP编码、文件编码、过滤器编码一致 怎么传都不会乱码
补充:Java , Web 开发