プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。初めて質問させていただきます。よろしくお願いします。

現在javaで作ったプログラムをjspでも使えるようにしようと考えているのですが、
二次元配列がうまくjspで反映されず困っています。
jspに関してはほとんど無知で一から勉強している次第です。
そのためなるべく簡単に、と思い
以下のプログラムを、<% %>の間に入れるだけで動かせないかと思ったのですが
エラーが出てしまいました。一次元の配列ならばできたのですが...

ちなみに以下のプログラムはcsvファイルを読み込み、
多次元配列に格納していくというものです。
稚拙なプログラムで申し訳ありません...

どなたかご教授いただければ幸いです。



import java.io.*;
import java.util.StringTokenizer;
import java.util.ArrayList;

class Dog{
 public static void main(String args[]) throws IOException{
     String csv = "dognum.csv";
     BufferedReader br = new BufferedReader(new FileReader(csv));

String[][] array = new String[100][];
int i = 0;
while (true) {
String line = br.readLine();
if(line==null) break;
array[i] = line.split(",");
i++;
}
for (i = 0; i < 101; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println("["+i+"]["+j+"] = " + array[i][j]);
}
}
}
}

A 回答 (1件)

こんにちは。



実際のところJavaとJSPはほとんど変わりませんよ。
ほとんど同じ記述でいけます。

エラーは何が出ているかが重要ですので質問する際はエラー内容を質問に含めたほうが良いです。


String[][] array = new String[100][]; で宣言しています。
しかしfor (i = 0; i < 101; i++) {
にて0~100のループを行なっていますが配列が100ですと0~99になります。

<% %>のなかに入れれば基本的には動きますが、import宣言等はちょっとちがいますのでご注意ください。

この回答への補足

何度も申し訳ありません。

String csv = "dognum.csv";
BufferedReader br = new BufferedReader(new FileReader(csv));

FileReader fr = new FileReader(application.getRealPath("dognum.csv"));
BufferedReader br = new BufferedReader(fr);

とし、指摘していただいたループの部分を訂正したところ
無事表示させるようになりました!

アドバイスとても参考になりました。
ありがとうございました。

補足日時:2012/02/05 22:13
    • good
    • 0
この回答へのお礼

返信ありがとうございます!
エラー内容も含めるべきでした。
エラーは以下のように出ています。
-------------------------
type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

org.apache.jasper.JasperException: Exception in JSP: /jspdir/test.jsp:9

6:
7: <%
8: String csv = "dognum.csv";
9: BufferedReader br = new BufferedReader(new FileReader(csv));
10:
11: String[][] array = new String[100][];
12: int i = 0;


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)


原因

java.io.FileNotFoundException: dognum.csv (指定されたファイルが見つかりません。)
java.io.FileInputStream.open(Native Method)
java.io.FileInputStream.<init>(Unknown Source)
java.io.FileInputStream.<init>(Unknown Source)
java.io.FileReader.<init>(Unknown Source)
org.apache.jsp.jspdir.test_jsp._jspService(test_jsp.java:53)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

java自体はコンパイルできるのですが...
JSPは以下のように記述しています。
import宣言はこのようにして大丈夫でしょうか?

<%@page contentType="text/html; charset=Shift_JIS" pageEncoding="Shift_JIS"%>
<%@page import="java.io.*,java.util.*,java.util.ArrayList" %>
<html>
<head><title>test</title></head>
<body>
<%
String csv = "dognum.csv";
BufferedReader br = new BufferedReader(new FileReader(csv));

String[][] array = new String[100][];
int i = 0;
while (true) {
String line = br.readLine();
if(line==null) break;
array[i] = line.split(",");
i++;
}

for (i = 0; i < 100; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println("["+i+"]["+j+"] = " + array[i][j]);
}
}

%>
</table>
</body>
</html>

お礼日時:2012/02/05 21:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!