2016-09-15 10 views
0

비슷한 질문을 많이 읽고 문제를 해결하기 위해 제안 된 모든 방법을 시도했지만 성공하지 못했습니다. (: 8080/testWebApp/홈 로컬 호스트) : RequestDispatcher를 가져올 수 없습니다.

HTTP Status 500 - 
...  
exception 

java.lang.NullPointerException 
    test.web.servlet.TestServlet.doGet(TestServlet.java:37) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

내가 받는다는 3.3.9 및 7.0.70-1 tomcat7를 사용하는 지금은 정말이 함께 할 수있는 어떤 아이디어가 없습니다. web.xml의 코드 여기

package test.web.servlet; 


import java.io.IOException; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.ServletConfig; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletOutputStream; 


@WebServlet(urlPatterns = { "/home"}) 

public class TestServlet extends HttpServlet { 

    @Override  
    public void init(ServletConfig config) throws ServletException { 
     super.init(config); 
    } 

    public TestServlet() { 
     super(); 
    } 

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

     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/views/home.jsp"); 
     //The following attempts are unsuccessful too: 
     //RequestDispatcher dispatcher = request.getRequestDispatcher("/home.jsp"); 
     //RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/views/home.jsp"); 
     dispatcher.forward(request, response); // error (37 line) 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     doGet(request, response); 
    } 
} 

됩니다 :

<?xml version="1.0" encoding="ISO-8859-1"?> 

<!DOCTYPE web-app 
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_4.dtd"> 

<web-app> 

    <welcome-file-list> 
     <welcome-file>home</welcome-file> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

</web-app> 

home.jsp 코드 :

을 여기
webApp/ 
    pom.xml 
     src/ 
     main/ 
      java/ 
       test/web/servlet/ 
         TestServlet.java 
     webapp/ 
      index.html 
      WEB-INF/ 
       views/ 
        home.jsp 
       web.xml 

가 TestServlet 코드 : 내 프로젝트 디렉토리는 다음과 같은 계층 구조를 가지고
<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html>  
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Home Page</title> 
    </head> 

    <body>  
<%--   <jsp:include page="main.jsp"></jsp:include> --%> 

     <h3>Home</h3> 
     <br><br> 
     <b>You have the following options:</b> 
     <ul> 
      <li>Login</li> 
     </ul>  
    </body>  
</html> 

일부 유용한 줄은 pom.xm l :

<plugin> 
     <groupId>org.apache.tomcat.maven</groupId> 
     <artifactId>tomcat7-maven-plugin</artifactId> 
     <version>2.2</version> 
     <configuration> 
      <server>tomcat-7.0.70-1</server> 
      <url>http://localhost:8080/manager/text</url> 
      <path>/testWebApp</path> 
     </configuration> 
    </plugin> 

감사합니다.

+1

을 파견되어,이 [duplicate] (/ questions/218384/what-is-a-nullpoint 예고 - 어떻게 -해야합니까 - 고침 - 그것)입니다. 당신이 물어야하는 것은'RequestDispatcher'가 왜 null인지입니다. – EJP

+0

수정 해 주셔서 감사합니다! – user3856196

답변

2

응용 프로그램의 임의 파일에 대한 RequestDispatcher를 가져올 수 없습니다. getRequestDispatcher()에 대한 인수는 응용 프로그램에 유효한 URL 경로 여야하며 상대 파일 시스템 위치가 아니어야합니다. 이것이 dispatcher이 null 인 이유입니다.

JSP를 WEB-INF에 보관하려면 (좋은 생각입니다) 적절한 <servlet-mapping> 요소를 만들어야합니다.

0

서블릿 문서 (특히 매핑 주제)를 자세히 조사한 후에 web.xmlTestServlet.java을 약간 수정했습니다. It's important는 것을 :

웹-INF 디렉토리는 응용 프로그램의 공용 문서 트리의 일부가 아닙니다. WEB-INF 디렉토리에 포함 된 파일은 컨테이너에 의해 클라이언트에 직접 으로 제공 될 수 없습니다. 내 경우 views 폴더는 WEB-INF (외부에서 사용자 액세스 제한 용) 안에 있습니다.

... 
<servlet> 
    <servlet-name>home</servlet-name> 
    <jsp-file>/WEB-INF/views/home.jsp</jsp-file> 
    <init-param> 
     <param-name>home</param-name> 
     <param-value>Home Page</param-value> 
    </init-param> 
</servlet> 

<servlet-mapping> 
    <servlet-name>home</servlet-name> 
    <url-pattern>/homepg</url-pattern> 
</servlet-mapping> 
... 

을 그리고 TestServlet.java 수정 :

그래서, 다음 줄을 추가 (web.xml)가 필요 것

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/homepg"); 

P.S. 올바른 방향으로 가리키는 데 감사합니다. gsl!

+1

그래, 너! :-) 한 번 더 :'ServletContext.getNamedDispatcher (name)'살펴보기 : 서블릿 ** 이름 **에 기반한 디스패처를 제공합니다. 서블릿은 "home"이라는 이름으로 참조한다. 서블릿 매핑을 정의 할 필요가 없습니다. 서블릿 매핑은 URL 공간 항목을 실제로 만들지 않으므로 어쨌든 필요하지 않습니다. – gsl

0

요청을 /WEB-INF/views/home.jsp url로 보내지 만 WEB-INF/views 폴더에는 H ome.jsp가 있습니다.

그냥 H ome.jsp 시간 에 ome.jsp에서 파일 이름을 변경하고 다시 배포 할 응용 프로그램을, 그것을 잘 작동합니다.

Output

참고 : 그냥`NullPointerException`에 대해 질문하는 경우 당신은 유효한 경로 즉에 대한 요청, /WEB-INF/views/home.jsp

+0

흠, 내가 처음 시도한 오류가 발생했을 때 - 모든 경로를 확인하고있었습니다. 또한 내 경우에는 문제가 아니었고 view/home.jsp가 아니라 view/Home.jsp를 가졌습니다. 어쨌든, 답변 해 주셔서 감사합니다! – user3856196

+1

"Home.jsp code :" –

+0

죄송합니다. 줄의 시작 부분에 대문자와 같은 것이 있습니다. 그런 다음 실수로 보입니다. 나는 이것을 편집 할 것이다. 지금은 – user3856196

관련 문제