gpt4 book ai didi

servlets - 无法获得 RequestDispatcher

转载 作者:行者123 更新时间:2023-12-05 04:12:48 25 4
gpt4 key购买 nike

我已经阅读了很多类似的问题并尝试了所有建议的方法来解决问题,但是没有成功。现在我真的不知道如何处理这个 (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/

25 4 0
文章推荐: sql - 创建单个或多个 SQL 连接以多次执行相同的查询更好吗?
文章推荐: assembly - MIPS计算跳转指令的机器编码
文章推荐: firefox - 在 FireFox/Mozilla 中为