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();
}
}
        

}}

解决方案 »

  1.   


    // 强类型转化
    // 下面这样就对了
    String u = (String)request.getParameter("username");
      

  2.   

    在上面加一句:
    request.setCharacterEncoding("gb2312") ;
    String u=request.getParameter("username");
      

  3.   

    是的,设置服务器的编码方式,默认是按照iso8859-1的方式
    request.setCharacterEncoding("gb2312");在dopost方法的第一句加上这句代码。
      

  4.   

    在String u=request.getParameter("username");前加一句request.setCharacterEncoding("GBK");GBK也可以换成gb2312
      

  5.   

    乱码问题:客户端提交中文,servlet中获取的是乱码:
      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之前
      

  6.   

    你们的意思是不论是doget,还是dopost方法都要增加request.setCharacterEncoding("GBK")来处理乱码?也就是说这段代码里面要有两条??
      

  7.   

    上面的方法都试过了不行啊!!我还是详细说说吧!!
    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);
    楼上说的强制类型转换也试过了不行!!
      

  8.   

    request.setContentType("text/html;charset=gb2312");
    response.setContentType("text/html;charset=gb2312");
    还有你的编码要都一样,界面也是这个编码么?而且这2行代码最好放在你方法顶行。
      

  9.   

    不需要转型的,他获取的obj类型的,不需要再次强转,是你只转了一次编码,还要用response在转一次
      

  10.   

    jsp编码是什么的? gbk?
    你servlet的dost()方法只是把response编码给改了 servlet编码默认是iso-8859-1的,你需要把请求的编码也给改了才可以
    request.setCharacterEncoding("utf-8");  //里面的编码最好跟jsp页面编码一样
    而且你必须先转码之后才可以用他得到jsp传递过来的值、否则跟没转一样、所以要放在dopost()方法里的最上面
    你要统一编码格式、jsp的 servlet的 数据库(mysql默认是拉丁文) 所以最好要统一编码、
    中文乱码很常见、解决方法也很多、
      

  11.   

    然后你在String u=request.getParameter("username");    //这个地方不用强转因为获取默认的都是字符串类型
    之后打印出来再看看是否为中文、
      

  12.   

    用这个。String u = new String(request.getParameter("username").getBytes(),"iso-8859-1");
      

  13.   

    页面的pageEncoding和你的charset一样就可以了
      

  14.   

    request.setCharacterEncoding("gb2312") ;
      

  15.   

    用这个改了以后报错:
    严重: 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)
      

  16.   

    多谢各位大侠指导!我刚开始学servlet不是很懂请大家多多包涵!!我还是再贴一段代码吧
    这是上面那段代码(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>");
    }}
      

  17.   


    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的话  可以搜索百度
       
      

  18.   

    太感谢了  我想知道  我写的那个response.setContentType("text/html;charset=gb2312");和你写的
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8"); 

    有什么区别  什么时候用我写的什么时候用你写的??