Java 为什么必须指定<;的属性;网络应用>;web.xml文件中的标记?
考虑两个web.xml文件: 一, 在我们的Java 为什么必须指定<;的属性;网络应用>;web.xml文件中的标记?,java,servlets,web.xml,Java,Servlets,Web.xml,考虑两个web.xml文件: 一, 在我们的jsp-页面中。对于Spring MVC,它们不会被添加到控制器中的模型中的相应值替换 我认为,我们指定schemaLocation属性的唯一目的是验证xml-文件(以获取XSD-schema)。属性实际上是如何工作的?第一个web.xml指定webapp需要的Servlet API版本(3.0),而第二个则不需要 在第二种情况下,servlet容器将认为这意味着它是为旧版本的servlet API编写的,特别是从没有使用version属性或严格定义名
jsp
-页面中。对于Spring MVC
,它们不会被添加到控制器中的模型中的相应值替换
我认为,我们指定schemaLocation
属性的唯一目的是验证xml
-文件(以获取XSD
-schema)。属性实际上是如何工作的?第一个web.xml指定webapp需要的Servlet API版本(3.0),而第二个则不需要
在第二种情况下,servlet容器将认为这意味着它是为旧版本的servlet API编写的,特别是从没有使用version属性或严格定义名称空间的servlet API版本编写的。这些旧版本是JSP-2.0之前的版本,因此不支持JSP表达式语言。这意味着您的表达式将不会被替换(您不会希望出于其他原因而使用该表达式语法的较旧应用程序突然让容器以作者不希望的方式对其求值)
对于现代webapp,您应该始终指定所需的Servlet API版本
schemaVersion
版本本身并不相关,只是说Servlet API的现代版本需要定义它们
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>app</display-name>
<servlet>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<servlet-name>dispatcher</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<web-app>
<display-name>app</display-name>
<servlet>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<servlet-name>dispatcher</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
${attrName}