Spring MVC如何解析视图
视图解析器类型
完成单一解析逻辑的视图解析器:
InternalResourceViewResolver
FreeMarkerViewResolver
BeanNameViewResolver
XmlViewResolver
...
基于协商的视图解析器:
ContentNegotiatingViewResolver
该解析器是Spring 3.0新增的,它不负责具体的视图解析,而是作为一个中间人的角色根据请求所要求的MIME类型,从上下文中选择一个适合的视图解析器,再将视图解析工作委托其负责
示例:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"
p:order="0" p:defaultContentType="text/html" p:ignoreAcceptHeader="true"
p:favorPathExtension="false" p:favorParameter="true" p:parameterName="content">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html" />
<entry key="xml" value="application/xml" />
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"
p:renderedAttributes="userList" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView"
p:modelKey="userList" p:marshaller-ref="xmlMarshaller" />
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:order="100" p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
静态资源处理
配置:
第一步:web.xml让所有请求都由Spring MVC处理
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
第二步:springServlet-servlet.xml让Web应用服务器处理静态资源
<mvc:default-servlet-handler/>
获取应用服务器的默认Servlet,大多数应用服务器的Servlet的名称都是“default”,如果默认不是“default”则使用
<mvc:default-servlet-handler
default-servlet-name=“<defaultServletName>"/>