SpringMVC ViewResolver查找序列

虽然我们在之前的示例中一直都是使用一个InternalResourceViewResolver进行视图查找,但这并不意味着每个基于 Spring MVC的Web应用程序只能使用一个ViewResolver。实际上,Dispatcher- Servlet不但可以接受多个HandlerMapping以处理Web请求到具体Handler的映射,也可以接受多个ViewResolver以处 理视图的查找。

DispatcherServlet初始化时,将根据类型扫描自己的WebApplicationContext中定义的 ViewResolver。如果查找到存在多个ViewResolver的定义,DispatcherServlet将根据这些ViewResolver 的优先级进行排序,然后当需要根据逻辑视图名查找具体的View实例的时候,将按照排序后的顺序遍历这些ViewResolver,只要期间任何一个 ViewResolver返回非空的View实例,当前查找即告结束。如果DispatcherServlet没能在当前的 WebApplicationContext中找到任何的ViewResolver定义,它将使用 InternalResourceViewResolver作为默认的ViewResolver使用。

ViewResolver的优先级的指定使用Ordered接口作为标准,这已经成为Spring框架内设定优先级方式的惯例了。假设我们希望主要 使用ResourceBundleViewResolver进行逻辑视图名到具体View实例的查找,如果没能找到,再寻求 InternalResourceViewResolver的帮助。我们可以在Dispatcher- Servlet的WebApplicationContext中添加如下配置内容:

 

<bean id="resourceBundleViewResolver"
 class="org.springframework.Web.servlet.view.
ResourceBundleViewResolver">  
<property name="order" value="1"></property>  
</bean>  

<bean id="viewResolver"
class="org.springframework.Web.servlet.view.
InternalResourceViewResolver">  
<property name="prefix" value="/WEB-INF/jsp/"/>  
<property name="suffix" value=".jsp"/>  
</bean> 
 

相应ViewResolver的bean定义对应的id或者name属性值是任意 的,DispatcherServlet将按照类型来获取ViewResolver。如果没有为某个ViewResolver指定order值的话,默认 值为Integer.MAX_ VALUE,对应的是最低优先级。

如果为DispatcherServlet指定多个ViewResolver的话,不要给予 InternalResour- ceViewResolver以及其他UrlBasedViewResolver子类过高的优先级,因为这些ViewResolver即使找不到相应的视 图,也不会返回null以给我们轮询下一个ViewResolver的机会,这样,我们所指定的其他ViewResolver实际上就形同虚设。合理的处 理方式是,给予ResourceBundleView- Resolver或者XmlViewResolver这种能够通过返回null以表明无法找到相应视图的ViewResolver较高的优先级,而只是将 InternalResourceViewResolver(或者其他类似行为的ViewResolver)添加为最低优先级ViewResolver, 以作为DispatcherServlet的后备查找对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC中整合RedisTemplate时,如果遇到序列化超时的问题,可以尝试以下几个解决方法: 1. 调整序列化方式:默认情况下,RedisTemplate使用JdkSerializationRedisSerializer作为默认的序列化方式。这种序列化方式可能导致序列化超时问题。可以尝试使用其他序列化方式,如Jackson2JsonRedisSerializer或StringRedisSerializer。 ```java // 使用Jackson2JsonRedisSerializer作为序列化方式 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(jedisConnectionFactory); redisTemplate.setDefaultSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); ``` 2. 增加超时配置:在配置连接工厂的时候,可以增加超时配置,设置合适的超时时间,确保在序列化过程中不会超时。 ```xml <!-- Redis连接工厂配置 --> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <!-- Redis服务器地址 --> <property name="hostName" value="localhost" /> <!-- Redis服务器端口号 --> <property name="port" value="6379" /> <!-- Redis密码 --> <property name="password" value="password" /> <!-- Redis连接超时时间 --> <property name="timeout" value="5000" /> <!-- Redis连接池 --> <property name="poolConfig" ref="jedisPoolConfig" /> </bean> ``` 3. 检查对象是否可序列化:如果使用自定义的对象进行存储,需要确保这些对象实现了Serializable接口,以便进行正确的序列化。 ```java public class CustomObject implements Serializable { // ... } ``` 通过以上方法,可以尝试解决Spring MVC中RedisTemplate序列化超时的问题。如果问题仍然存在,请提供更多详细信息以便我们能够更好地帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值