Learning site for website creation

Tomcatエラーメッセージ(変数編)

公開日:2011年04月14日 更新日:2022年03月04日

エラー内容

Duplicate local variable 変数名

同じ名前の変数を重複して宣言しているために起きるエラー

変数名 cannot be resolved

宣言されていない変数を使用したために起きるエラー

The local variable 変数名 may not have been initialized

初期化されていない変数を使用したために起きるエラー

Duplicate local variable 変数名

「Duplicate local variable 変数名」は同じ名前の変数を重複して宣言しているために起きるエラーです。

サンプル

<%@ page contentType="text/html; charset=Windows-31J"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>JSPサンプル</title>
<meta http-equiv="content-type" content="text/html; charset=Windows-31J">
</head>
<body>
<p>
<%
int i = 10;
int i = 20;	//エラー発生
%>
<%=i%>
</p>
</body>
</html>

上記のjspファイルを実行すると下記のエラーが表示されます。

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません

JSPファイル: /Test1.jsp の中の11行目でエラーが発生しました
生成されたサーブレットのエラーです:
Duplicate local variable i

12行目で変数iを宣言したのに、13行目でも同じ名前iで宣言しているため起きたエラーです。
javaでは同じ名前の変数を複数宣言することはできません。

※「11行目でエラーが発生しました」とあるが実際にエラーが起きているのは13行目です。
JSPの場合、エラーが含まれる<% %>開始タグの行番号が表示されるので注意が必要です。

対処法1

<%@ page contentType="text/html; charset=Windows-31J"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>JSPサンプル</title>
<meta http-equiv="content-type" content="text/html; charset=Windows-31J">
</head>
<body>
<p>
<%
int i = 10;
i = 20; //12行目で宣言されたiを使う
%>
<%=i%>
</p>
</body>
</html>

対処法1の表示結果

20

対処法2

<%@ page contentType="text/html; charset=Windows-31J"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>JSPサンプル</title>
<meta http-equiv="content-type" content="text/html; charset=Windows-31J">
</head>
<body>
<p>
<%
int i = 10;
int j = 20; //iは12行目で宣言されてるので別名jで変数を宣言した
%>
<%=i%>
</p>
</body>
</html>

対処法2の表示結果

10

変数名 cannot be resolved

「変数名 cannot be resolved」は宣言されていない変数を使用したために起きるエラーです。

サンプル

<%@ page contentType="text/html; charset=Windows-31J"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>JSPサンプル</title>
<meta http-equiv="content-type" content="text/html; charset=Windows-31J">
</head>
<body>
<p>
<%
int i = 10;
%>
<%=j%>
</p>
</body>
</html>

上記のjspファイルを実行すると下記のエラーが表示されます。

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません

JSPファイル: /Test2.jsp の中の14行目でエラーが発生しました
生成されたサーブレットのエラーです:
j cannot be resolved

14行目で宣言されていない変数jを表示しようとしたため起きたエラーです。

対処法

<%@ page contentType="text/html; charset=Windows-31J"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>JSPサンプル</title>
<meta http-equiv="content-type" content="text/html; charset=Windows-31J">
</head>
<body>
<p>
<%
int i = 10;
int j = 20; //変数jを使う前に宣言・初期化する
%>
<%=j%>
</p>
</body>
</html>

対処法の表示結果

20

The local variable 変数名 may not have been initialized

「The local variable 変数名 may not have been initialized」は初期化されていない変数を使用したために起きるエラーです。

サンプル

<%@ page contentType="text/html; charset=Windows-31J"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>JSPサンプル</title>
<meta http-equiv="content-type" content="text/html; charset=Windows-31J">
</head>
<body>
<p>
<%
int j;
%>
<%=j%>
</p>
</body>
</html>

上記のjspファイルを実行すると下記のエラーが表示されます。

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません

JSPファイル: /Test1.jsp の中の14行目でエラーが発生しました
生成されたサーブレットのエラーです:
The local variable j may not have been initialized

14行目で初期化されていない変数jを表示しようとしたため起きたエラーです。

対処法

<%@ page contentType="text/html; charset=Windows-31J"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
	 "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>JSPサンプル</title>
<meta http-equiv="content-type" content="text/html; charset=Windows-31J">
</head>
<body>
<p>
<%
int j = 20; //変数jに値をいれて初期化する
%>
<%=j%>
</p>
</body>
</html>

対処法の表示結果

20