해결된 질문
작성
·
77
0
안녕하세요, 코드를 실행시켰을 때 JasperException 오류가 발생하여 문의드립니다.
구글링 했을 때는 jsp 파일이 java로 변환되고 class 생성하는 과정에서 오류가 난다고 합니다. 그래서 WAS에서 오류를 해결할 수 있다고 하는데, 윈도우즈 환경에서 WAS를 어떻게 접근할 수 있는지 모르겠습니다.
또한, WAS 말고도 다른 방법이 있는지 궁금합니다.
제 코드와 오류를 첨부하겠습니다.
감사합니다.
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.*;,
java.io.*;"
%>
<%
FileInputStream fis = null; <!-- fileInputStream은 1byte씩 부르게 됨 -->
BufferedInputStream bis = null; <!-- 그래서 버퍼드 클래스를 사용하면 버퍼를 이용해서 바이트스트림을 쌓아두고 효율적으로 관리 가능능-->
BufferedOutputStream bos = null;
String path = "C:\\Program Files\\Apache Software Foundation\\Tomcat 9.0\\webapps\\ROOT\\upload\\image\\";
String org_filename = request.getParameter("org_filename"); <!-- get 메소드를 받아오는 게 아님. 그냥 입력값을 받는 것.-->
String real_filename = request.getParameter("real_filename");
if(org_filename = null || real_filename = null) {
out.println("<script>alert('파일명이 입력되지 않았습니다.');history.back(-1)</script>");
return;
}
try {
File fd = new File(path + real_filename);
if(!fd.exists()) { <!-- 파일이 없으면 -->
out.println("<script>alert('파일이 존재하지 않았습니다.');history.back(-1)</script>");
return;
}
response.setHeader("Content-Type", "application/octect-stream"); <!-- 임의의 파일 -->
response.setHeader("Content-Disposition", "attachment; filename=" + org_filename); <!-- 다운받을 때 셋팅되는 파일 이름-->
<!-- 파일 -> Byte -> Buffer -> user -->
fis = new FileInputStream(fd); <!-- 파일 객체가 들어와도 ㄱㅊ-->
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(response.getOutputStream);
byte[] buffer = new byte[1024];
int i = 0;
<!-- bis에 있는 값을 buffer로 불러왔는데, 이제 옮길게 없다면 -1이 반환됨 -->
while((i=(bis.read(buffer))) != -1) {
bos.write(buffer, 0, i);
}
bos.flush();
} finally { <!-- 객체를 중지시키는 곳-->
if(fis != null) <!-- 객체 생성이 제대로 되었다면--> fis.close();
if(bis != null) bis.close();
if(bos != null) bos.close();
}
%>
오류
타입 예외 보고
메시지 org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.download1_jsp
설명 서버가, 해당 요청을 충족시키지 못하게 하는 예기치 않은 조건을 맞닥뜨렸습니다.
예외
org.apache.jasper.JasperException: org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.download1_jsp
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:589)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:425)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324)
javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
근본 원인 (root cause)
org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.download1_jsp
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:197)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:413)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324)
javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
근본 원인 (root cause)
java.lang.ClassNotFoundException: org.apache.jsp.download1_jsp
java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:129)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:58)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:192)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:413)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:376)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:324)
javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
비고 근본 원인(root cause)의 풀 스택 트레이스를, 서버 로그들에서 확인할 수 있습니다.
답변 2
0
문제 해결했습니다!
우선 몇 가지 구문 오류를 수정했고, 결과적으로는 <!-- -->를 사용한 주석이 문제였습니다.
주석을 사용하려면 <%-- --%>를 사용해야 합니다.
그 이유는, JSP -> java -> class로 변환되는 과정에서, <% ~~ %> 안에 있는 코드는 java로 해석됩니다. 근데 java에서는 html 주석과 다르게 //로 사용하기 때문에 오류를 발생합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
버럼님께서 겪고 계신 JasperException
오류는 JSP 파일이 Java로 변환되고, 그 결과 생성된 클래스 파일을 찾지 못할 때 발생하는 문제를 의미합니다. 이 문제의 근본 원인은 여러 가지가 있을 수 있지만, 다음과 같은 측면에서 해결책을 제안 드리겠습니다.
import
문에서 세미콜론 ;
이 여러 줄에 걸쳐 잘못 사용되었으며, if
문에서 =
는 값을 비교하는 것이 아닌, 할당 연산자입니다. 이를 ==
로 수정해야 합니다.수정된 부분:
<%@ page import="java.util.*, java.io.*" %>
if (org_filename == null || real_filename == null) {
out.println("<script>alert('파일명이 입력되지 않았습니다.');history.back(-1);</script>");
return;
}
web.xml
에서 JSP 서블릿이 올바르게 설정되었는지 확인해보세요. 기본적으로 자동 설정되어야 하지만, 사용자 설정이 변경된 경우 확인이 필요합니다.work
디렉터리에 위치하고 있습니다.logs
디렉터리에서 catalina.out
또는 localhost.log
파일을 확인하세요. 여기에는 오류의 더 많은 정보를 제공할 수 있는 추가 세부 사항이 기록됩니다.관련해서 더 구체적인 조언이 필요하시다면, JSP 파일을 찾을 수 없는 경우에 대한 기존 Q&A 게시물을 참고해 주세요. 가능한 유사한 환경에서 발생한 문제 해결 방안이 큰 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.