项目中的第二个servlet无法正常工作

时间:2014-11-06 07:31:09

标签: java jsp tomcat servlets

我是Servlets的新手。 我用2个jsp文件做了一个简单的项目。和两个服务员 jsp1,jsp2,servlet1和servlet2。

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

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

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

在这种情况下它完全正常。

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

HTTP状态404 - / Project / servlet2  类型状态报告  message / Project / servlet2  description请求的资源(/ 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>

2 个答案:

答案 0 :(得分:2)

您可能没有在WEB.XML中映射第二个servlet。检查条目,否则创建自己的,

<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">

答案 1 :(得分:0)

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

正如你所说:

  

项目中的第二个servlet无法正常工作。

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

<强>编辑:

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

例如:

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

<强> EDITED1: 可能还有另一个原因。

如果您的第二个servlet在包内,则必须在web.xml中包含包名。假设您需要在servlet2.java包中的第二个servlet com.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>