zoukankan      html  css  js  c++  java
  • IntelliJ IDEA 2019.1.1 maven框架web.xml中web-app版本过低导致不能正常使用EL表达式的解决方案

     1、软件版本

    IDEA版本:IntelliJ IDEA 2019.1.1

    maven版本:apache-maven-3.6.1

    Tomcat版本:tomcat-8.5

     

    2、问题描述

    IDEA使用如下图的webapp骨架时候,自动生成的web.xml文件的web-app版本是2.3的,导致EL表达式混乱,因为EL表达式是2.4以上版本才支持的。

     

    3、解决方案

    ①找到maven-archetype-webapp的jar包位置,我的路径:

    D:ApacheMavenRepositoryorgapachemavenarchetypesmaven-archetype-webapp1.4 

    仅供参考,Maven后边的路径应该是一样的。

     

    ②用压缩包形式打开,不一定是WinRAR,其他的压缩工具也可以,但不要解压缩。

     

     

    ③然后找到依次点 archetype-resourcessrcmainwebappWEB-INFweb.xml 双击打开,然后把内容清除,不要关。

     

    ④打开tomcat的web.xml文件,我的路径:

    C:Program FilesApache Software FoundationTomcat 8.5webappsROOTWEB-INF 

    我的tomcat是默认路径安装的,仅供参考。

     

    打开后如下图,将图中红框部分复制到上边maven的web.xml文件中,然后保存。

    PS:友情提示,上边的web-app标签中有一个metadata-complete="true",这是个大坑,因为web-app标签3.0以上版本是可以使用servlet的注解的,如下图:

    再也不用去web.xml写那servlet的那一堆映射了(下图就是那一堆映射)

    但是!!!

    如果你忘记了改这个web-app标签里的metadata-complete的这个属性,你所写的注解都将失效!!!

    该属性为true,则容器在部署时只依赖部署描述文件,忽略所有标注,如果不配置该属性,或者将其设置为false,则表示启动注解支持。当metadata-complete="false"时,web.xml和注解对于Servlet的影响同时起作用,两种方法定义的url-partten都可以访问到该Servlet,但是当通过web.xml定义的url-partten访问时,注解定义的属性将失效。
    所以如果你想用servlet注解来配置servlet的话,复制到新的web.xml中时一定记得修改该属性为metadata-complete="false "!!!

     

    4、再次用webapp框架新建的web.xml效果如图,web-app版本3.1,经测试EL表达式可以正常使用

     

    PS:我是喜欢用servlet注解来配置servlet的,比较方便好用,所以上边的metadata-complete的属性也就改成了false。

  • 相关阅读:
    UVA 10618 Tango Tango Insurrection
    UVA 10118 Free Candies
    HDU 1024 Max Sum Plus Plus
    POJ 1984 Navigation Nightmare
    CODEVS 3546 矩阵链乘法
    UVA 1625 Color Length
    UVA 1347 Tour
    UVA 437 The Tower of Babylon
    UVA 1622 Robot
    UVA127-"Accordian" Patience(模拟)
  • 原文地址:https://www.cnblogs.com/iCheny/p/10970285.html
Copyright © 2011-2022 走看看