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,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>
//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>
结果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>
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文件。
经过逐句的仔细调试。。现在已经锁定问题的根源了
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");
是引起一切问题的根源。。
去掉。。程序就执行的很好。。不会出现问题。。
不去。。就肯定会出现上述问题。。
我怀疑与程序的流程有关。。但又看不出什么关系。。
我怀疑编译器和我有私人恩怨。。
刚刚改的代码
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);
他就告错。。
为什么````郁闷
可是当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>
<%@ 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>
response.sendRedirect("error.jsp?message=2");改成if(post==0)
{
response.sendRedirect("error.jsp?message=2");
return;
}先试一下。
---
String[] editor_forum_id=(String[])session.getAttribute("editor_forum_id");类型不对吧 :)
一个是editor_forum_id
负责从session里面取值得
一个是editor_forum_id_int
是将editor_forum_id转化成整形的
{
System.out.println("user_right null");
}
else
{
user_right = (String)session.getAttribute("user_right");
}把request.getParameter的也改成如上格式。这样就可以检查出是哪里没收到数据。
当一个对象为null的时候,进行类型转换就会跑出异常java.lang.ClassCastException
对了。。那个问题我用另一种方法绕过去了。。
我怀疑问题出来
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
我先试试你的方法看看~
别人电脑里运行就会告知以下错误。
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
这个错误好像是哪个地方的数据类型匹配错误。。
什么情况下会发生一台电脑运行正常,另一台电脑上出现数据类型匹配错误?
{
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"), "");类似可做其他发挥。
found : java.lang.String
required: int意思是message是String类,但是switch语句只能用int。检查一下message的类型。
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呢?
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..
我看看。估计是别人做的页面和我做的出现了结合问题~~