我已经阅读了很多类似的问题,并尝试了所有建议的方法来解决这个问题,但都没有成功。现在我真的不知道如何处理这个(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> 感谢您的帮助!
发布于 2016-09-15 21:38:38
您不能为应用程序中的任意文件获取RequestDispatcher。getRequestDispatcher()的参数必须是应用程序的有效URL路径,而不是相对文件系统位置。这就是dispatcher为空的原因。
如果您想让JSP驻留在WEB-INF下(这是个好主意),那么必须为它们创建适当的<servlet-mapping>元素。
发布于 2016-09-16 08:35:47
在深入研究servlet文档(特别是映射主题)之后,我对web.xml和TestServlet.java进行了一些修改。It's important表示:
WEB-INF目录不是应用程序公共文档树的一部分。容器不能将WEB-INF目录中包含的任何文件直接提供给客户端。在我的例子中,
views文件夹位于WEB-INF内部(用于从外部访问用户的限制)。
因此,需要添加以下行(web.xml):
...
<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
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/homepg");另外,感谢gsl为我们指明了正确的方向!
发布于 2016-09-16 13:36:01
您正在将请求分派到/ WEB-INF/views /home.jsp url,但是在WEB-INF/views文件夹中有Home.jsp。
只需将文件名从Home.jsp更改为home.jsp并重新部署应用程序,它应该可以正常工作。

注意:您正在将请求分派到有效路径,即/WEB-INF/views/home.jsp
https://stackoverflow.com/questions/39510952
复制相似问题