请教:: Servlet.service() for servlet jsp threw exception java.lang.NullPointerExce

hhhhhhh_____ 2015-08-15 10:46:29
刚我启动浏览器的时候,提示错误:
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at org.apache.jsp.index_jsp._jspService(index_jsp.java:105)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
当我把这段代码删了,页面可以正常显示,但是我不知道这段代码哪里出错了,请各位指教
<div class="feature">
<%
String info;
String dt;
String user;

List<HashMap<String, Object>> messageList = JDBCOption.query(SQLConstant.getmessage);
for (int i = 0; i < messageList.size(); i++) {
HashMap hm = messageList.get(i);
user = hm.get("author").toString();
info = hm.get("info").toString();
dt = hm.get("published").toString();
%>
<div class="message">
<h3><%=user %></h3>
<p><%=info %></p>
<h3><%=dt %></h3>
</div>

<%
}
%>

</div>

源代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.HashMap"%>
<%@page import="com.dedo.BBS.Jdbc.SQLConstant"%>
<%@page import="com.dedo.BBS.Jdbc.JDBCOption"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- DW6 -->
<head>
<!-- Copyright 2005 Macromedia, Inc. All rights reserved. -->
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Untitled Document</title>
<link rel="stylesheet" href="/CSS/common.css" type="text/css" />
<style type="text/css">
<!--
.message {
padding: 10px;
float: left;
height: 200px;
width: 200px;
position: relative;
}
-->
</style>
</head>
<!-- The structure of this file is exactly the same as 2col_rightNav.html;
the only difference between the two is the stylesheet they use -->
<body>
<jsp:include page="head.jsp" flush="true" />
<!-- end masthead -->
<div id="content">
<div id="breadCrumb">
<a href="#">所有</a> /正向<a href="#"></a> / <a href="#">反向</a>/
</div>
<h2 id="pageName">公告区</h2>
<div class="feature">//这里有错******
<%
String info;
String dt;
String user;

List<HashMap<String, Object>> messageList = JDBCOption.query(SQLConstant.getmessage);
for (int i = 0; i < messageList.size(); i++) {
HashMap hm = messageList.get(i);
user = hm.get("author").toString();
info = hm.get("info").toString();
dt = hm.get("published").toString();
%>
<div class="message">
<h3><%=user %></h3>
<p><%=info %></p>
<h3><%=dt %></h3>
</div>

<%
}
%>

</div>
</div>
<!--end content -->
<div id="navBar">
<div id="search">
<form action="/SubMessage" method="post">
<label>输入发布内容</label>
<textarea name="message" cols="26" rows="20"></textarea>
<input name="goButton" type="submit" value="发布" />
</form>
</div>
<div id="headlines">
<h3>小白</h3>
<p> </p>
</div>
</div>
<!--end navbar -->
<jsp:include page="foot.jsp" flush="true" />
<br />
</body>
</html>

package com.dedo.BBS.Servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dedo.BBS.Jdbc.JDBCOption;
import com.dedo.BBS.Jdbc.SQLConstant;
import com.dedo.BBS.Tool.Common;



/**
* Servlet implementation class SubMessage
*/
public class SubMessage extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public SubMessage() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}

protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
{
String message = request.getParameter("message");
java.util.Date d = new java.util.Date();
JDBCOption.update(SQLConstant.addmessage, 1,message,new Timestamp(d.getTime()));
response.sendRedirect("index.jsp");
}

}

package com.dedo.BBS.Jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.dedo.BBS.Tool.Common;

public class JDBCOption {
private static DBConfig dbconfig = null;

static {//连接数据库
dbconfig = new DBConfig();
try {
Class.forName(dbconfig.getDriver());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/*
* 查询操作
*/
public static List query(String sql, Object... paramters) {
List returnValue = new ArrayList();
ResultSet rs = null;
Connection conn = null;
PreparedStatement ps = null;

try {
conn = DriverManager.getConnection(dbconfig.getUrl(), dbconfig.getUsername(), dbconfig.getPassword());
ps = conn.prepareStatement(sql);
for (int i = 0; i < paramters.length; i++) {
ps.setObject(i + 1, paramters[i]);
}

rs = ps.executeQuery();

while (rs.next()) {
ResultSetMetaData md = rs.getMetaData();
Map map = new HashMap();

for (int i = 0; i < md.getColumnCount(); i++) {
map.put(md.getColumnLabel(i + 1), rs.getObject(i + 1));
}
returnValue.add(map);
}

} catch (SQLException e) {
e.printStackTrace();
}finally{
Common.free(conn, ps, rs);
}

return returnValue;
}



}
...全文
356 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
daliner6 2016-09-01
  • 打赏
  • 举报
回复
原来是我数据库和代码写错了一个字母 希望自己以后可以吸取教训 --这个是什么意思,写错一个字母也会导致这样的问题?
hhhhhhh_____ 2015-08-16
  • 打赏
  • 举报
回复
引用 1 楼 libingxin 的回复:
你的hashMap的value类型 为object hm.get("author") 有肯能为null 你可以用(String)hm.get("author")
你好,我发现,当我把数据库里面的数据清空时,页面可以正常显示,但是当我提交数据的时候就会提示错误。我很困惑
<form action="/SubMessage" method="post">
				<label>输入发布内容</label>
				<textarea name="message" cols="26" rows="20"></textarea>
				<input name="goButton" type="submit" value="发布" />
			</form>
servlet代码如下:
package com.dedo.BBS.Servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dedo.BBS.Jdbc.JDBCOption;
import com.dedo.BBS.Jdbc.SQLConstant;
import com.dedo.BBS.Tool.Common;



/**
 * Servlet implementation class SubMessage
 */
public class SubMessage extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SubMessage() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
	
	protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
	{
		String message = request.getParameter("message");
		java.util.Date d = new java.util.Date();
		JDBCOption.update(SQLConstant.addmessage, 1,message,new Timestamp(d.getTime()));
		response.sendRedirect("index.jsp");
	}

}
冰心的小屋 2015-08-16
  • 打赏
  • 举报
回复
你把toString()去掉就可以了
hhhhhhh_____ 2015-08-16
  • 打赏
  • 举报
回复
原来是我数据库和代码写错了一个字母 希望自己以后可以吸取教训
hhhhhhh_____ 2015-08-16
  • 打赏
  • 举报
回复
引用 4 楼 libingxin 的回复:
你把toString()去掉就可以了
谢谢指教!之后我把数据声明改为了object,并且删除了tosting就解决了问题
Object info;
				Object dt;
				Object user;

				List <HashMap<String, Object>>messageList = JDBCOption.query(SQLConstant.getmessage);
				for (int i = 0; i < messageList.size(); i++) {
					HashMap hm = messageList.get(i);
		
					user = hm.get("author");
					info = hm.get("info");
					dt = hm.get("published");
					System.out.println(user);
					System.out.println(info);
					System.out.println(dt);
hhhhhhh_____ 2015-08-15
  • 打赏
  • 举报
回复
引用 1 楼 libingxin 的回复:
你的hashMap的value类型 为object hm.get("author") 有肯能为null 你可以用(String)hm.get("author")
我去试了一下

                                String info;
				String dt;
				String user;

				List <HashMap<String, Object>>messageList = JDBCOption.query(SQLConstant.getmessage);
				for (int i = 0; i < messageList.size(); i++) {
					HashMap hm = (HashMap) messageList.get(i);
					System.out.println(hm.get("info"));
					System.out.println(hm.get("published"));
					System.out.println(hm.get("auther"));
					
					user = (String)hm.get("author").toString();
					info = (String)hm.get("info").toString();
					dt = (String)hm.get("published").toString();
					System.out.println(user);
					System.out.println(info);
					System.out.println(dt);
前面那个println可以输出,说明数据库里面有数据的,但是为什么赋值之后却不能输出呢 nihao 2014-02-02 00:00:00.0 2 八月 15, 2015 11:29:50 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException at org.apache.jsp.index_jsp._jspService(index_jsp.java:109) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source)
冰心的小屋 2015-08-15
  • 打赏
  • 举报
回复
你的hashMap的value类型 为object hm.get("author") 有肯能为null 你可以用(String)hm.get("author")
有关struts2下载组件的具体介绍我就在此略过了,看此文的同志想必大多是碰到这样让人很是不爽的问题。 下面就将该问题的最终解决办法介绍如下。 问题概要: 在struts2中使用result里type="stream"的结果类型时,可以实现文件的下载管理,使用时也是比较顺畅,但是当在“下载提示窗口”中点击“取消按钮”时,总是报出“java.lang.IllegalStateException”异常,异常内容如下: 2011-1-8 20:34:20 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet default threw exception java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407) at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108) at com.opensymphony.module.sitemesh.filter.PageResponseWrapper.sendError(PageResponseWrapper.java:176) at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108) at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129) at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662) 网络解决办法: (虽然该办法可行,但是本人并不提倡。具体原因在之后解释。) 在网络中查询解决办法大多是使用异常处理的办法,其内容如下: /ignored.jsp <exception-mapping result="client-abort-exception" exception="org.apache.catalina.connector.ClientAbortException"/> targetFile filename="" 4096 也就是说,如果抛出了ClientAbortException异常,那就跳转到“ignored.jsp”这个页面,这个页面中什么内容都没有。 还有一种办法是在页面进行try..catch,之后什么都不做 异常原因分析: stream对应的类是org.apache.struts2.dispatcher.StreamResult,该类的处理过程如下: 1。配置其中result标签下的各个参数 2。从服务器中获取输入流,并同时与客户端建立输出流(服务器与客户端链接通过Socket进行连接) 3。当点击“保存”或“打开”时,开始传输数据。如果点击“取消”,关闭所有的流。 这里要注意的是,但是实际发现Socket并没有断开!并且流也没有关闭!这一点非常重要! 所以在JSP容器通过Response获取输出流之前,前面的流并没有关闭,所以会造成该异常的报出。 本文解决办法: 在前面所说的网络解决办法中,使用的是一种躲避的方式解决该问题,也就是置之不理。 这里提供一个办法可以从根本上解决该问题,但是需要下载插件,在附件中有下载,这个插件很小,才4KB而已。 《如果附件下载后文件损坏,可以到http://down.51cto.com/data/158982下载资源,不需要下载豆。》 具体做法如下: 1。将附件解压获取struts2-sunspoter-stream-1.0.jar,并复制在/WEB-INF/lib下 2。在原有的struts.xml的基础上进行相应的配置,配置如下例 text/plain attachment;filename="${downloadChineseFileName}" downloadFile 在这种方式下,只需添加一个result-type,将原有的result中type改为“streamx”,其他一律不变,在这种情况下,点击“取消”的同时也关闭了流,不会再报出该异常。 之后的执行“取消”后的结果如下:(配置了"log4j.properties"才能看到该结果) 21:23:44,676 WARN StreamResult:45 - StreamResultX Warn : socket write error 如果出现该警告说明正确执行,该警告说明,Socket非正常中断,但是流确实已经关闭,自此再也不用看到上面出现的讨厌异常结果。 转载至 http://sunspot.blog.51cto.com/372554/474983

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧