开发者社区> 问答> 正文

spring mvc拦截器配置失败,求指点 : 配置报错 

最近在学习springMvc,现在看到自定义拦截器这一章节,按照文档以及网上样例配置后,一直拦截不到请求,大家帮忙看下是怎么回事,不胜感激。我的配置及代码: cactus-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

<context:annotation-config/>
<context:component-scan base-package="cactus"/>
<mvc:annotation-driven/>

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/*"/>
        <bean class="cactus.fw.mvc.CharacterEncodingInterceptor">
            <property name="ajaxMark">
                <value>ajax</value>
            </property>
            <property name="normalEncoding">
                <value>gbk,gbk</value>
            </property>
            <property name="ajaxEncoding">
                <value>utf-8,utf-8</value>
            </property>
        </bean>
    </mvc:interceptor>
</mvc:interceptors>

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value=""/>
    <property name="suffix" value=""/>
</bean>

</beans>

CharacterEncodingInterceptor.java:
package cactus.fw.mvc;

import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class CharacterEncodingInterceptor extends HandlerInterceptorAdapter {

private String ajaxMark = null;
private String normalEncoding = null;
private String ajaxEncoding = null;

@Override
public boolean preHandle(HttpServletRequest request,
		HttpServletResponse response, Object handler) throws Exception {
	
	System.out.println("I am here.");
	
	String[] encodings = null;
	if(request.getHeader(ajaxMark) == null) {
		encodings = normalEncoding.split(",");
	} else {
		encodings = ajaxEncoding.split(",");
	}
	
	request.setCharacterEncoding(encodings[0]);
	response.setCharacterEncoding(encodings[1]);
	
	return true;
}

public String getAjaxMark() {
	return ajaxMark;
}

public void setAjaxMark(String ajaxMark) {
	this.ajaxMark = ajaxMark;
}

public String getNormalEncoding() {
	return normalEncoding;
}

public void setNormalEncoding(String normalEncoding) {
	this.normalEncoding = normalEncoding;
}

public String getAjaxEncoding() {
	return ajaxEncoding;
}

public void setAjaxEncoding(String ajaxEncoding) {
	this.ajaxEncoding = ajaxEncoding;
}

}

奇怪的是,我把拦截器配置那一块改成下面的样子,就可以拦截到请求:
    <mvc:interceptors> <bean class="cactus.fw.mvc.CharacterEncodingInterceptor"> <property name="ajaxMark"> <value>ajax</value> </property> <property name="normalEncoding"> <value>gbk,gbk</value> </property> <property name="ajaxEncoding"> <value>utf-8,utf-8</value> </property> </bean> </mvc:interceptors>

展开
收起
kun坤 2020-06-04 11:20:18 622 0
1 条回答
写回答
取消 提交回答
  • 看来大家都忙着过年那,自己顶一顶。######<mvc:mapping path="/*"/> 改为 <mvc:mapping path="/**"/> 试一下 ######回复 @BlackApple : 表示该路径下的资源,不包含子目录的内容,表示该目录下的资源,包含子目录(递归)。######一个 和两个 有什么区别呀.不太明白, 不是代表一个或多个字符吗?######汗,查到了:匹配0或者更多的目录。 http://blog.csdn.net/li_jinjian2005/article/details/2915446######谢谢回复,改成/**之后好使了,为什么需要多加一个星号那?两者有什么区别?######extends HandlerInterceptorAdapter 换成 implements HandlerInterceptor

    2020-06-05 13:14:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
workshop专场-微服务专场-开发者动手实践营-微服务-Spring Cloud Alibaba 微服务全家桶体验 立即下载
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载

相关实验场景

更多