在编写关于“Response”的代码时,遇到这样的怪事。直接通过Tomcat运行范例程序时,报错:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.NullPointerException
java.util.Arrays$ArrayList.<init>(Unknown Source)
java.util.Arrays.asList(Unknown Source)
org.apache.jsp.ch4.resposne_jsp._jspService(resposne_jsp.java:50)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.可是在运行过之前写的一个“Request.jsp”以后再运行就完全没有问题了。
但是在“Firefox”中无论如何运行都报错。
而且在NetBeans5.5中这个jsp根本无法通过编译。可是这是范例程序啊,为什么呢?似乎运行时出的问题和在NetBeans中出的问题原因是不一样的。NetBeans中编译时显示:
init:
deps-module-jar:
deps-ear-jar:
deps-jar:
library-inclusion-in-archive:
library-inclusion-in-manifest:
compile:
compile-jsps:
Compiling 1 source file to C:\Documents and Settings\Java\Response\build\generated\classes
C:\Documents and Settings\Java\Response\build\generated\src\org\apache\jsp\response_jsp.java:65: 警告:编码 GBK 的不可映射字符
out.println("涓婁竴娆¤闂殑鏃堕棿锛?+cookie_response.getValue());
^
C:\Documents and Settings\Java\Response\build\generated\src\org\apache\jsp\response_jsp.java:65: 未结束的字符串字面值
out.println("涓婁竴娆¤闂殑鏃堕棿锛?+cookie_response.getValue());
^
C:\Documents and Settings\Java\Response\build\generated\src\org\apache\jsp\response_jsp.java:66: 需要 ')'
cookie_response.setValue(new Date().toString());
^
2 错误
1 警告
C:\Documents and Settings\Java\Response\nbproject\build-impl.xml:364: The following error occurred while executing this line:
C:\Documents and Settings\Java\Response\nbproject\build-impl.xml:149: Compile failed; see the compiler error output for details.
生成失败(总时间:3 秒)源程序如下:
/**
response.jsp
*/
<%@page contentType="text/html;charset=gb2312"%>
<%@ page import="javax.servlet.http.Cookie,java.util.*"%>
<%
String userName="hellking";
Cookie[] cookie=request.getCookies();
Cookie cookie_response=null;
List list=Arrays.asList(cookie);
Iterator it=list.iterator();
while(it.hasNext())
{
Cookie temp=(Cookie)it.next();
if(temp.getName().equals(userName+"_access_time"))
{
cookie_response=temp;
break;
}
}
out.println("当前的时间:"+new java.util.Date()+"<br>");
if(cookie_response!=null)
{
out.println("上一次访问的时间:"+cookie_response.getValue());
cookie_response.setValue(new Date().toString());
}
else
{
cookie_response=new Cookie(userName+"_access_time",new java.util.Date().toString());
}
response.addCookie(cookie_response);
response.setContentType("text/html");
response.flushBuffer();
%>哪位大侠能给个解释?
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.NullPointerException
java.util.Arrays$ArrayList.<init>(Unknown Source)
java.util.Arrays.asList(Unknown Source)
org.apache.jsp.ch4.resposne_jsp._jspService(resposne_jsp.java:50)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.可是在运行过之前写的一个“Request.jsp”以后再运行就完全没有问题了。
但是在“Firefox”中无论如何运行都报错。
而且在NetBeans5.5中这个jsp根本无法通过编译。可是这是范例程序啊,为什么呢?似乎运行时出的问题和在NetBeans中出的问题原因是不一样的。NetBeans中编译时显示:
init:
deps-module-jar:
deps-ear-jar:
deps-jar:
library-inclusion-in-archive:
library-inclusion-in-manifest:
compile:
compile-jsps:
Compiling 1 source file to C:\Documents and Settings\Java\Response\build\generated\classes
C:\Documents and Settings\Java\Response\build\generated\src\org\apache\jsp\response_jsp.java:65: 警告:编码 GBK 的不可映射字符
out.println("涓婁竴娆¤闂殑鏃堕棿锛?+cookie_response.getValue());
^
C:\Documents and Settings\Java\Response\build\generated\src\org\apache\jsp\response_jsp.java:65: 未结束的字符串字面值
out.println("涓婁竴娆¤闂殑鏃堕棿锛?+cookie_response.getValue());
^
C:\Documents and Settings\Java\Response\build\generated\src\org\apache\jsp\response_jsp.java:66: 需要 ')'
cookie_response.setValue(new Date().toString());
^
2 错误
1 警告
C:\Documents and Settings\Java\Response\nbproject\build-impl.xml:364: The following error occurred while executing this line:
C:\Documents and Settings\Java\Response\nbproject\build-impl.xml:149: Compile failed; see the compiler error output for details.
生成失败(总时间:3 秒)源程序如下:
/**
response.jsp
*/
<%@page contentType="text/html;charset=gb2312"%>
<%@ page import="javax.servlet.http.Cookie,java.util.*"%>
<%
String userName="hellking";
Cookie[] cookie=request.getCookies();
Cookie cookie_response=null;
List list=Arrays.asList(cookie);
Iterator it=list.iterator();
while(it.hasNext())
{
Cookie temp=(Cookie)it.next();
if(temp.getName().equals(userName+"_access_time"))
{
cookie_response=temp;
break;
}
}
out.println("当前的时间:"+new java.util.Date()+"<br>");
if(cookie_response!=null)
{
out.println("上一次访问的时间:"+cookie_response.getValue());
cookie_response.setValue(new Date().toString());
}
else
{
cookie_response=new Cookie(userName+"_access_time",new java.util.Date().toString());
}
response.addCookie(cookie_response);
response.setContentType("text/html");
response.flushBuffer();
%>哪位大侠能给个解释?
if(cookie_response!=null)
{
out.println("上一次访问的时间:"+cookie_response.getValue());你先把这上面的中文去掉试试
out.println("涓婁竴娆¤闂殑鏃堕棿锛?+cookie_response.getValue());可能乱码问题,
因为,我做了如下调整:
<%@ page contentType="text/html;charset=gb2312" import="javax.servlet.http.Cookie,java.util.*" %>
<html>
<head>
<title> response应用实例2 </title>
</head>
<body>
<%
String userName="cookietest";
Cookie[] cookie=request.getCookies();
Cookie cookie_response=null;
int i=0;
if(cookie!=null)
while(i<cookie.length)
{
Cookie temp=cookie[i];
if(temp.getName().equals(userName + "_access_time"))
{
cookie_response=temp;
break;
}
i++;
}
else
out.println("error");
out.println("当前时间:" + new java.util.Date() + "<br>");
if(cookie_response != null)
{
out.println("上一次访问的时间:" + cookie_response.getValue());
cookie_response.setValue(new Date().toString());
}
else
{
cookie_response=new Cookie(userName + "_access_time",new java.util.Date().toString());
}
response.addCookie(cookie_response);
response.setContentType("text/html");
response.flushBuffer();
%>
</body>
</html>
结果网页第一次显示:
error
当前时间:Mon Apr 02 15:22:40 CST 2007
刷新网页后显示:
当前时间:Mon Apr 02 15:29:58 CST 2007
上一次访问的时间:Mon Apr 02 15:29:40 CST 2007
我又查了一下发现:Arrays.aslist()这个方法会抛出一个NullPointerException,所以网页会报错。
可是,我就是不知道为什么第一次cookie是null。
这就要请高手们帮帮忙了。
一看就是空指针异常了,对null对象进行操作,所以会出这个错.在取对象的时候,在操作之前必须判断是否为空,不为null的时候再操作就好了.