JSP 问题的 Servlet
Servlet to JSP issue
我是 web 开发的新手,正在开发一个将使用 servlet 和 JSPs 的 web 应用程序,我创建了我的 servlet 和 JSP,但我很难获得servlet 将请求转发给 JSP。
在我的 main
页面中,有一个 <form>
使用 get
方法并且该操作指向我的 servlet (SelectSupportUnit.do
):
<form method="get" action="SelectSupportUnit.do">
在我的 servlet 中,它将我的 JDBC 查询的结果转发给 JSP:
request.setAttribute("suppUnitList", suppUnitList);
RequestDispatcher view = request.getRequestDispatcher("QueryResults.jsp");
view.forward(request, response);
并且在我的 web.xml 文件中它声明了 JSP(这是 Head First Servlets 和 JSP 书中在转发来自您的 servlet 的请求时所说的内容JSP):
<servlet>
<servlet-name>SelectSupportUnit</servlet-name>
<jsp-file>/QueryResults.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SelectSupportUnit</servlet-name>
<url-pattern>/QueryResults.jsp</url-pattern>
</servlet-mapping>
当我 运行 这个(使用 Eclipse IDE 和 Tomcat v7 容器)时,它给了我 HTTP status 404
。并说它找不到我的 servlet (SelectSupportUnit.do
)。
这会使它看起来好像在调用 servlet 的 <form>
元素中,您应该调用 JSP,但如果我这样做,它不会绕过 servlet 吗?
我的 form
看起来像这样:
我的元素现在看起来像这样:
<form target="_blank" method="get" action="${PageContext.request.contextPath}/SelectSupportUnit">
您必须在表单中提及 servlet 的名称
<form method="get" action="SelectSupportUnit">
然后会转到Servlet的doGet()
方法。您不需要在表单操作中添加 SelectSupportUnit.do
。
您必须正确映射您的 servlet 和 jsp 文件以分隔 url!
下面是一个简单的 web.xml 示例:
<web-app>
<servlet>
<servlet-name>SelectSupportUnit</servlet-name>
<servlet-class>my.package.path.SelectSupportUnit</servlet-class>
</servlet>
<servlet>
<servlet-name>QueryResults</servlet-name>
<jsp-file>QueryResults.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SelectSupportUnit</servlet-name>
<url-pattern>SelectSupportUnit.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>QueryResults</servlet-name>
<url-pattern>/QueryResults.html</url-pattern>
</servlet-mapping>
</web-app>
您的操作缺少上下文路径。该动作应该是 action="${pageContext.request.contextPath}/SelectSupportUnit.do"
,或者作为 <c:url>
JSTL 动作的结果创建(它将自动插入上下文路径)。
第二个问题是.do 名称,这似乎不合适。我建议为 servlet 使用提示性名称。
404 是因为格式不正确的操作 URL。您永远不会直接解决 JSP。始终解决其 servlet 控制器。
我是 web 开发的新手,正在开发一个将使用 servlet 和 JSPs 的 web 应用程序,我创建了我的 servlet 和 JSP,但我很难获得servlet 将请求转发给 JSP。
在我的 main
页面中,有一个 <form>
使用 get
方法并且该操作指向我的 servlet (SelectSupportUnit.do
):
<form method="get" action="SelectSupportUnit.do">
在我的 servlet 中,它将我的 JDBC 查询的结果转发给 JSP:
request.setAttribute("suppUnitList", suppUnitList);
RequestDispatcher view = request.getRequestDispatcher("QueryResults.jsp");
view.forward(request, response);
并且在我的 web.xml 文件中它声明了 JSP(这是 Head First Servlets 和 JSP 书中在转发来自您的 servlet 的请求时所说的内容JSP):
<servlet>
<servlet-name>SelectSupportUnit</servlet-name>
<jsp-file>/QueryResults.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SelectSupportUnit</servlet-name>
<url-pattern>/QueryResults.jsp</url-pattern>
</servlet-mapping>
当我 运行 这个(使用 Eclipse IDE 和 Tomcat v7 容器)时,它给了我 HTTP status 404
。并说它找不到我的 servlet (SelectSupportUnit.do
)。
这会使它看起来好像在调用 servlet 的 <form>
元素中,您应该调用 JSP,但如果我这样做,它不会绕过 servlet 吗?
我的 form
看起来像这样:
我的元素现在看起来像这样:
<form target="_blank" method="get" action="${PageContext.request.contextPath}/SelectSupportUnit">
您必须在表单中提及 servlet 的名称
<form method="get" action="SelectSupportUnit">
然后会转到Servlet的doGet()
方法。您不需要在表单操作中添加 SelectSupportUnit.do
。
您必须正确映射您的 servlet 和 jsp 文件以分隔 url!
下面是一个简单的 web.xml 示例:
<web-app>
<servlet>
<servlet-name>SelectSupportUnit</servlet-name>
<servlet-class>my.package.path.SelectSupportUnit</servlet-class>
</servlet>
<servlet>
<servlet-name>QueryResults</servlet-name>
<jsp-file>QueryResults.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SelectSupportUnit</servlet-name>
<url-pattern>SelectSupportUnit.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>QueryResults</servlet-name>
<url-pattern>/QueryResults.html</url-pattern>
</servlet-mapping>
</web-app>
您的操作缺少上下文路径。该动作应该是 action="${pageContext.request.contextPath}/SelectSupportUnit.do"
,或者作为 <c:url>
JSTL 动作的结果创建(它将自动插入上下文路径)。
第二个问题是.do 名称,这似乎不合适。我建议为 servlet 使用提示性名称。
404 是因为格式不正确的操作 URL。您永远不会直接解决 JSP。始终解决其 servlet 控制器。