servlets - 无法获得 RequestDispatcher

标签 servlets tomcat7 requestdispatcher

我已经阅读了很多类似的问题并尝试了所有建议的方法来解决问题,但是没有成功。现在我真的不知道如何处理这个 (localhost:8080/testWebApp/home):

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)

我使用 maven 3.3.9 和 tomcat7 7.0.70-1。我的项目目录具有以下层次结构:

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

这是 TestServlet 代码:

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);
    }
}

这是 web.xml 代码:

<?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代码:

<%@ 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.xml 中一些有用的行:

    <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> 

谢谢你的帮助!

最佳答案

您无法为应用程序中的任意文件获取 RequestDispatcher。 getRequestDispatcher() 的参数必须是应用程序的有效 URL 路径,而不是相对文件系统位置。这就是为什么 dispatcher为空。

如果您想让 JSP 驻留在 WEB-INF 下(这是个好主意),那么您必须创建适当的 <servlet-mapping>他们的元素。

关于servlets - 无法获得 RequestDispatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39510952/

相关文章:

java - 在jsp中显示数据

servlets - 如何在Grails中以字符串形式获取真实路径

java - 如何在java应用程序运行时更新css文件

tomcat - 禁用 Tomcat7 管理器

java - ClassNotFoundException : com. ibm.mq.jms.MQConnectionFactory(Websphere MQ 7.5 + spring jms + maven tomcat 7 插件)

java - 在apache tomcat中使用文件上传控件上传多个文件

java - 向简单的 Maven 项目添加样式

java - 对已部署的 servlet 应用程序进行性能测试?

java - ServletContext#getRequestDispatcher() 添加了额外的斜杠,导致云服务器上出现 "Requested URI does not match Resource path pattern"错误

java - RequestDispatcher 是否可以在一个 servlet 容器中的多个 Web 应用程序上工作?