2016-09-05 4 views
-1

아래 경로에서 jar를 스트림으로 가져 오려고하지만 항상 null 포인터 오류가 발생합니다. 다음은 ServletContext getResourceAsStream이 null을 반환합니다.

내가 아래에 위치

C:\Users\jacksons5\workspace\BeerApp\WebContent\WEB-INF\jar 
SEVERE: Servlet.service() for servlet BeerServlet threw exception 
java.lang.NullPointerException 
    at com.beer.controller.BeerServlet.doPost(BeerServlet.java:87) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:643) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:745) 
,691에서 jar 파일을 넣어 가지고

아래에 오류가

response.setContentType("application/jar"); 

ServletContext ctx = getServletContext(); 

InputStream is = null; 

try { 
    ctx.getRealPath("/WEB-INF/jar/teamspace.jar"); 
    is = ctx.getResourceAsStream("/WEB-INF/jar/teamspace.jar"); 
    ///WEB-INF/pdf/order.pdf 
}catch(Exception e){ 

    e.printStackTrace(); 

} 
if(is==null){ 
    System.err.println("it is null"); 
} 

내 서블릿 코드입니다

안녕 Stdunbar,

나는 해결책에서 연결을 시도했다, 그러나 작동하지 않는다, 아직도 동일한 과실을 보여준다.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 


//response.setContentType("text/html"); 

    System.out.println("It reached the server"); 

    //PrintWriter out = response.getWriter(); 

    String c = request.getParameter("color"); 


    response.setContentType("application/jar"); 

    ServletContext ctx = getServletContext(); 

    InputStream is = null; 

    try { 
     //ctx.getRealPath("/WEB-INF/jar/teamspace.jar"); 
    is = ctx.getResourceAsStream("/WEB-INF/teamspace.jar"); 
// InputStream inStream = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml"); 

    // is = class.getClass().getClassLoader().getResourceAsStream("Web-INF/web.xml"); 
    ///WEB-INF/pdf/order.pdf 
    }catch(Exception e){ 

     e.printStackTrace(); 

    } 

이 코드를 실행할 때 여전히 동일한 오류가 발생합니다 !!!

+0

너무 어렵습니다. [이 답변] (http://stackoverflow.com/questions/1108434/howto-load-a-resource-from-web-inf-directory-of-a-web 참조) 아카이브). – stdunbar

+0

HI Stdunbar는 나는,이 링크에서 제공하는 솔루션을 시도한 후 불행하게도, 내가 편집 한 내 원래의 게시물을 작동 당신이 보는 것이 당신이 쓴이 – Jackson2489

+0

를 해결 도와주세요 않았다 제공된 링크를 시도 '/ WEB-INF/jar/teamspace.jar'에 액세스하십시오. @stdunbar에 응답하여 당신은'/ WEB-INF/teamspace.jar'를 썼습니다. 정말? – JimHawkins

답변

0

환경에서 어떤 일이 벌어지고 있는지 잘 모르겠습니다. 코드가 좋게 보입니다. 나는 대부분의 코드를 취해서 당신이하려는 방식으로 제공하는 간단한 webapp 예제를 만들었다. 나는 Tomcat 8.0.x와 8.5.x에서 그것을 검증했다. 그것은 Maven을 사용하지만 필요에 따라 당신을 얻을 수 있기를 바랍니다. here으로 저장됩니다. 소스 만 제공되며 크기는 약 6K이며 검색을위한 샘플 병이 포함되어 있습니다. 다시 말하지만 코드는 정확하지만 다른 코드는 작동하지 않아야합니다.

처음에는 디버깅을 좀더 쉽게하기 위해 doPost를 doGet으로 변경하여 브라우저에서 테스트 할 수 있습니다.

0

실제로 이전 게시물을 기반으로 두 코드로 시도했습니다. 하나는 web-inf에 넣고 다른 하나는 jar 폴더에 넣음으로써 시도했습니다. 그러나 둘 다 작동하지 않았습니다. 샘플 코드를 제공하기위한

정말 감사합니다

안녕 Stunbar은 내 작업 공간에서 그것을 시도. 코드를 실행하면 브라우저에서 파일 다운로드를 요청하지만 실제로 0KB 파일을 다운로드합니다.

입력 스트림이 여전히 null을 반환한다는 것을 의미합니다.

그렇지에 어떤 오류가 표시되면 jar 파일을 다운로드하라는 팝업 뒤에 이유는 내가 브라우저에서 볼 얻을 변경 시도 코드에도

response.setHeader("Content-Disposition", "filename=\"aws-java-sdk-1.11.21.jar\""); 

라인 아래입니다 개발자 도구에서 오류가 표시되지 않습니다.

그냥 문제없이 빈 파일을 다운로드 중입니다. 코드에서 SYSOUT에서

package com.beer.controller; 

import java.io.IOException; 
import java.io.InputStream; 

import javax.servlet.ServletContext; 
import javax.servlet.ServletException; 
//import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 


//@WebServlet(urlPatterns="/mmmmbeer") 
public class BeerServlet extends HttpServlet { 



    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     System.out.println("It reached the server"); 

     response.setContentType("application/jar"); 

     ServletContext ctx = getServletContext(); 

     try (InputStream inputStream = ctx.getResourceAsStream("/WEB-INF/jar/aws-java-sdk-1.11.21.jar")) { 

      System.out.println("input stream is " + (inputStream == null ? "null" : "not null")); 

      response.setHeader("Content-Disposition", "filename=\"aws-java-sdk-1.11.21.jar\""); 

      byte[] buffer = new byte[1024]; 

      for (int length = 0; (length = inputStream.read(buffer)) > 0;) { 
       response.getOutputStream().write(buffer, 0, length); 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 








} 

, 내가 콘솔에서 널 (null)로 입력 스트림을 볼 수 있습니다.

저는 tomcat V6.0과 Windows 8을 사용하고 있습니다.

내 로컬 작업 공간이

C:\Users\jacksons5\workspace\BeerApp 

에서 유지 나는 또한 확실하지 문제가 무엇인지,

enter link description here

알려 주시기 바랍니다 아래 내 작업 공간을 첨부!

관련 문제