자바 클레스 파일 로드 에러

cdral의 이미지

자바 .class 파일을 불러올수 없는 에러가 출력되고있는데요
사용자가 자바파일을 공개하지 않아 확인은 안되지만 클래스파일 경로가 정상적으로 설정되어 있다고 합니다.

아래는 에러메세지 입니다. 새로고침할때마다 아래 두개 에러가 번갈아 출력됩니다.

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 6 in the generated java file
Only a type can be imported. notice.BoardDBBean resolves to a package

An error occurred at line: 7 in the generated java file
Only a type can be imported. notice.BoardDataBean resolves to a package
---------------------------------------------------------------------
exception

org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:156)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:630)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:144)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
java.net.URLClassLoader$1.run(URLClassLoader.java:202)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:134)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:628)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:144)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:329)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
--------------------------------------------------------------------

/usr/local/tomcat 에 톰캣이 작동중이며 톰켓(6.0)과 자바(1.6)의 패스는 생략하겠습니다.
profile 에서의 클래스패스는 export CLASSPATH=.:/home/test/html/WEB-INF/classes:=.:/home/test/html/WEB-INF/lib

server.xml에서는
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
www.test.com

사용자의 클래스파일 경로는 /home/test/html/WEB-INF/classes 입니다.

음 톰켓설정에 문제가 있는것인가요? 클래스패스에 문제가 있는것인가요? 로컬pc에서는 정상적으로 홈페이지가
출력이 된다고 하는데 서버에 업로드만하면 클래스 파일을 로드할수 없다고 에러가 출력됩니다.

조언좀 부탁드립니다.

cdral의 이미지

내용을 아래와같습니다. < > 는 삭제했습니다.
Host name="test.com" appBase="/home/test/html"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"
Alias www.test.com /Alias
Context path="" docBase="" debug="0" reloadable="true"

liame의 이미지

로그 상으로 보면, jsp는 찾은 모양이네요.

org.apache.jasper.JasperException: Unable to compile class for JSP:

구문을 보면 컴파일이 제대로 안되 모양인데, local에서는 제대로 됐다고 하셨으니 jsp문제는 아닐테고

참조하는 클래스들이 정상적인지 확인해 보세요.( Class.forName 하는 jsp를 하나 만들어서 하나씩 점검해 보세요. )

dormael의 이미지

Only a type can be imported. notice.BoardDBBean resolves to a package

패키지를 임포트 했다는 메시지 같은데 어떻게 임포트 했는지 jsp의 일부를 올려주시면...

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

cdral의 이미지

지금은 클래스파일명도 수정해보고 다해봣지만 마찬가지로 에러뜨네여
org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 6 in the generated java file
Only a type can be imported. dr.NoticeDBBean resolves to a package

An error occurred at line: 7 in the generated java file
Only a type can be imported. dr.NoticeDataBean resolves to a package

An error occurred at line: 24 in the jsp file: /notice/list.jsp
NoticeDBBean cannot be resolved to a type
-------------------------------------
import 소스 일부입니다. (< % >생략)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="dr.NoticeDBBean" %>
<%@ page import="dr.NoticeDataBean" %>
<%@ page import="java.util.List" %>
<%@ page import="java.text.SimpleDateFormat" %>

<%!int pageSize = 10;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");%>

<%
String pageNum = request.getParameter("pageNum");
if(pageNum == null){
pageNum = "1";
}

int currentPage = Integer.parseInt(pageNum);
int startRow = (currentPage - 1)*pageSize + 1;
int endRow = currentPage*pageSize;
int count = 0;
int number = 0;

List articleList = null;
NoticeDBBean dbPro = NoticeDBBean.getInstance();
count = dbPro.getArticleCount();
if(count>0){
articleList = dbPro.getArticles(startRow, pageSize);
}

number = count-(currentPage-1)*pageSize;
%>
----------------------------
사용자 클래스파일 경로
/home/test/html/WEB-INF/classes/dr/NoticeDBBean.class
/home/test/html/WEB-INF/classes/dr/NoticeDataBean.class
---------------------------
클래스 패스입니다.
export JAVA_HOME="/usr/local/java"
export CATALINA_HOME="/usr/local/tomcat"
export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib/tools.jar
CLASSPATH=$CLASSPATH:$JAVA_HOME/jre/lib/rt.jar
CLASSPATH=$CLASSPATH:$JAVA_HOME/jre/lib/ext
CLASSPATH=$CLASSPATH:$CATALINA_HOME/lib/jsp-api.jar
CLASSPATH=$CLASSPATH:$CATALINA_HOME/lib/servlet-api.jar
CLASSPATH=$CLASSPATH:/home/test/html/WEB-INF/classes
CLASSPATH=$CLASSPATH:/home/test/html/WEB-INF/lib
export CLASSPATH
---------------------------

아 이거 서버쪽 문제인거 같기도하고,,, 사용자 얘기로는 경로 정상적으로 컴파일했다고햇는데
제가 자바를 모르기때문에 확인은 힘들구여 서버쪽에서 클래스파일 경로를 인식못한다면
profile 설정말고도 어디를 봐야할까요

dormael의 이미지

/home/test/html/WEB-INF/classes 이외의 클래스패스 어딘가에 패키지(디렉토리)로 정의된 곳이 있는것 아닌가요?

위의 클래스패스도 있고 톰캣의 자체 클래스패스도 찾아보셔야 할 것 같습니다.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

cdral의 이미지

그말씀은 사용자 클래스패스인 /home/test/html/WEB-INF/classes 이외에
다른 클래스패스에서 /dr/class파일 이 먼저 로드되었다는 뜻인가요?

음 근데 profile 파일에서 클래스패스를 설정할때 리플에 달린 그게 전부에요
그럼 톰켓자체 클래스에서 /dr 패키지를 쓰고있단느 말씀인가요?

아 잘 이해를 못하겟어요.

네이트 원격이라도 가능합니다. 잠시 봐주실수 있을까요?

dormael의 이미지

죄송합니다.
회사에서 메신저가 금지되어 있어서요.

톰캣 프로젝트 자체가 쓰는 패키지는 아닐것 같습니다.
제가 말씀드리려고 한건 톰캣자체의 클래스로더에서 지정된(shared나 lib내의 jar같은) 클래스패스를 의미했습니다.

그리고 웹에서 잠깐 찾아보니 classes에 jar파일을 넣어놓은 경우에도 저런 메시지가 나올 수 있다고 하네요.
물론 cdral님과 같은 상황인지는 장담할 수 없습니다.

http://dev.eclipse.org/newslists/news.eclipse.webtools/msg12698.html

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.

-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.