看一下Java
EE版本。Servlet(以及JSP,JSF,EJB,JPA等)版本与Java
EE版本紧密相关。
- Java EE 8 = Servlet 4.0
- Java EE 7 = Servlet 3.1
- Java EE 6 = Servlet 3.0
- Java EE 5 = Servlet 2.5
- J2EE 1.4 = Servlet 2.4
- J2EE 1.3 = Servlet 2.3
- J2EE 1.2 = Servlet 2.2
查看服务器主页/文档的显示方式。对于GlassFish,当前是(带有4.1):
全球首个Java EE 7应用服务器
因此,它是Servlet 3.1。
但是, 尽管 很大,但这是一回事。第二件事是,Web应用程序的
web.xml版本也起作用。并非所有人都知道。
如果您的Web应用
web.xml程序声明为符合Servlet 3.1,如下所示,
<?xml version="1.0" encoding="UTF-8"?><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方式运行。
但是,如果它被声明为符合Servlet 3.0(例如以下甚至更旧),
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!-- Config here. --></web-app>
那么您的Web应用程序将以Servlet 3.0兼容方式运行,即使将其部署到Servlet
3.1兼容容器中也是如此!上面的内容影响了
ServletContext#getMajorVersion()和
getMinorVersion(),因此它们实际上不涉及容器,只涉及Webapp本身。
如果您的Web应用程序
web.xml包含一个
<!DOCTYPE>,而不管DTD和版本如何,那么即使声明了更新的XSD,它也将以Servlet
2.3兼容方式运行!
<?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>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)