2014-03-25 4 views
6

서블릿 또는 일반 Java 파일에서 예외가 발생하면 printstacktrace 메소드를 사용하여 줄 번호 (해당 파일에서 예외가 발생한 위치)를 얻을 수 있습니다. jsp 페이지에서 예외가 발생하면 줄 번호를 얻는 방법

하지만 JSP에

는 심지어 printStackTrace에 사용하여 예외 라인 번호를 얻을 수 없었다 서블릿으로 변환되는 바와 같이 어떤 방법 JSP 파일 의 (예외가 발생) 행 번호을 거기 method.is 예외가 발생하면.

예외가 실제로 행 번호 20에서 무슨 일이 일어나고하지만 난 그것을 실행할 때 예외를 보여주는 여기

Line Number: 
17:  <% 
18:   try { 
19:    int a[] = new int[1]; 
20:    System.out.println(a[3]); 
21:   } catch (Exception e) { 
22:    e.printStackTrace(); 
23:   } 
24:  %> 

내 JSP 파일 내가 심지어 내 파일이없는 줄 번호 77에 있습니다.

SEVERE: java.lang.ArrayIndexOutOfBoundsException: 3 
at org.apache.jsp.index_jsp._jspService(index_jsp.java:77) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:253) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:428) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
at java.lang.Thread.run(Thread.java:744) 

내가 그냥 (예외가 발생했다) (20)로 인해에서 77 insted 않음으로 선을 인쇄하려면 (77) 대신 20.but의대로 행 번호를 보여주는 서블릿 JSP로 변환됨에 큰 파일은 내가 어려운 예외가

+0

이클립스를 사용하고 있지 않습니까? –

+0

netbeans.but를 사용하면 index.jsp.java의 ** line : 28과 같은 예외가 ** 표시된 jsp 파일의 행 번호 번호 만 표시됩니다. – Prakash

+0

그것은 행 28을 보여줍니다. –

답변

7

모든 JSP는 당신이 생성 된 서블릿 코드를 찾아한다는 뜻 런타임에 서블릿으로 변환됩니다

JSP는 만 최소한이 포함되어 있습니다. Tomcat에서는 work/ 폴더에 있지만 서블릿 컨테이너의 폴더에서 index.jsp.java 파일을 검색하십시오.

+0

글래스 피쉬에 대해 어떤 생각이든 .. – Prakash

+0

서블릿 컨테이너 폴더에서 해당 파일을 수동으로 검색합니다. 너 할 수있어, 그렇지? –

+0

네, 고마워요. 그 파일이 '** glassfish-4.0 \ glassfish \ domains \ domain1 \ generated \ jsp \ Struts2Sample \ org \ apache \ jsp \ index_jsp.java **' Andrei I – Prakash

0

을 무슨 일이 벌어지고 있었다 그 자신에 찾아 볼 수있다이 대답은 실제로 구체적으로 JSP를 디버깅하는 방법에 대해 설명합니다 JSP debugging in IntelliJ IDEA

1

이 및 기타 문제가 나에게로 JSP 페이지에 자바 코드를 절감했다 절대 최소. 나는 자바 코드의 고기를 포함하고있는 JSP 페이지에서해야 할 모든 일을 위해 도우미 객체를 만든다. (이는 내가이 코드를 단위 테스트 할 수 있음을 의미한다.)

<%Helper tool = new Helper();%> 

<%=tool.foo()%> 
+0

클래스에서 별도의 메서드를 만들고 jsp에서 해당 메서드를 호출한다는 의미였습니까? – Prakash

+0

예. 나는 (거의) JSP에 인라인 Java 코드가 없다. –

+0

소리가 좋은데. 그러나 유일한 방법입니까 ??? – Prakash

1

때때로 JSP 파일의 소스 행의 오프셋을 계산하는 것이 유용합니다. 예 : 오프셋이 변경되기 때문에 각 블록이나 JSP 주석 다음에이 블록을 배치해야합니다.

관련 문제