Spring框架配置遇到得问题

在配置spring框架时可参考: 链接 https://blog.csdn.net/J080624/article/details/66969987
【1】web.xml中 配置资源拦截路径
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet. DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 此处也可以配置成 *.do 形式 -->
<url-pattern>/</url-pattern>
</servlet-mapping>

原因:
这里也可以设置成*.do 的形式,意思就是当有请求来的时候只拦截.do结尾的请求,然后去通过 DispatcherServlet 找到对应controller进行访问 但这种rest风格很不好。
我们一般配置 <url-pattern>/</url-pattern> 的形式
"/" 的意思是替换掉容器的default servlet ,意思就是会把所有的请求 都交给DispatcherServlet 分发器处理
这样的问题就是 我们的静态资源也被当成请求处理 就会出现静态资源加载不进来
也就怎么样都访问不到容器中原始默认的servlet( 对静态资源的访问就是通过容器默认的servlet处理的

解决这个问题:
因为默认的servlet被 “/” 代替了 解决的目标就是重新启用默认servlet ;所以在spring-mvc中配置<mvc:default-servlet-handler>
/*配置一个handler通过转发到servlet容器的默认servlet来处理静态资源*/
果然,静态资源可以访问了。但是。。

【2】 controller又不能访问了

原因:
default-servlet-handler 在SpringMVC上下文中定义了一个DefaultServletHttpRequestHandler

/*当DispatcherServlet url-pattern为 ‘/’时,该handler将会使用‘/*’去匹配请求路径;因此, 重置了servlet容器对静态资源的默认处理*/

当DispatcherServlet url-pattern为 ‘/’ 时。该handler将会使用 ‘/*’ 去匹配请求 因为’/’将servlet定义为默认serlvet,在没有精确匹配servlet出现前,’ /*' 将拥有最高的优先级!!
/* 可以拦截路径和资源型的请求,并转发到默认的serlvet
也就是说, 静态资源此时可以由默认default servlet进行处理,但是default servlet不能处理你的业务请求(mapping)

解决办法:,需要保证该handler对应的handler mapping在执行顺序中为最后
<mvc:annotation-driven />



<mvc:default-servlet-handler/>
  • 必须与<mvc:annotation-driven> 结合使用,否则controller将失效。
  • 容器默认的DefaultServletHandler处理 所有静态内容与无RequestMapping处理的URL;放到handlerMapping配置后,否则会导致映射失效
<mvc:annotation-driven />
<!-- 对静态资源文件的访问 需要是spring3.0.5以上版本-->
<mvc:default-servlet-handler/>

[3] tomcat 乱码问题 注意 两个地方都要配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值