我有一个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.
我输入了属性,但我仍然收到此错误。
答案 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
对象与char
值if(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
。