在jsp中的会话中的类型转换错误

时间:2014-05-08 11:16:16

标签: java jsp servlets

我有一个jsp文件adminLogin.jsp,其中我检查从index.jsp和logout.jsp传递的会话属性:

<%
      String s=(String)session.getAttribute("wrongP");
    if(s.equals('0'))
    {out.println("Wrong Details or you logged out Please Login Again <br>");
    session.invalidate();
    }

    %>
    This is login 

form
    <br>Please login<br>

            <form method="GET" action="login1">
             <br>.           Id:<input type="text" name="id"><br>Password:<input
                    type="password" name="pass"><br> <input type="submit"
                    value="Submit">
            </form>
            </div>

我得到的错误是:

HTTP Status 500 - An exception occurred processing JSP page /adminLogin.jsp at line 12

  

输入例外报告

message An exception occurred processing JSP page /adminLogin.jsp at line 12

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /adminLogin.jsp at line 12

9: <body>
10: <div align="center">
11: <%
12: String s=(String)session.getAttribute("wrongP");
13: if(s.equals('0'))
14: {out.println("Wrong Details or you logged out Please Login Again <br>");
15: session.invalidate();


Stacktrace:
  org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
  org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
  org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
  org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


root cause 

java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String
  org.apache.jsp.adminLogin_jsp._jspService(adminLogin_jsp.java:72)
  org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
  org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
  org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
  org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
  org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.53 logs.

我输入了属性,但我仍然收到此错误。

4 个答案:

答案 0 :(得分:1)

  

使用(String) Object进行类型转换只能键入强制转换对象   类型为String

如果它不是String对象,那么它将生成错误.. 更好的方法是使用

String.valueOf(object);

在你的情况下,如果session.getAttribute("wrongP")返回String以外的对象实例,肯定会产生错误。

答案 1 :(得分:1)

您的方法session.getAttribute("wrongP")返回char并尝试将其投放到String,这就是您获得ClassCastException的原因。

您必须使用String.valueOf(char)char值转换为String

String str = String.valueOf(session.getAttribute("wrongP"));

还有一件事:

获得String后,在if条件下,您将String对象与charif(s.equals('0'))进行比较。

你必须这样做:

if(s.equals("0"))
  

注意:尝试在jsp页面中执行最少的java代码。

答案 2 :(得分:1)

您的消息会告诉您问题所在:java.lang.Character cannot be cast to java.lang.String

因此该属性的值为Character类型,因此将其转换为String当然会失败。

String.valueOf(...)会有所帮助,但请记住,结果取决于实际类型,例如如果属性是一个字符串数组,它将无法工作。

另外,if(s.equals('0'))不起作用,因为字符串和字符(使用文字符号'0'获得)不等于

在您的情况下,请使用以下其中一项:

标识&#39;更喜欢这个,因为没有演员:

String s=String.valueOf( session.getAttribute("wrongP") );
if(s.equals("0")) {  //use a String here
  ...
}

这应该也可以,但是会有另一个ClassCastException的风险属性类型发生变化:

Character c=(Character)session.getAttribute("wrongP");
if(s.equals('0')) {
  ...
}

答案 3 :(得分:0)

您在session.setAttribute("attributeName",attributeValue)中存储的内容无法转换为String