web.xml完全一样
两个页面的代码是
1,makesession.jsp
<%
String[] e=new String[]{"1","2","3","4"};
session.setAttribute("user_right","1");
session.setAttribute("user_login","yes");
session.setAttribute("editor_forum_id",e);
%>
<html>
<head>
<title>makesession</title></head>
<body>
<form method="post"action="DeleteReply.jsp">
<p>板块id
<input type="text"name="forumid">
<p>帖子id
<input type="text"name="topicid">
<input type="submit"name="submit"value="提交">
</form>
</body>
</html>

解决方案 »

  1.   

    <%
    //copyright:kulA
    //time:2004-9-24
    %>
    <%@ page contentType="text/html;charset=iso-8859-1" language="java"
    import="java.sql.*,java.io.*"errorPage="error.jsp"%>
    <html>
    <head>
    <title>生成session和判断权限</title></head>
    <body>
    <% 
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    Connection con=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jbb","sa","hubuonline");
    Statement stmt=con.createStatement();//数据库连接
    //初始化
    String forumid="";// 板块id初始化
    String topicid="";//帖子id初始化
    String user_right="";//用户权限初始化
    String user_login="";//是否登陆初始化
    String[] editor_forum_id=new String[10];//斑竹管理的板块id数组初始化
    int user_right_int=0;//整形用户权限初始化
    int editor_forum_id_int[]=new int[10];//斑竹管理的板块id数组初始化
    int forumid_int=0;//整形板块id初始化
    int topicid_int=0;//整形帖子id初始化
    //初始化结束
    //取值
    forumid=request.getParameter("forumid");
    topicid=request.getParameter("topicid");
    user_right=(String)session.getAttribute("user_right");
    user_login=(String)session.getAttribute("user_login");
    editor_forum_id=(String[])session.getAttribute("editor_forum_id");//从session中取得斑竹管理的板块值 
    //取值结束
    //字符串转整形
    user_right_int=Integer.parseInt(user_right);//将用户权限转为整形
    topicid_int=Integer.parseInt(topicid);
    forumid_int=Integer.parseInt(forumid);
    for(int i=0;i<editor_forum_id.length;i++)//将斑竹管理的板块转成整形
    {
       editor_forum_id_int[i]=Integer.parseInt(editor_forum_id[i]);
    }
    String s="删除帖子成功";
    String url="TopicList.jsp?forumid="+forumid;
    if(!user_login.equals("yes"))//如果没有登陆,就跳转到失败页面
       response.sendRedirect("error.jsp?message=1");
    if(user_right.equals("2"))//如果用户权限为普通用户。就没有权限删除帖子。跳转到失败页面
       response.sendRedirect("error.jsp?message=2");
    if(user_right.equals("1"))//如果用户权限为斑竹,就执行下面括号的操作
       {
        for(int i=0;i<editor_forum_id_int.length;i++)//遍历一遍editor_forum_id数组
           { 
            if(editor_forum_id_int[i]==forumid_int)//如果斑竹板块等于帖子板块,执行下面的操作
               {
                stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
                stmt.close();
                con.close();//执行数据库操作
                response.sendRedirect("success.jsp?url="+url+"&message="+s);//跳转到成功页面
               }
           }
        response.sendRedirect("error.jsp?message=2");//如果都不行的话跳转到失败页面
        } 
    else
    {
        stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
        out.print("页面删除成功");
        stmt.close();
        con.close();
        response.sendRedirect("success.jsp?url="+url+"&message="+s);//跳转到成功页面
    }//如果用户权限不是普通用户或是斑竹。。那就一定是管理员。执行数据库操作%>
    </body>
    </html>
      

  2.   

    我又做了一个简单的取值页面。。
    结果session顺利的取出来了。。
    <%@ page contentType="text/html;charset=gb2312"%>
    <html>
    <head>
    <title>test</title>
    <body>
    用户权限<p>
    <%out.print(session.getAttribute("user_right"));%>
    <p>用户是否登录<p>
    <%out.print(session.getAttribute("user_login"));%>
    <p>用户管理的板块<p>
    <%
    String[] editor_forum_id=(String[])session.getAttribute("editor_forum_id");
    for(int i=0;i<editor_forum_id.length;i++)
    out.print(editor_forum_id[i]);%>
    <p>帖子id<p>
    <%out.print(request.getParameter("topicid"));
    %>
    <p>板块id<p>
    <%out.print(request.getParameter("forumid"));
    %>
    </body>
    </html>
      

  3.   

    java.lang.ClassCastException
        org.apache.jsp.test_jsp._jspService(test_jsp.java:54)察看一下%CATALINA_HOME%\work\Catalina\localhost\jbb\org\apache\jsp\test_jsp.java第54行的内容。它是tomcat解析test.jsp重新生成的java文件。
      

  4.   

    找找原因!session可是个公共变量哦!
      

  5.   

    恩。。
    经过逐句的仔细调试。。现在已经锁定问题的根源了
    for(int i=0;i<editor_forum_id_int.length;i++)//遍历一遍editor_forum_id数组
           { 
            if(editor_forum_id_int[i]==forumid_int)//如果斑竹板块等于帖子板块,执行下面的操作
               {
                stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
                stmt.close();
                con.close();//执行数据库操作
                response.sendRedirect("success.jsp?url="+url+"&message="+s);//跳转到成功页面
               }
           }
        response.sendRedirect("error.jsp?message=2");//如果都不行的话跳转到失败页面
        } 
    这里。。
    response.sendRedirect("error.jsp?message=2");
    是引起一切问题的根源。。
    去掉。。程序就执行的很好。。不会出现问题。。
    不去。。就肯定会出现上述问题。。
    我怀疑与程序的流程有关。。但又看不出什么关系。。
      

  6.   

    我要疯了。。
    我怀疑编译器和我有私人恩怨。。
    刚刚改的代码
    int post=0; 
    if(!user_login.equals("yes"))//如果没有登陆,就跳转到失败页面
       response.sendRedirect("error.jsp?message=1");
    if(user_right.equals("2"))//如果用户权限为普通用户。就没有权限删除帖子。跳转到失败页面
       post=0;
    if(user_right.equals("1"))//如果用户权限为斑竹,就执行下面括号的操作
    {
      for(int i=0;i<editor_forum_id_int.length;i++)//遍历一遍editor_forum_id数组

        if(editor_forum_id_int[i]==forumid_int)//如果斑竹板块等于帖子板块,执行下面的操作
    {
    stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
            stmt.close();
            con.close();//执行数据库操作
    response.sendRedirect("success.jsp?url="+url+"&message="+s);
    post=1;
    }
         } 

    if(user_right.equals("0"))
    {
    stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
        out.print("页面删除成功");
        stmt.close();
        con.close();
    post=1;//跳转到成功页面
    }//如果用户权限不是普通用户或是斑竹。。那就一定是管理员。执行数据库操作
    if(post==0)
    response.sendRedirect("error.jsp?message=2");
    if(post==1)
    response.sendRedirect("success.jsp?url="+url+"&message="+s);
    %>
    </body>
    </html>
    别的都好。。
    只要加上
    response.sendRedirect("success.jsp?url="+url+"&message="+s);
    他就告错。。
    为什么````郁闷
      

  7.   

    错误是空指针返回。。我又回过去检查应该每个变量都对null进行了处理。。
    可是当user_right为空的时候,也就是用户没有登录去访问的话。
    还是抛出空指针错误。。java.lang.NullPointerException。可我明明做了处理的。。
    这是最新的代码 。解决了登录时删除的问题。。可是没有登录时却删除不了抛出java.lang.NullPointerException错误。
    <%@ page contentType="text/html;charset=iso-8859-1" language="java"
    import="java.sql.*,java.io.*"errorPage="error.jsp"%>
    <html>
    <head>
    <title>生成session和判断权限</title></head>
    <body>
    <% 
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    Connection con=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jbb","sa","hubuonline");
    Statement stmt=con.createStatement();//数据库连接
    int user_right_int=0;//整形用户权限初始化
    int editor_forum_id_int[]=new int[10];//斑竹管理的板块id数组初始化
    int forumid_int=0;//整形板块id初始化
    int topicid_int=0;//整形帖子id初始化
    //初始化结束
    //取值
    String user_right=(String)session.getAttribute("user_right");
    if(user_right==null)
    user_right="";
    String topicid=request.getParameter("topicid");
    if(topicid==null)
    topicid="";
    String forumid=request.getParameter("forumid");
    if(forumid==null)
    forumid="";
    String user_login=(String)session.getAttribute("user_login");
    if(user_login==null)
    user_login="";
    String[] editor_forum_id=(String[])session.getAttribute("editor_forum_id");//从session中取得斑竹管理的板块值
    if(editor_forum_id==null)
    editor_forum_id=new String[]{""};
    //取值结束
    //字符串转整形
    user_right_int=Integer.parseInt(user_right);//将用户权限转为整形
    topicid_int=Integer.parseInt(topicid);
    forumid_int=Integer.parseInt(forumid);
    for(int i=0;i<editor_forum_id.length;i++)//将斑竹管理的板块转成整形
    {
       editor_forum_id_int[i]=Integer.parseInt(editor_forum_id[i]);
    }
    String s="删除帖子成功";
    String url="TopicList.jsp?forumid="+forumid;
    int post=0; 
    if("yes".equals(user_login))//如果没有登陆,就跳转到失败页面
    {
    if("2".equals(user_right))//如果用户权限为普通用户。就没有权限删除帖子。跳转到失败页面
       post=0;
    if("1".equals(user_right))//如果用户权限为斑竹,就执行下面括号的操作
    {
      for(int i=0;i<editor_forum_id_int.length;i++)//遍历一遍editor_forum_id数组

        if(editor_forum_id_int[i]==forumid_int)//如果斑竹板块等于帖子板块,执行下面的操作
    {
    stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
            stmt.close();
            con.close();//执行数据库操作
    post=1;
    }
         } 

    if("0".equals(user_right))
    {
    stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
        out.print("页面删除成功");
        stmt.close();
        con.close();
    post=1;//跳转到成功页面
    }//如果用户权限不是普通用户或是斑竹。。那就一定是管理员。执行数据库操作
    }
    if(post==0)
    response.sendRedirect("error.jsp?message=2");
    if(post==1)
    response.sendRedirect("success.jsp?url="+url+"&message="+s);
    %>
    </body>
    </html>
      

  8.   

    在每个 response.sendRedirect 语句后面加 return;注意if语句内的要加{}
      

  9.   

    检查一下你的 success.jsp 内容呢?
      

  10.   

    success.jsp没问题的~
    <%@ page contentType="text/html;charset=gb2312"%>
    <%
    byte[] temp=request.getParameter("message").getBytes("iso-8859-1");
    String message=new String(temp);
    String url=request.getParameter("url");
    int forumID=0;
    %>
    <html>
    <head>
    <title>success</title>
    </head>
    <body>
    <h1><%=message%></h1>
    <p>
    <a href="<%=url%>">返回刚才的页面</a>
    <li><a href="index.jsp">返回论坛首页</a>
    <meta http-equiv="refresh" content="3; url=<%=url%>">
    <p>用户权限<p>
    <%out.print(session.getAttribute("user_right"));%>
    <p>用户是否登录<p>
    <%out.print(session.getAttribute("user_login"));%>
    <p>用户管理的板块<p>
    <%
    String[] editor_forum_id=(String[])session.getAttribute("editor_forum_id");
    for(int i=0;i<editor_forum_id.length;i++)
    out.print(editor_forum_id[i]);%>
    </body>
    </html>
      

  11.   

    if(post==0)
    response.sendRedirect("error.jsp?message=2");改成if(post==0)
    {
        response.sendRedirect("error.jsp?message=2");
        return;
    }先试一下。
      

  12.   

    刚说完......int editor_forum_id_int[]=new int[10];
    ---
    String[] editor_forum_id=(String[])session.getAttribute("editor_forum_id");类型不对吧 :)
      

  13.   

    这两个量是不同俄。。
    一个是editor_forum_id
    负责从session里面取值得
    一个是editor_forum_id_int
    是将editor_forum_id转化成整形的
      

  14.   

    代码太长@_@,来点安全手段String user_right=(String)session.getAttribute("user_right");这样是不安全的,改为:String user_right = "";if ( session.getAttribute("user_right") == null )
    {
        System.out.println("user_right null");
    }
    else
    {
        user_right = (String)session.getAttribute("user_right");
    }把request.getParameter的也改成如上格式。这样就可以检查出是哪里没收到数据。
    当一个对象为null的时候,进行类型转换就会跑出异常java.lang.ClassCastException
      

  15.   

    恩。。好的。。
    对了。。那个问题我用另一种方法绕过去了。。
    我怀疑问题出来
    response.sendRedirect("success.jsp?url="+url+"&message="+s);
    因此我把代码改成了
    if(user_login!=null){
    if(user_right!=null){
    if(user_right=="2"){
    p=0;
    }
            if(user_right=="1"){
     for(int i=0;i<editor_forum_id.length;i++){
     if(editor_forum_id_int[i]==forumid_int){
       stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
                       stmt.close();
                       con.close();//执行数据库操作
       p=1
     }
     }
        }
    if(user_right=="0"){
    stmt.executeUpdate("delete from jbb_topic where topic_id ='"+topicid_int+"'");
                stmt.close();
                con.close();
    p=1;
    }
    }
    }
    else
       p=2;
    if(p==0)
    response.sendRedirect("error.jsp?message=2&url="+url);
    if(p==1)
    response.sendRedirect("success.jsp?url="+url+"&message="+s);
    if(p==2)
    response.sendRedirect("error.jsp?message=1&url="+url);
    %>
    暂时绕开了问题。。
    然后又出现了新问题。。
    在我的电脑上程序执行完好。。
    在别人的电脑上就老是不能使p=1,就好像上面的代码没有执行一样。。每次都跳到错误的页面。。
    数据库删除操作也失败。。怀疑是哪个值为Null
    我先试试你的方法看看~
      

  16.   

    我电脑里运行正常
    别人电脑里运行就会告知以下错误。
    An error occurred at line: 17 in the jsp file: /error.jsp
    Generated servlet error:
    C:\Tomcat\work\Catalina\localhost\JBB\org\apache\jsp\error_jsp.java:75: incompatible types
    found   : java.lang.String
    required: int
    switch(message){
                   ^
    1 error
    这个错误好像是哪个地方的数据类型匹配错误。。
    什么情况下会发生一台电脑运行正常,另一台电脑上出现数据类型匹配错误?
      

  17.   

    还有我里面没有用到switch语句
      

  18.   

    对于jsp编程这种经常进行类型转换的程序,写很多if判断明显是不划算的。我们的方法是写一个静态转换类,例子如下:public class Convert
    {
        public static String toStr(Object src, String init)
        {
            String dest = null;        try
            {
                dest = (String) src;            if (dest == null)
                {
                    dest = init;
                }
            }
            catch (Exception e)
            {
                dest = init;
            }        return dest;
        }
    }那么对于String类型的取值就可以这样用:String user_right = Convert.toStr(session.getAttribute("user_right"), "");类似可做其他发挥。
      

  19.   

    C:\Tomcat\work\Catalina\localhost\JBB\org\apache\jsp\error_jsp.java:75: incompatible types
    found   : java.lang.String
    required: int意思是message是String类,但是switch语句只能用int。检查一下message的类型。
      

  20.   

    什么都没有改。。又刷了一遍。。错误变成了
    C:\Tomcat\work\Catalina\localhost\JBB\org\apache\jsp\error_jsp.java:51: ')' expected
    char message=Character.parseChar(request.getParameter("message");
                                                                    ^
    An error occurred at line: 2 in the jsp file: /error.jsp
    Generated servlet error:
    C:\Tomcat\work\Catalina\localhost\JBB\org\apache\jsp\error_jsp.java:51: cannot resolve symbol
    symbol  : method parseChar (java.lang.String)
    location: class java.lang.Character
    char message=Character.parseChar(request.getParameter("message");
    可问题是我的语句上没有这样的语句。。所以明显是jsp转化成selvlet时出的问题。。
    这是在哪些语句上转化的servlet呢?
      

  21.   

    我语句里只有
    if(p==0)
    response.sendRedirect("error.jsp?message=2&url="+url);
    if(p==1)
    response.sendRedirect("success.jsp?url="+url+"&message="+s);
    if(p==2)
    response.sendRedirect("error.jsp?message=1&url="+url);
    出现了message..
      

  22.   

    哦。。等等。。我发现出错的地方是error页面。。不是我做的了。。
    我看看。估计是别人做的页面和我做的出现了结合问题~~