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 控制器。