- PR -

Excelデータを読み込むWebアプリケーション

1
投稿者投稿内容
lsls
会議室デビュー日: 2005/10/20
投稿数: 3
投稿日時: 2005-10-30 22:02
初めての書き込みですが、どうぞ宜しくお願いいたします。

Eclipseで、Excelデータを読みこんでブラウザで表示するWebアプリケーションを作っているのですが、
「java.lang.NullPointerException」というエラー表示が出て、成功しません。
Eclipseやサーバの設定がうまくいっていないのか、それぞれのバージョンの相性の問題なのか、
それともプログラムが原因なのか、判断がつかない状況で
ぜひアドバイスをいただきたいと思っております。

なお開発にはLombozを使い、外部JARとしてPOIを設定しています。

ある本に、Lomboz3.0.1とTomcat5.0.28以降の組み合わせで、Eclipseから起動すると
上記のエラーが発生して正しく起動しない、と書かれておりましたので
その本に書かれていた対処法を試したり、あるいはLombozやTomcatのバージョンをいろいろ
変えて試したりしましたが、状況は変わりませんでした。

あるいは、Eclipseの「ウインドウ」→「設定」の「Lomboz」→「ServerDefinitions」の
「Servertypes」を、“apache Tomcat v5.0.x”に変更しても
次に開くと“JBOSS v2.4.4”に戻ってしまっているのですが、この辺は影響しているのでしょうか?

試しに、Eclipse(やLomboz)を使わず、POIを利用したJSPプログラムを直接打って
実行したところ、エラーもなくExcelデータを読み込んで表示できました。
また、Eclipse+Lombozで、現在時刻を表示するようなプログラムでは
エラーもなく正常に表示できました。

今まで試した環境は
Eclipse:3.0.1, 3.1.1
Lomboz:3.0.1, 3.1RC2
Tomcat:5.0.27, 5.0.28, 5.5.9
などです。

よろしければ考えられる原因等のアドバイスをお教え下さい。
必要でしたら、プログラムや構成等も明記させていただきます。
どうぞ宜しくお願いいたします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-30 22:11
コード:
「java.lang.NullPointerException」というエラー表示


どのようなコード・どのような操作によって
上記例外が発生するのでしょうか?
また、例外時のスタックトレースを添付された方が
適切な回答が得られるのではと思います。
lsls
会議室デビュー日: 2005/10/20
投稿数: 3
投稿日時: 2005-10-31 10:35
ご返答いただき、ありがとうございました!

長くなってすみませんが、状況としましては

*** EXDATA.java ***

package packs;

import java.io.IOException;
import java.io.FileInputStream;
import java.io.PrintWriter;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

public class EXDATA extends HttpServlet {

public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
//TODO Method stub generated by Lomboz
PrintWriter out = response.getWriter();
FileInputStream in = new FileInputStream("/simple.xls");
String path = getServletContext().getRealPath("/simple.xls");
java.io.InputStream is = new java.io.FileInputStream(path);
POIFSFileSystem fs = new POIFSFileSystem(is);
is.close();
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow((short)0);
HSSFCell cell = row.getCell((short)0);
out.println(cell.getStringCellValue());
/* JSPへ */
request.setAttribute("cell", cell);
getServletConfig()
.getServletContext()
.getRequestDispatcher("/output.jsp")
.forward(request, response);
}
}


*** output.jsp ***

<%@ page language="java" pageEncoding="Windows-31J" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">

<%
/* サーブレットからの値を取得 */
String cell = request.getAttribute("cell").toString();
%>

<% out.println (cell); %>

</body>
</html>

として、Deploy時にエラーはありませんが、ブラウザでoutput.jspを確認するとエラー表示が出ます。
Tomcat5.5.9のログには

致命的: サーブレット jsp のServlet.service()が例外を投げました
java.lang.NullPointerException
at org.apache.jsp.output_jsp._jspService(org.apache.jsp.output_jsp:52)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)

と書かれています。

長くなってすみませんが、おかしな箇所がございましたらぜひご指摘下さい。
どうぞ宜しくお願いいたします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-10-31 12:15
引用:

として、Deploy時にエラーはありませんが、ブラウザでoutput.jspを確認するとエラー表示が出ます。


もしかして、ブラウザのアドレスバーに入力したのは
「output.jsp」ですか?

引用:

コード:
<% 
/* サーブレットからの値を取得 */ 
String cell = request.getAttribute("cell").toString(); 
%> 




JSPに対して直接アクセスすると、getAttributeの戻り値がnullになるはずです。
なので、nullに対してtoStringメソッドを実行する事により
NullPointerExceptionが発生していると考えられます。

また、スタックトレースを見ると、
引用:

at org.apache.jsp.output_jsp._jspService(org.apache.jsp.output_jsp:52)


とありますが、コンパイル済みのJSPのソースが
org.apache.jsp.output_jsp.javaとなっています。
52行目のステートメントを見れば、何を実行して例外が発生しているかを確認できます。
lsls
会議室デビュー日: 2005/10/20
投稿数: 3
投稿日時: 2005-10-31 13:23
アドバイスいただき、ありがとうございます!
ご指摘いただいた部分を研究してみます。
成功しましたら報告させていただきます。
1

スキルアップ/キャリアアップ(JOB@IT)