我是否真的需要为基于Servlet的Java Web应用程序创建web.xml文件?

39

我没有参与过真实的网络项目开发。在大学里,我们使用Servlets和Spring进行Java Web开发。在这两个项目中,我们都是用预先配置好的web.xml文件,并且只进行了一些小的更改。现在我需要从头开始构建一个Web应用程序。我在Eclipse中创建了一个新的Servlet类,但它没有自动创建任何web.xml文件。于是我查阅了一些资料,发现有几篇文章指出,实际上并不需要web.xml文件,而可以使用注释来替代。但这些文章只是简单地说明了这种做法,因此我不确定是否可以完全不用配置web.xml文件。如果不需要配置web.xml文件,那我会非常高兴,因为我从未亲自配置过它,希望能更多地关注业务逻辑。

提前感谢您!


2
自从Servlet 3规范(如果我没记错的话),就不再需要web.xml文件了。 - fge
根据他最终使用的应用服务器以及他想要使用Spring OP的程度,他仍然需要编写不止一个web.xml文件,还需要编写另外无数个XML文件。其中web.xml是最简单的一个。 - BigMike
2
是的 @chrylis,我仍然有点受到刚才那些臃肿无用、复杂而且毫无结论性的 XML 垃圾所创伤。如果它们已经简化了,那就很好。 - BigMike
@chrylis 无法排除这一点,以前从未使用过,并且您知道,事情应该准备得很快,没有时间深入研究。印象仍然存在,太多的配置与混乱的文档相结合。希望他们已经改进了它,如果我有需要再次使用它,我会更深入地挖掘它。 - BigMike
@BigMike - 别担心,随着时间的推移,一切都会变得更加复杂 :) 创建语法糖来掩盖复杂性是很好的,只是你需要学习的东西多了一件。 - ZhongYu
显示剩余5条评论
7个回答

15
如果你的容器支持最新的J2EE规范,那么你就不需要一个web.xml文件。这里是一个简单的servlet示例,它使用了注解;这里你也可以找到Spring MVC的相同示例。下面我把示例贴在这里方便你参考:
public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {
        ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet());
        registration.setLoadOnStartup(1);
        registration.addMapping("/example/*");
    }

}

这里是另一个链接,展示了如何使用其他可用的注释(@ServletFilter, @WebServletContextListener); 您可以从这里下载规范以获取通过j2ee可用的注释的更详细视图。


2
“最新”规范被称为“Java EE”。“J2EE”已经在2006年之后被废弃。 - Utku

12

从Servlet 3开始,不需要web.xml文件。您需要使用类似Tomcat 7或8(更好的选择)的工具。对于原始Servlets,这是一个很好的起点

如果要使用现代Spring,Grails 3是一种很好的选择。它可以回避所有这些问题,而且Grails是一个非常高效的Web开发框架。您可以将其视为在Spring和Hibernate之上构建的Ruby on Rails。

此时,除非使用需要它的框架,否则不需要编写任何web.xml文件来进行设置。我不知道spring mvc,但是Grails不需要您这样做,并且它使用大部分您已经习惯使用的东西。


嗨,但如果我们不使用XML,则可能会有一些内部实现方式将操作绑定到Servlet。那在哪里? - Vikram Saini
@VikramSaini,现在将操作绑定到servlet中是通过注释完成的,就像这里:https://docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/htmlsingle/#getting-started-first-application-code - Sorin Postelnicu

3

另一种方式(Spring 3.1+)-

一个名为AbstractDispatcherServletInitializerWebApplicationInitializer抽象基类实现,使得通过简单地重写方法来指定servlet映射和DispatcherServlet配置文件的位置更容易注册DispatcherServlet -

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

    @Override
    protected WebApplicationContext createServletApplicationContext() {
        XmlWebApplicationContext cxt = new XmlWebApplicationContext();
        cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
        return cxt;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

}

2

是否需要web.xml文件取决于应用程序中使用的Servlet规范。如果你要使用3.0规范构建应用程序,可以使用注释来声明servlet,并在不需要web.xml文件的情况下将其部署到容器中。这是在JSR-315的一部分中完成的。


1

0

使用Spring Boot,它将为您管理容器和所有样板配置。您可以使用Initializr生成一个准备好启动的骨架。


0

如果您使用的是servlet版本>3.0tomcat 7,则基于servlet的应用程序不需要web.xml文件,因为它将无法在以前的tomcat版本中运行。

注释表示元数据。如果您使用注释,则不需要部署描述符(web.xml文件)。请查看此处以获取所有可用的注释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接