Java Web 项目中的 web.xml 声明使用 Servlet 的版本
参考: https://stackoverflow.com/questions/30777179/how-to-find-servlet-api-version-for-glassfish-server
例如:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- config here -->
</web-app>
则 Web 项目使用的就是 Servlet 3.1 版本。
如果 web.xml 中声明使用的是 Servlet 3.0 版本,那应用即使把应用部署到兼容 Servlet 3.1 版本的容器中,项目使用的还是 Servlet 3.0 兼容模式。
如果 web.xml 中包含 <!DOCTYPE>,不管 其中使用的 DTD 和它的版本,应用都会以 Servlet 2.3 模式运行,即使有更新的XSD声明!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "java.sun.com/dtd/web-app_2_3.dtd">
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- This is WRONG! The DOCTYPE must be removed! -->
</web-app>
使用 GlassFish 5,如果配置 web.xml 使用 Servlet 4.0 版本,则使用 Managed bean 无效,不会自动调用,页面使用 managed bean 也无法获取数据,因为该 managed bean 不会自动初始化。
把 web.xml 中配置使用 Servlet 3.1 版本后解决此问题。
不使用 GlassFish 而改用 TomEE 8.0.0-M1 则可以配置 web.xml 使用 servlet 4.0 版本。
注意: 由于示例项目中使用了 JSF,JSF 属于 Java EE 标准的一部分,如果把项目部署到 Tomcat 上,则需要另外添加对 jsf 支持的相关 jar 包,因为 Tomcat 只是支持 Java EE 标准中的 Servlet 等部分,Tomcat 是一个 Web 容器,不是一个 Java EE 容器,GlassFish 是 Java EE 容器,TomEE 是 Jave EE Web Profile。
关于 TomEE: https://en.wikipedia.org/wiki/Apache_TomEE
TomEE 包括了 Tomcat 以及其他一些组件。
更多参考:https://stackoverflow.com/questions/24239978/java-ee-web-profile-vs-java-ee-full-platform
浙公网安备 33010602011771号