很奇怪的session问题

kulasama 2004-09-27 04:39:19
我有两个页面,一个页面存session,一个页面取session.
结果我把它放到/webapp/delete路径下运行良好。。
放到/webapp/jbb路径下就告知以下错误
org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


root cause

java.lang.ClassCastException
org.apache.jsp.test_jsp._jspService(test_jsp.java:54)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


note The full stack trace of the root cause is available in the Tomcat logs.
有什么原因可以导致这样?
...全文
332 点赞 收藏 39
写回复
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
kulasama 2004-09-29
呵呵。。是阿。。我们做一个论坛。。不过都很没有经验的说
回复
kulasama 2004-09-28
哦。。等等。。我发现出错的地方是error页面。。不是我做的了。。
我看看。估计是别人做的页面和我做的出现了结合问题~~
回复
kulasama 2004-09-28
我语句里只有
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..
回复
kulasama 2004-09-28
什么都没有改。。又刷了一遍。。错误变成了
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呢?
回复
禽兽v5 2004-09-28
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的类型。
回复
kulasama 2004-09-28
这个。。。试一下~~~
回复
kulasama 2004-09-28
哈。。哪里哪里。。我很菜的呀~~
回复
禽兽v5 2004-09-28
对于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"), "");

类似可做其他发挥。
回复
顶一下。
看来楼主的水平在我之上,我就不说了,呜呜呜
回复
kulasama 2004-09-28
还有我里面没有用到switch语句
回复
kulasama 2004-09-28
我电脑里运行正常
别人电脑里运行就会告知以下错误。
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
这个错误好像是哪个地方的数据类型匹配错误。。
什么情况下会发生一台电脑运行正常,另一台电脑上出现数据类型匹配错误?
回复
kulasama 2004-09-28
恩。。好的。。
对了。。那个问题我用另一种方法绕过去了。。
我怀疑问题出来
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
我先试试你的方法看看~
回复
禽兽v5 2004-09-28
代码太长@_@,来点安全手段

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
回复
isquare 2004-09-28
把work删掉
回复
kulasama 2004-09-28
呵呵,没办法。。10月1号以前一定要做出来的。。
回复
zhonghua2003 2004-09-28
为了文静,努力工作!!帮你顶!!
回复
禽兽v5 2004-09-28
你们不是分开调试的?我倒。
回复
CHLC 2004-09-27
up
回复
禽兽v5 2004-09-27
很努力啊 ^_^
回复
kulasama 2004-09-27
哈哈。。我先去睡觉了。。连着看了11个小时。。累死了。。~~
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告