public class LoginCL extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");
String u=request.getParameter("username");
System.out.println(u);
String p=request.getParameter("passwd");
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
try {
ct=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcllib","scott","yh123456");
//使用preparestatement对象执行sql语句
ps=ct.prepareStatement("select upasswd from user1 where uname=?");
System.out.println(u);
//写入参数
ps.setString(1,u);
rs=ps.executeQuery();
System.out.println(rs);
if (rs.next()) {
//合法
System.out.println("abcdefg");
//获得session
HttpSession hs=request.getSession(true);
//修改session时间 秒
hs.setMaxInactiveInterval(20);
//写入session
hs.setAttribute("pass", "ok");
response.sendRedirect("Wel?uname="+u+"&upass="+p);
} else {
//不合法
System.out.println("hello");
response.sendRedirect("Login"); }
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
}
if(rs!=null){
ps.close();
}
if(rs!=null){
ct.close();
}
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");
String u=request.getParameter("username");
System.out.println(u);
String p=request.getParameter("passwd");
Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
try {
ct=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcllib","scott","yh123456");
//使用preparestatement对象执行sql语句
ps=ct.prepareStatement("select upasswd from user1 where uname=?");
System.out.println(u);
//写入参数
ps.setString(1,u);
rs=ps.executeQuery();
System.out.println(rs);
if (rs.next()) {
//合法
System.out.println("abcdefg");
//获得session
HttpSession hs=request.getSession(true);
//修改session时间 秒
hs.setMaxInactiveInterval(20);
//写入session
hs.setAttribute("pass", "ok");
response.sendRedirect("Wel?uname="+u+"&upass="+p);
} else {
//不合法
System.out.println("hello");
response.sendRedirect("Login"); }
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
}
if(rs!=null){
ps.close();
}
if(rs!=null){
ct.close();
}
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}}
// 强类型转化
// 下面这样就对了
String u = (String)request.getParameter("username");
request.setCharacterEncoding("gb2312") ;
String u=request.getParameter("username");
request.setCharacterEncoding("gb2312");在dopost方法的第一句加上这句代码。
a:如果是get方式,在tomcat中,在conf/server.xml文件中8080端口的connector元素增加URIEncoding="utf-8"
b:如果是post方式,在servlet中,request.setcharactorEncoding("utf-8");放在request.getparameter之前
servlet相应中文,客户端显示乱码:response.setCharactorEncoding("utf-8");该代码要放在
response.getWriter之前
String u=request.getParameter("username");
这个是获得的上一个servlet传过来的用户名是个中文
我想用这个u作为参数到数据库里查出密码然后和传过来的密码p进行比较
String p=request.getParameter("passwd");
可是我发现在上个页面输入正确的用户名后查不出来用户的密码所以就输出了下传过来的用户名U
String u=request.getParameter("username");
System.out.println(u);
结果是控制台输出的是 С??
请问什么原因啊?.
处理乱的话我写了这个了啊!
response.setContentType("text/html;charset=gb2312");
String u=request.getParameter("username");
System.out.println(u);
楼上说的强制类型转换也试过了不行!!
response.setContentType("text/html;charset=gb2312");
还有你的编码要都一样,界面也是这个编码么?而且这2行代码最好放在你方法顶行。
你servlet的dost()方法只是把response编码给改了 servlet编码默认是iso-8859-1的,你需要把请求的编码也给改了才可以
request.setCharacterEncoding("utf-8"); //里面的编码最好跟jsp页面编码一样
而且你必须先转码之后才可以用他得到jsp传递过来的值、否则跟没转一样、所以要放在dopost()方法里的最上面
你要统一编码格式、jsp的 servlet的 数据库(mysql默认是拉丁文) 所以最好要统一编码、
中文乱码很常见、解决方法也很多、
之后打印出来再看看是否为中文、
严重: Servlet.service() for servlet LoginCL threw exception
java.io.UnsupportedEncodingException: text/html;charset=gb2312
at java.lang.StringCoding.decode(StringCoding.java:170)
at java.lang.String.<init>(String.java:444)
at java.lang.String.<init>(String.java:516)
at org.apache.catalina.connector.Request.setCharacterEncoding(Request.java:1501)
at org.apache.catalina.connector.RequestFacade.setCharacterEncoding(RequestFacade.java:307)
at com.ServletTest.LoginCL.doPost(LoginCL.java:33)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:619)
这是上面那段代码(LoginCL)的上一个一页面
public class Login extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gb2312");
//这里不是已经进行了乱码处理了吗?还要对requset也改变编码格式?
可是 request.setContentType("text/html;charset=gb2312");这样写好像不对啊!
用request.setCharacterEncoding("text/html;charset=gb2312")这个的话连Login页面都进不去了
PrintWriter pw=response.getWriter();
pw.println("<html>");
pw.println("<body>");
pw.println("<form action=LoginCL method=post>");
//这里提交到LoginCL页面
pw.println("用户姓名:<input type=text name=username></br>");
//用户输入用户名
pw.println("用户密码:<input type=password name=passwd></br>");
//用户输入密码
pw.println("<input type=submit value='提交'>");
pw.println("</form>");
pw.println("</body>");
pw.println("</html>");
}}
1、你可以设置一个dofilter 来把所有乱码问题解决,要在servlet配置之前写 、记得要放行2、你如果要servlet来进行转码,每个servlet的dopost()方法都要使用这俩句话、
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
你的这句话那就删了吧
response.setContentType("text/html;charset=gb2312");你报错
java.io.UnsupportedEncodingException: text/html;charset=gb2312
是做个错误,跟我说的设置 utf-8有冲突 因为一会要gb2312 一会要utf-8 servlet要是人的话也得哭了最好写成
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
你的这句话那就删了吧
response.setContentType("text/html;charset=gb2312");跳转到下一个servlet的话 就在加这俩句话、
所以很麻烦、
要是做dofilter的话 可以搜索百度
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
有什么区别 什么时候用我写的什么时候用你写的??