登录页面用英文名可以登录 用中文名显示登录错误 应该是中文 传过去乱码的 问题。你debug下。看sql执行 时候有没有乱码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 乱码了,String newcondition = URLDecoder.decode(condition, "utf-8") 转一下 request取数据的时候没有对中文做处理! 应该servlet接收到的用户名是乱码了,页面如果是post方式提交,建议在servlet中设置request.setContextType("text/html;charset=GBK") 页面跟Servlet编码设置一致一般就不会出现乱码。 6.5.1 编码概述pageEncoding ——浏览器 —> 服务器。pageEncoding 是浏览器到服务器的页面的字符编码。 在JSP标准的语法中,如果 pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则就由contentType属性中的 charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1。pageEncoding的内容只是用于jsp输出时的编码,不会作为header发出去的。pageEncoding 是通知web server jsp的编码。ContentType —— 服务器 —> 浏览器。 ContentType属性指定了MIME类型和JSP页面回应时的字符编码方式。MIME类型的默认值是“text/html”; 字符编码方式的默认值是“ISO-8859-1”. MIME类型和字符编码方式由分号隔开,也就是说 :关于JSP页面中的pageEncoding和contentType两种属性的区别:pageEncoding是jsp文件本身的编码contentType的charset是指服务器发送给客户端时的内容编码 contentType: <%@ page contentType="text/html; charset=UTF-8"%> pageEncoding:<%@ page pageEncoding="UTF-8"%> html页面charset:<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> setCharacterEncoding:request.setCharacterEncoding(),response.setCharacterEncoding() setContentType:response.setContentType() setHeader: response.setHeader() jsp页面编码: jsp文件本身的编码 web页面显示编码:jsp的输出流在浏览器中显示的编码 web页面输入编码: 输入框输入的字体编码 web服务器输入的请求流: web Server相应浏览器的请求数据 web服务器输出的响应流: web Server相应浏览器的输出数据在WEB环境中,总是会出现乱码问题,那么我们应该如何找到它的根源呢?在此之前请参见(4.8节)关于编码方面的知识。WEB环境中,浏览器【客户端】发出get请求的时候,所带的参数会在地址栏中显示,会被加到请求的URL中一并发到服务端,GET请求的URL看起来向这样:http://localhost:8080/userServlet?userId=1&userName=%4E%5D后面的“%4E%5D”其实是浏览器做了相应的处理,浏览器默认会把中文字符进行ISO-8859-1进行编码之后在把编码后的添加到URL后面,请看下面这个表格:编码方案 中文字节ISO-8859-1 使用两个字节表示一个汉字UTF-8 使用三个字符表示一个汉字有了上面这个表,我们就知道应该如何对请求进行编码和解码了。下面分析几种情况以及乱码解决方案。6.5.2 情景一JSP页面编码 请求方式ISO-8859-1 GET后台Servlet接收数据:String name = request.getParameter("name");System.out.println("name is: " + name);出现乱码。乱码解决方案:(1)修改页面的编码,因为这个ISO-8859-1不支持中文<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%>// 最好把下面这个也改了<meta http-equiv="Content-Type" content="text/html; charset=GBK">注意,这里的GBK可以是其他任何可以支持中文的编码,如GB2312,GB18030,UTF-8等。(2)修改服务端代码由于浏览器在发送get请求的时候,把参数也带到URL中,并且会把参数的值进行ISO-8859-1编码,所以在后台收到的数据是经过ISO-8859-1编码之后的字节码,所以要向将数据恢复就变得简单了,那么我们就可以先得到字节数组,然后重新编码即可String name = request.getParameter("name");System.out.println("name is: " + name);// 获得字节数组byte[] bytes = name.getBytes("ISO-8859-1");// 重新编码name = new String(bytes, "GBK");通过上面的方式获得的就是正确的中文了。当然这里的编码 - - - > GBK是要和页面中的一致的,但是,一般来说只要不同编码之间,使用相同的字节表示中文的话,也是可以互换的。在本例中可以使用 new String(bytes, "GB18030");new String(bytes, "GB2312");但是不能使用UTF-8,因为GBK,GB2312,GB18030都是使用两个字节来表示一个汉字的,而UTF-8是使用三个字节来表示一个汉字的。再来看看下面这个完整的案例:Jsp页面:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="login" method="get"> <input type="text" name="name" /> <input type="submit" value="Submit"/></form></body></html>后台:String name = request.getParameter("name"); System.out.println("name is: -----> " + name); // 获得字节数组 byte[] bytes = name.getBytes("ISO-8859-1"); System.out.println(Arrays.toString(bytes)); // 重新编码 name = new String(bytes, "UTF-8"); System.out.println("after encoding, name is---> " + name);假设输入的是“中文”: 点击提交,那么URL中显示:http://localhost:8080/login?name=%E4%B8%AD%E6%96%87真正提交过去的就是经过ISO-8859-1编码之后的数据,可以看到“%E4%B8%AD%E6%96%87”实际上是 6 个字节%E4,%B8,%AD,%E6,%96,%87这就是因为UTF-8三个字节表示一个汉字的结果,所以在后台应这么重新编码:String name = request.getParameter("name");System.out.println("name is: -----> " + name); // 获得字节数组byte[] bytes = name.getBytes("ISO-8859-1"); System.out.println(Arrays.toString(bytes));// 重新编码name = new String(bytes, "UTF-8");System.out.println("after encoding, name is---> " + name);6.5.3 情景二JSP页面编码 请求方式UTF-8 POST如果在后台直接使用:String name = request.getParameter("name");System.out.println("name is: -----> " + name);那么就会得到乱码,应该在获取之前设置字符的编码类型,由于页面使用的是UTF-8,那么就应该设置成UTF-8:// 设置字符编码request.setCharacterEncoding("UTF-8");String name = request.getParameter("name");System.out.println("name is: -----> " + name);6.5.4 乱码总结从上面的例子可以总结得到,中文乱码的原因一般是由于页面的编码和后台使用的编码方案不统一导致的,另外ISO-8859-1是不支持中文的,所以在编写具有中文的WEB应用中,页面的编码就不要设置成ISO-8859-1了。6.5.5 过滤器解决中文乱码问题编写一个过滤器:public class CharacterEncodingFilter implements Filter { // 保存web.xml中配置的初始化参数--->编码 private String encoding; @Override public void init(FilterConfig filterConfig) throws ServletException { this.encoding = filterConfig.getInitParameter("encoding"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { /** * 这里设置的encoding,这个encoding应该配置的是页面中的编码 */ request.setCharacterEncoding(encoding); chain.doFilter(request, response); } @Override public void destroy() { }}配置过滤器到web.xml中:<!-- 配置字符编码过滤器 ,假设页面中的编码是UTF-8 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>edu.zhku.review.servlet.CharacterEncodingFilter</filter-class> <!-- 配置过滤器的初始化参数,过滤器中就可以通过FilterConfig 的getInitParameter()方法获得该参数的值例如要获取下面 这个参数,可以这样: String encoding = filterConfig.getInitParameter("encoding"); --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 把你的jsp页面的代码与servlet代码贴上来,给大家看看。 是编码问题的,同学好好学习serlvet,学好了比学其他框架都强,学好了你以后有可能会成为架构师。servlet其实很简单的,你只要关注几个监听器、filter过滤器,那么一切都是简单任凭你想象。给点分的,很久很久没有回答问题缺分数了 单点登录谁搞过 网上找了好多都没能解决的问题--mysql服务器无法访问 基于Log4j的扩展工具包 qLog , 欢迎对log技术感兴趣的朋友下载使用。 如何解决菜单无法汉化的问题~?~?~? (散分)请问上海通方软件,怎么样?(顶着有分) **如何用dom4j遍历xml文件时,读取xml文件中每个元素的属性?** 帮忙找工作哟 小妹有事想求: 怎么搜索一个类被封装到哪个包(.jar)中呢? EJBQL的问题 HttpClient实现post请求并加入NTLM认证 我公司用的是SVN同步管理代码,最近发现我的之前提交的代码不见了
request取数据的时候没有对中文做处理!
pageEncoding ——浏览器 —> 服务器。
pageEncoding 是浏览器到服务器的页面的字符编码。
在JSP标准的语法中,如果 pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则就由contentType属性中的 charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1。
pageEncoding的内容只是用于jsp输出时的编码,不会作为header发出去的。
pageEncoding 是通知web server jsp的编码。
ContentType —— 服务器 —> 浏览器。
ContentType属性指定了MIME类型和JSP页面回应时的字符编码方式。MIME类型的默认值是“text/html”; 字符编码方式的默认值是“ISO-8859-1”. MIME类型和字符编码方式由分号隔开,也就是说 :
关于JSP页面中的pageEncoding和contentType两种属性的区别:
pageEncoding是jsp文件本身的编码
contentType的charset是指服务器发送给客户端时的内容编码
contentType: <%@ page contentType="text/html; charset=UTF-8"%>
pageEncoding:<%@ page pageEncoding="UTF-8"%>
html页面charset:
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
setCharacterEncoding:request.setCharacterEncoding(),response.setCharacterEncoding()
setContentType:response.setContentType()
setHeader: response.setHeader()
jsp页面编码: jsp文件本身的编码
web页面显示编码:jsp的输出流在浏览器中显示的编码
web页面输入编码: 输入框输入的字体编码
web服务器输入的请求流: web Server相应浏览器的请求数据
web服务器输出的响应流: web Server相应浏览器的输出数据
在WEB环境中,总是会出现乱码问题,那么我们应该如何找到它的根源呢?在此之前请参见(4.8节)关于编码方面的知识。
WEB环境中,浏览器【客户端】发出get请求的时候,所带的参数会在地址栏中显示,会被加到请求的URL中一并发到服务端,GET请求的URL看起来向这样:
http://localhost:8080/userServlet?userId=1&userName=%4E%5D
后面的“%4E%5D”其实是浏览器做了相应的处理,浏览器默认会把中文字符进行ISO-8859-1进行编码之后在把编码后的添加到URL后面,请看下面这个表格:
编码方案 中文字节
ISO-8859-1 使用两个字节表示一个汉字
UTF-8 使用三个字符表示一个汉字
有了上面这个表,我们就知道应该如何对请求进行编码和解码了。下面分析几种情况以及乱码解决方案。
6.5.2 情景一
JSP页面编码 请求方式
ISO-8859-1 GET
后台Servlet接收数据:
String name = request.getParameter("name");
System.out.println("name is: " + name);
出现乱码。
乱码解决方案:
(1)修改页面的编码,因为这个ISO-8859-1不支持中文
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
// 最好把下面这个也改了
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
注意,这里的GBK可以是其他任何可以支持中文的编码,如GB2312,GB18030,UTF-8等。
(2)修改服务端代码
由于浏览器在发送get请求的时候,把参数也带到URL中,并且会把参数的值进行ISO-8859-1编码,所以在后台收到的数据是经过ISO-8859-1编码之后的字节码,所以要向将数据恢复就变得简单了,那么我们就可以先得到字节数组,然后重新编码即可
String name = request.getParameter("name");
System.out.println("name is: " + name);
// 获得字节数组
byte[] bytes = name.getBytes("ISO-8859-1");
// 重新编码
name = new String(bytes, "GBK");
通过上面的方式获得的就是正确的中文了。当然这里的编码 - - - > GBK是要和页面中的一致的,但是,一般来说只要不同编码之间,使用相同的字节表示中文的话,也是可以互换的。在本例中可以使用 new String(bytes, "GB18030");new String(bytes, "GB2312");但是不能使用UTF-8,因为GBK,GB2312,GB18030都是使用两个字节来表示一个汉字的,而UTF-8是使用三个字节来表示一个汉字的。
再来看看下面这个完整的案例:
Jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="login" method="get">
<input type="text" name="name" />
<input type="submit" value="Submit"/>
</form>
</body>
</html>
后台:
String name = request.getParameter("name");
System.out.println("name is: -----> " + name);
// 获得字节数组
byte[] bytes = name.getBytes("ISO-8859-1");
System.out.println(Arrays.toString(bytes));
// 重新编码
name = new String(bytes, "UTF-8");
System.out.println("after encoding, name is---> " + name);
假设输入的是“中文”:
点击提交,那么URL中显示:http://localhost:8080/login?name=%E4%B8%AD%E6%96%87
真正提交过去的就是经过ISO-8859-1编码之后的数据,可以看到“%E4%B8%AD%E6%96%87”实际上是 6 个字节
%E4,%B8,%AD,%E6,%96,%87
这就是因为UTF-8三个字节表示一个汉字的结果,所以在后台应这么重新编码:
String name = request.getParameter("name");
System.out.println("name is: -----> " + name);
// 获得字节数组
byte[] bytes = name.getBytes("ISO-8859-1");
System.out.println(Arrays.toString(bytes));
// 重新编码
name = new String(bytes, "UTF-8");
System.out.println("after encoding, name is---> " + name);
6.5.3 情景二
JSP页面编码 请求方式
UTF-8 POST
如果在后台直接使用:
String name = request.getParameter("name");
System.out.println("name is: -----> " + name);
那么就会得到乱码,应该在获取之前设置字符的编码类型,由于页面使用的是UTF-8,那么就应该设置成UTF-8:
// 设置字符编码
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
System.out.println("name is: -----> " + name);
6.5.4 乱码总结
从上面的例子可以总结得到,中文乱码的原因一般是由于页面的编码和后台使用的编码方案不统一导致的,另外ISO-8859-1是不支持中文的,所以在编写具有中文的WEB应用中,页面的编码就不要设置成ISO-8859-1了。
6.5.5 过滤器解决中文乱码问题
编写一个过滤器:
public class CharacterEncodingFilter implements Filter {
// 保存web.xml中配置的初始化参数--->编码
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
/**
* 这里设置的encoding,这个encoding应该配置的是页面中的编码
*/
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
@Override
public void destroy() { }
}
配置过滤器到web.xml中:
<!-- 配置字符编码过滤器 ,假设页面中的编码是UTF-8 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name> <filter-class>edu.zhku.review.servlet.CharacterEncodingFilter</filter-class>
<!-- 配置过滤器的初始化参数,过滤器中就可以通过FilterConfig
的getInitParameter()方法获得该参数的值例如要获取下面
这个参数,可以这样: String encoding =
filterConfig.getInitParameter("encoding");
-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
servlet其实很简单的,你只要关注几个监听器、filter过滤器,那么一切都是简单任凭你想象。
给点分的,很久很久没有回答问题缺分数了