2010-08-03 57 views
1

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

+0

你不能。 web.xml是servlet的工作方式。 – skaffman 2010-08-03 21:56:32

+0

会有什么意义?例如: – 2010-08-03 23:15:29

+0

@matt:以JAR形式发布。只需包含在classpath中,它就会被注册。 – BalusC 2010-08-03 23:30:39

回答

4

升级到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,它根据请求参数和/或pathinfo将请求/操作委托给域对象。这也用于平均MVC框架。

+0

+1 - 很好。你究竟如何跟得上这一切?印象最深刻。 – duffymo 2010-08-03 23:25:23

+0

@duffy:通过阅读和玩很多:) – BalusC 2010-08-03 23:32:42

+0

我的阅读和玩并不像你的有效。也许我需要少读更多玩法。 – duffymo 2010-08-03 23:35:41

1

您可以直接使用类名来调用Web服务器中的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。

+0

这是真的吗? – EJP 2010-08-04 04:18:29

+0

非常不好的建议。首先,它仅适用于Tomcat和某些派生容器(该功能通过Invoker Servlet功能公开)。其次,该领域存在至少一个安全漏洞。更多信息在http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q3 – 2010-08-04 06:04:58

+0

@EJP:是的,这是真的。 @Vineet:这不是一个建议,使用它。只是一个没有使用web.xml就有这种可能性的信息。 – aNish 2010-08-04 15:45:21

相关问题