hasLogin.jsp页面代码: 
<%@ page language="java" %> 
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> 
<html> 
<head> 
<title>Lomboz JSP</title> 
</head> 
<body bgcolor="#FFFFFF"> 
<%String str="你已经登陆!"; 
response.sendRedirect("index.jsp?warning=str");%> 
</body> 
</html> index.jsp页面代码: 
<%@ page contentType="text/html;charset=gb2312"%> 
<html> 
<head><title>Welcome</title></head> 
<body> 
<%String str1=new String(request.getParameter("warning").getBytes("ISO8859_1"),"gb2312");%> 
<center><%=str1%></center> 
</body> 
</html> 
为什么我在index.jsp中会获取显示不了warning"你已经登陆"的提示?之前有用户登陆页面login.html使用form表单提交数据,已经使用到了一次request,在这里再使用request获取参数warning是不是会有问题? 
错误提示: 
HTTP ERROR: 500 Internal Server Error 
RequestURI=/userInfo/index.jsp

解决方案 »

  1.   

    response.sendRedirect("index.jsp?warning="+str);
      

  2.   

    response.sendRedirect("/工程名称/index.jsp?warning="+str);
      

  3.   

    按照上面的修改以后,提示错误还是一样啊~,运行以后,在eclipse的console中多出如下的提示:
    08:58:10,812 WARN  [jbossweb] WARNING: Exception for /userInfo/index.jsp
    java.lang.NullPointerException
    at org.apache.jsp.index$jsp._jspService(index$jsp.java:87)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:360)
    at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:294)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:558)
    at org.mortbay.http.HttpContext.handle(HttpContext.java:1714)
    at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:505)
    at org.mortbay.http.HttpContext.handle(HttpContext.java:1664)
    at org.mortbay.http.HttpServer.service(HttpServer.java:879)
    at org.jboss.jetty.Jetty.service(Jetty.java:460)
    at org.mortbay.http.HttpConnection.service(HttpConnection.java:770)
    at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:932)
    at org.mortbay.http.HttpConnection.handle(HttpConnection.java:787)
    at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:201)
    at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289)
    at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:454)
    同样的错误提示:
    HTTP ERROR: 500 Internal Server Error(内部服务出错)
    RequestURI=/userInfo/index.jsp
      

  4.   

    我在hasLogin.jsp页面中使用如下代码,还是不行啊~提示一样的错误,看我下面的另一种改法:<%String str="你已经登陆!"; 
    %> 
    <jsp:forward page="index.jsp?warning=<%=str%>>
    </jsp:forward> 
      

  5.   

    用forward是不能这样传参数的,
    要这样写:
    <%String str="你已经登陆!"; 
    %> 
    <jsp:forward page="index.jsp>
    <jsp:param name="name" value=<%=str%>/>
    </jsp:forward> 
      

  6.   

    路径有问题
    用sendRedirect跳转方式那个
    跳转后路径是否正确
      

  7.   

    我的hasLogin.jsp(跳转页面)和index.jsp(跳转到的页面)都是在工程名中的同一个模块userInfo下啊~它们之间跳转不是可以直接写文件名(相对路径的写法)的吗?
      

  8.   

    我估计是request使用冲突了,因为在我的index.jsp中,有一段代码好象同时使用到了第一次的request,然后再又一次使用到了后面一次的request,看看我完整的index.jsp代码:
    <%@ page contentType="text/html;charset=gb2312"%>
    <% 
      String name=null; 
      Cookie[]c=request.getCookies();     //因为要在首页中显示"XXX,欢迎你"(XXX是登陆用户名),所以这里的读取cookies使用到了request,这就是所
                                               //说的第一次request.
      for (int i=0;i<c.length;i++){ 
        if (c[i].getName().equals("username")){ 
          name=c[i].getValue(); 
        } 
      } 
    %> <html>
    <head><title>Welcome</title></head>
    <body>
        <center><%=name%> 欢迎你!</center>   //读取name变量.
     <%String str1=new String(request.getParameter("warning").getBytes("ISO8859_1"),"gb2312");%>  //这里是我跳转到该页时携带参数
                                                                                                               //warning的显示处理.
    <center><%=str1%></center>

    </body>
    </html>
    我应该怎么处理这样的冲突啊?
      

  9.   

    要把参数转码,
    http://blog.csdn.net/rascalboy520/archive/2008/06/06/2516038.aspx
      

  10.   

    <%String str1=new String(request.getParameter("warning").getBytes("ISO8859_1"),"gb2312");%> 这句不是已经对中文参数进行处理了吗?
    我在hasLogin.jsp页面中传字符也是一样的,最终的运行结果都是NULL,代码如下:
    <%@ page contentType="text/html; charset=GBK" %>
    <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html>
    <head>
    <title>Lomboz JSP</title>
    <%
    String CONTENT_TYPE = "text/html; charset=GBK";
            response.setContentType(CONTENT_TYPE);//设置输出字符集
            request.setCharacterEncoding("GBK");//设置输入字符集
    %> 
    </head>
    <body bgcolor="#FFFFFF">
    <jsp:forward page="index.jsp">
    <jsp:param name="warning" value="123dsf!"/>
    </jsp:forward></body>
    </html>index.jsp页面:
    <!-- Copyright (c) 2002 by ObjectLearn. All Rights Reserved. -->
    <%@ page contentType="text/html; charset=GBK"%><%String CONTENT_TYPE ="text/html; charset=GBK";
            response.setContentType(CONTENT_TYPE);//设置输出字符集
            request.setCharacterEncoding("GBK");//设置输入字符集
    %>
    <%
      String name=null; 
      Cookie[]c=request.getCookies(); 
      for (int i=0;i<c.length;i++){ 
        if (c[i].getName().equals("username")){ 
          name=c[i].getValue(); 
        } 
      }
      
    %> <html>
    <head>
    <title>Welcome</title>
    </head>
    <body>
    <center><%=name%> 欢迎你!<%=request.getParameter("warning")%></center>
        </body>
    </html>这里传的参数warning就算是字符"123dsf!",运行以后显示的还是"NULL",怎么会取不到结果的呢?真是搞不懂了,好象不是中文参数处理的问题了~
      

  11.   

    response.sendRedirect("index.jsp?warning=str");
    这样也行?
    str是字符串“str”
    不可能取到
      

  12.   

    <jsp:forward page="index.jsp?warning= <%=str%>> 
    </jsp:forward> 
      

  13.   

    <jsp:forward page="index.jsp?warning= <%=str%>> 
    </jsp:forward> 按照你这样改了,结果当我提交表单的时候,提示如下:HTTP ERROR: 500 Internal Server Error
    RequestURI=/userInfo/index.jsp 
      

  14.   

    我发完整的工程代码上来,大家帮忙啊~到底哪里出问题了:
    1.用户登陆界面login.html:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>中国原创基地-就业服务信息平台</title>
    <style type="text/css">
    <!--
    .style4 {font-size: 14px}
    body {
    margin-top: 0px;
    }
    -->
    </style>
    </head><body>
    <script language="JavaScript">
    function valid(form){        if(form.username.value.length==0)    {        alert("请输入用户名!");        form.username.focus();        return false;    }    if(form.password.value.length==0)    {        alert("请输入密码!");        form.password.focus();        return false;    }}
    </script><table width="658" height="484"  border="1" align="center" bordercolorlight="#000000" bordercolordark="#FFFFFF" cellpadding="0" cellspacing="0">
        <tr>
          <td height="447">&nbsp;</td>
        </tr>
        <tr>
          <td height="28">
         <table width=100% height="28" border="0" cellSpacing=0 cellPadding=0>
              <form onsubmit="return valid(this)" action="login"  method="post">
         <tr>
           <td>
        &nbsp; 用户名:
        <input name="username" type="text" size="10" maxlength="12">&nbsp;
        密码:<input name="password" type="password" size="10" maxlength="20">&nbsp;
        
        <input type="submit" name="loginup" value="登陆">&nbsp;<input type="reset" name="Reset" value="重置">
        &nbsp;&nbsp;&nbsp;&nbsp;<span class="style4">&nbsp; 没有帐号? 点此<a href="register.html">注册</a>新用户</span>
           </td>
                </tr>
           </form>
            </table>
          </td>
      </tr>
    </table>
    </body>
    </html>该页面使用form表单提交一个请求,携带参数username和password,使用Login.java(一个servlet)进行处理.
      

  15.   

    2.用户名和密码处理页Login.java:作用:首先验证表单输入的用户名是否存在于mysql中的数据库userdatabase的userinfo表中
               <1>存在userinfo表:(分两种情况) 
                       (1)用户名存在cookies中,       处理:跳转到hasLogin.jsp,并且继续跳转到index.jsp,然后在index.jsp中显示"你已经登陆!";
                       (2)用户名不存在在cookies中,   处理:写入cookies,并跳转到index.jsp;
              <2>不存在userinfo表:用户输入的的名字不正确,所以跳到login.html(也就是页面没有变动);代码如下:
    package com.servlet;
    import java.io.*;
    import java.sql.*;  
    import java.lang.String;
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    public class Login extends HttpServlet 
    {
    public void doPost(HttpServletRequest request,HttpServletResponse response)
    throws IOException,ServletException
    {
      
    response.setContentType("text/html;charset=gb2312"); 
    PrintWriter out = response.getWriter(); 
    String Username = request.getParameter("username");
    String Password = request.getParameter("password");  
    Cookie cookie=null; 
    Cookie[] cookies=request.getCookies();  try{ 
    Class.forName("org.gjt.mm.mysql.Driver").newInstance();   
    Connection conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/userdatabase","root","");
    Statement sqlStmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
    ResultSet sqlRst=sqlStmt.executeQuery("select * from userInfo where username='" +Username+ "' and password='" +Password+"'");if(sqlRst.next()){

    if(cookies!=null){
           for(int i=0;i<cookies.length;i++){ 
                 if(cookies[i].getName().equals("Username")){
                  response.sendRedirect("hasLogin.jsp");
                   }
                 cookie=cookies[i];
               }//for结束
           }
        if((cookies==null)||(!cookie.getName().equals("Username"))){
           int maxAge=3600;   //1小时(3600秒)cookie存活期   
           cookie=new Cookie("username",sqlRst.getString("username"));
           cookie.setMaxAge(maxAge);
           response.addCookie(cookie);
           }
          response.sendRedirect("index.jsp"); 
      }
    else{
          response.sendRedirect("login.html"); 
         }
      sqlRst.close();
      sqlStmt.close();
      conn.close();
       }catch(ClassNotFoundException e){
            System.out.print("数据库连接失败!"+e.toString());}
        catch(Exception sqle){
            out.println(sqle.toString());
    }
    }   
    public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws IOException,ServletException 
      { doPost(request,response);
    }} //Login结束