Servlets 无法获取RequestDispatcher
我读过很多类似的问题,并尝试过所有建议的解决问题的方法,但都没有成功。现在我真的不知道该怎么办(localhost:8080/testWebApp/home): 我使用maven 3.3.9和tomcat7.0.70-1。我的项目目录具有以下层次结构:Servlets 无法获取RequestDispatcher,servlets,tomcat7,requestdispatcher,Servlets,Tomcat7,Requestdispatcher,我读过很多类似的问题,并尝试过所有建议的解决问题的方法,但都没有成功。现在我真的不知道该怎么办(localhost:8080/testWebApp/home): 我使用maven 3.3.9和tomcat7.0.70-1。我的项目目录具有以下层次结构: webApp/ pom.xml src/ main/ java/ test/web/servlet/ Tes
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>
家
index.html
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>
org.apache.tomcat.maven
tomcat7 maven插件
2.2
tomcat-7.0.70-1
http://localhost:8080/manager/text
/testWebApp
谢谢你的帮助 您无法为应用程序中的任意文件获取RequestDispatcher。getRequestDispatcher()的参数必须是应用程序的有效URL路径,而不是相对文件系统位置。这就是
调度程序为空的原因
如果您想让JSP驻留在WEB-INF下(这是个好主意),那么您必须为它们创建适当的
元素。在深入研究servlet文档(特别是映射主题)之后,我对WEB.xml
和TestServlet.java
做了一些修改。即:
WEB-INF目录不是的公共文档树的一部分
应用无法提供WEB-INF目录中包含的任何文件
通过容器直接发送到客户端。
在我的例子中,views
文件夹位于WEB-INF
(用于限制用户从外部访问)
因此,需要添加以下行(web.xml
):
附言。
感谢您指出正确的方向 您正在将请求发送到/WEB-INF/views/home.jsp url,但在WEB-INF/views文件夹中,您有Home.jsp
只需将文件名从Home.jsp更改为Home.jsp,然后重新部署应用程序,就可以了
注意:您正在将请求发送到一个有效路径,即/WEB-INF/views/home.jsp如果您只是询问NullPointerException
,这是一个错误。您应该问的是为什么RequestDispatcher
为空。感谢您的更正!是的,谢谢!:-)还有一个:看一下ServletContext.getNamedDispatcher(name)
:这一个基于servlet名称给出了一个调度器。通过引用servlet的名称“home”获得servlet;然后就不需要定义servlet映射了,反正也不需要,因为您并不真的想为它创建URL空间条目。嗯,当我遇到错误时,我尝试的第一件事就是检查所有路径。同样在我的例子中,这不是问题所在,我有views/home.jsp,而不是views/home.jsp。无论如何,谢谢你的回答!对不起,这有点像一行开头的大写字母,然后看起来真的是个错误。我会编辑这个。
<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>
...
<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>
...
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/homepg");