【问题标题】:Servlet to JSP issue [duplicate]Servlet 到 JSP 的问题 [重复]
【发布时间】:2016-05-20 17:55:30
【问题描述】:

我是 Web 开发新手,正在开发一个将使用 servlet 和 JSP 的 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(当将请求从您的 servlet 转发到 JSP 时,这是 Head First Servlets and JSPs 书中所说的):

<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 的 &lt;form&gt; 元素中,您应该调用 JSP,但是如果我这样做,它不会绕过 servlet 吗?

我的form 看起来像这样: 我的元素现在看起来像这样:

<form target="_blank" method="get" action="${PageContext.request.contextPath}/SelectSupportUnit"> 

【问题讨论】:

  • SelectSupportUnit.do 的真正含义是什么?您的 Servlet 的名称中是否包含 点 (.)
  • @ThisaruGuruge 提到的问题(servlet 的拼写错误)或者您忘记在 web.xml 中提及它(不是 pom,为什么会出错)。如果你不想绕过它,你应该明确调用 servlet 而不是 JSP。
  • @ThisaruGuruge,是的,它就是这样形成的。
  • @Minsk 请确定:你的包名是SelectSupportUnit,类名是do
  • 我在那里犯了一个错误,我将名称更正为SelectSupportUnit。这是在一些例子中,我不明白 .do 是不需要的。

标签: jsp servlets http-status-code-404


【解决方案1】:

您的操作缺少上下文路径。该操作应该是action="${pageContext.request.contextPath}/SelectSupportUnit.do",或者作为&lt;c:url&gt; JSTL 操作的结果创建(它将自动插入上下文路径)。

第二个问题是 .do 名称,这似乎不合适。我建议对 servlet 使用暗示性名称。

404 是因为操作 URL 格式不正确。您永远不会直接处理 JSP。始终处理其 servlet 控制器。

【讨论】:

    【解决方案2】:

    您必须在表单中提及 servlet 的名称

    <form method="get" action="SelectSupportUnit">
    

    然后它会转到 Servlet 的doGet() 方法。您无需在表单操作中添加SelectSupportUnit.do

    【讨论】:

    • 这不是一个好习惯。不要要求别人投票给你,这样你也可以投票给他们。是连续投票。如果您找到值得投票的帖子,请投票。不要投票,因为他投票给你。
    • 其实,我很喜欢你的回答,想点赞,但因为缺分没能投票。
    【解决方案3】:

    您必须将您的 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>  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 2021-06-04
      • 2010-10-12
      • 1970-01-01
      • 2014-03-14
      • 2011-11-24
      • 2011-09-07
      相关资源
      最近更新 更多