【问题标题】:Second servlet in the project not working项目中的第二个 servlet 不工作
【发布时间】:2014-11-06 07:31:08
【问题描述】:

我是 Servlet 的新手。 我用 2 个 jsp 文件做了一个简单的项目。和两个 Servler jsp1、jsp2、servlet1 和 servlet2。

当两个jsps的body标签中的代码都是this(都指向servlet1)

<form method="post" action="servlet1">
<input type="submit">
</form>`

并且在 servlet 的 doPost 方法中有一个简单的 Sysout..

在这种情况下它工作得很好。

但是当我进行第二个 jsp 调用 servlet2.它不起作用。它给了我这个错误屏幕

HTTP 状态 404 - /Project/servlet2 类型状态报告 消息 /Project/servlet2 描述 请求的资源 (/Project/servlet2) 不可用。 Apache Tomcat/6.0.26

那么我们不能在同一个项目中使用两个不同的 servlet 吗?

编辑:

这是 web.xml 文件。如你看到的。所有的映射都在那里。

'

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Project</display-name>
  <welcome-file-list>
    <welcome-file>jsp1.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>servler1</display-name>
    <servlet-name>servler1</servlet-name>
    <servlet-class>servler1</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servler1</servlet-name>
    <url-pattern>/servler1</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>servler2</display-name>
    <servlet-name>servler2</servlet-name>
    <servlet-class>servler2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servler2</servlet-name>
    <url-pattern>/servler2</url-pattern>
  </servlet-mapping>
</web-app>

'

【问题讨论】:

  • 你有没有在web.xml中添加条目
  • 是的,你可以。代码和映射在哪里?
  • 请检查问题。我刚刚用 web.xml 内容进行了编辑。映射都很好,我猜。
  • @Ramandeep 你能告诉我你的第二个 servlet 名称吗?
  • 我想我找到了解决方案,但我仍然需要一些解释。我在 com.Project.servlets 包中使用 servlet 制作了另一个类似的项目。以及 WebContent 中的 JSP 目录中的两个 JSP。 Web.xml 将 default.jsp 作为欢迎页面,该页面转发到 jsp1,因此当我从 jsp1 调用 servlet1 时。它工作正常。但是当我通过 typng 尝试 jsp2 时,url 指向 jsp2 并从中调用 servler2。它无法找到它,因为它仅在 JSP 目录中搜索它。因此,当我将操作属性更改为“../Servlet2”时它可以工作。所以它与JSP转发标签有关。

标签: java jsp tomcat servlets


【解决方案1】:

您可能没有映射WEB.XML 中的第二个servlet。检查条目 else create your own like ,

<servlet>
    <servlet-name>Second</servlet-name>
    <servlet-class>path.SecondServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Second</servlet-name>
    <url-pattern>/SecondServlet</url-pattern>
</servlet-mapping>

在配置 web.xml 之前检查 Oracle 所说的内容

另请阅读我对此How to map a servlet call from a JSP page using form action?的回答

更新:

您的 2.jsp 应该将 action 属性映射为 ,

<form action="./servler2" method="post">

【讨论】:

  • 我用 web.xml 内容更新了问题。如您所见,映射很好。
  • 您能否显示您正在调用第二个 servlet 的 jsp。请检查我在答案中的更新
【解决方案2】:

我同意@San Krish 的回答。但是没有更多的解释。

如你所说:

项目中的第二个 servlet 不工作。

您需要像映射第一个 servlet 一样映射 web.xml 文件中的每个 servlet。

已编辑:

来自您编辑的问题。您在web.xml 文件中使用servler1,但在jsp 中使用servlet1,所以这是主要问题。所以在你的jsp文件中使用servler1

例如:

<form method="post" action="servler1">
    <input type="submit">
</form>`

EDITED1: 可能还有其他原因。

如果您的第二个 servlet 在包内,则必须在 web.xml 中也包含包名。假设您的第二个 servlet servlet2.javacom.myproject.test 包中,您需要在 web.xml 文件中执行以下操作。

<servlet>
    <description></description>
    <display-name>servler2</display-name>
    <servlet-name>servler2</servlet-name>
    <servlet-class>com.myproject.test.servlet2</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servler2</servlet-name>
    <url-pattern>/servler2</url-pattern>
</servlet-mapping>

【讨论】:

  • 对不起,这只是问题中的一个错字。在 JSP 中也是“servler1”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
相关资源
最近更新 更多