【问题标题】:call servlet from html form without web.xml deployment descriptor从没有 web.xml 部署描述符的 html 表单调用 servlet
【发布时间】:2010-08-03 21:55:50
【问题描述】:

如何在不使用 web.xml 部署描述符的情况下从表单的操作中调用 servlet?

【问题讨论】:

  • 你不能。 web.xml 是 servlet 的工作方式。
  • 重点是什么?
  • @matt:例如,以 JAR 的形式分发。只需包含在类路径中,它就会被注册。

标签: java servlets web.xml


【解决方案1】:

升级到Java EE 6 / Servlet 3.0,然后你就可以通过@WebServlet注解注册servlet。

package com.example;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

@WebServlet(urlPatterns={"/myServlet/*"})
public class MyServlet extends HttpServlet {
    // ...
}

不再需要web.xml。上面做的和下面的基本一样:

<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/myServlet/*</url-pattern>
</servlet-mapping>

到目前为止,您可以从 Glassfish v3Tomcat 7 中选择作为 Servlet 3.0 实现。


在 Servlet 3.0 之前,您最好的选择可能是前端控制器模式。在web.xml 中有一个 servlet,它根据请求参数和/或路径信息将请求/操作委托给域对象。这也用于一般的 MVC 框架中。

【讨论】:

  • +1 - 不错。你到底是怎么跟上这一切的?最令人印象深刻。
  • 我的阅读和演奏不如你的有效。也许我需要少读多玩。
  • @duffy:是的,玩肯定比阅读更有帮助。自己的经验是最好的知识来源。
  • 很好的答案,但我没有 web.xml 的原因是因为我工作的公司自 2000 年初以来没有升级我们的网络服务器,而且可能暂时不会升级。 stackoverflow.com/questions/3397798/…
  • 对不起,在这里我无法为您提供帮助。这是一个特定于服务器的问题,我从未使用过该服务器。
【解决方案2】:

你可以直接使用类名来调用webserver中的servlet。
如果您的网址是http://myurl.com/
然后,将完整的类名附加到 url 将调用 servlet。

例如:
如果我的 servlet 是 com.my.package.servlet.MyServlet
然后,您可以使用http://myurl.com/com.my.package.servlet.MyServlet
传递参数,http://myurl.com/com.my.package.servlet.MyServlet?name=myname&user=myuser
网址虽然变脏了。但是你不需要使用 web.xml 来调用 servlet。

【讨论】:

  • 非常糟糕的建议。首先,它仅适用于 Tomcat 和某些派生容器(该功能通过 Invoker Servlet 功能公开)。其次,该领域至少存在一个安全漏洞。更多信息wiki.apache.org/tomcat/FAQ/Miscellaneous#Q3
  • @EJP:是的,这是真的。 @Vineet:这不是使用它的建议。只是一个信息,有可能不使用 web.xml。
猜你喜欢
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 2010-10-03
  • 2017-09-19
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多