IDEA 2017.3 新版本中创建 JSF Web 应用程序缺少 web.xml 的解决办法

Posted 小侠猫猫球

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA 2017.3 新版本中创建 JSF Web 应用程序缺少 web.xml 的解决办法相关的知识,希望对你有一定的参考价值。

IDEA 2017.3 新版本中默认创建一个 Web 应用程序很可能不会自动创建 web.xml 文件。虽然说从 JavaEE 6.0 开始 Servlet 3.0 规范中就新增了一些注解可以免去传统 web.xml 中的设置,但是这也有局限性。比如,针对 JSF 应用程序,必须在 web.xml 中增加系统内建的 JSF Facelets Servlet 的配置以及部署后自动启动等设置,而且包括 context-param、welcome-file-list 等等并没有 Servlet 3.0 的对应注解。Servlet 3.0 中新增的 @WebServlet 注解只是对你自己派生定义的 Servlet 起作用,对于系统内置的 JSF Facelets Servlet 就注解配置了,所以还是需要 web.xml 的。如果 IDEA 2017.3 没有帮我们自动生成适合 JSF 的 web.xml,那就需要我们自己手动创建了。

1. 创建 web.xml

在 IDEA 中为一个 Web 应用程序 Module 创建 web.xml,可以在 Project Structur 对话框中,找到目标 Module,它包含一个 Web 子模块,点击该 Web 子模块,右边的 Deployment Descriptors 中添加一个 web.xml,注意选择其版本为 3.1 最新版,然后修改其所在路径为你的 Module 的绝对路径加上它自己的完整路径,类似如下这样:/xxx/xxx/web/WEB-INF/web.xml。

2. 在 web.xml 中增加必要的常规配置

新创建的 web.xml 除了名字空间等基本配置外,其余都是空白的,需要针对 JSF Web 应用在 web-app 标签范围内增加一些常规基本配置,如下:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
    
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>
    
<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

上述这些是 JSF Web 应用在 web.xml 中最基本的通用配置。

以上是关于IDEA 2017.3 新版本中创建 JSF Web 应用程序缺少 web.xml 的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中创建我的应用程序的新版本?

我们如何在 Laravel 8.1 中创建一个普通控制器(--plain 在新版本中不存在)[关闭]

IntelliJ IDEA 2017.3 搭建一个多模块的springboot项目

如何在 JSF 中创建现有组件的组合?

如何在 JSF 中执行验证,如何在 JSF 中创建自定义验证器

如何在 JSF EL 中创建一个数组?