1、拦截器实现方式
1.1 实现HandlerInterceptor(官方推荐);
public class MyHandlerInterceptor implements HandlerInterceptor {
private static final Logger logger = LogManager.getLogger();
public MyHandlerInterceptor(){
logger.info("正在创建MyHandlerInterceptor。");
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
logger.info("正在执行MyHandlerInterceptor.preHandle(...)。");
logger.info("handler:" + handler);
boolean result = false;
if ( 1+1 > 3 ){
result = true;
}
/**
* 知识点:知识点2
* 返回值为true表示放行该请求。
*/
return result;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
logger.info("正在执行MyHandlerInterceptor.postHandle(...)。");
logger.info("handler:" + handler);
/**
* 知识点:知识点2
* 如果有必要,可以操作modelAndView参数,比如更改逻辑视图或者对模型进行操作。
*/
logger.info("modelAndView:" + modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception exception) throws Exception {
logger.info("正在执行MyHandlerInterceptor.afterCompletion(...)。");
logger.info("handler:" + handler);
logger.info("exception:" + exception);
}
}
1.2继承HandlerInterceptorAdapter类;
public class MyHandlerInterceptorAdapter extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
1.3 实现WebRequestInterceptor;
public class MyWebRequestInterceptor implements WebRequestInterceptor {
@Override
public void preHandle(WebRequest request) throws Exception {
}
@Override
public void postHandle(WebRequest request, ModelMap model) throws Exception {
}
@Override
public void afterCompletion(WebRequest request, Exception ex) throws Exception {
}
}
2.XML配置
2.1纯xml,不需要扫描器。。
控制类不需要注解
public class HelloJspController extends AbstractController {
private static final Logger logger = LogManager.getLogger();
public HelloJspController() {
logger.info("正在创建HelloJspController");
}
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mav = new ModelAndView("hello-jsp");
logger.info("正在执行HelloJspController.handleRequestInternal(..)。");
return mav;
}
}
<!-- 1、配置映射器 -->
<!-- ==================================================================================================== -->
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">//这里是架包的类
<property name="mappings">
<props>
<prop key="/hello-jsp">helloJspController</prop>
</props>
</property>
<!-- 注入拦截器 -->
<property name="interceptors">
<list>
<!-- 这里是自己创建的一个拦截器类-->
<bean class="com.wdzl.interceptor.MyHandlerInterceptor"></bean>
</list>
</property>
<property name="order" value="1"></property>
</bean>
需要配置控制器
<!-- 2、配置控制器 -->
<!-- ==================================================================================================== -->
<!-- 配置自定义控制器 -->
<bean id="helloJspController"
class="com.company.project.controller.HelloJspController">
</bean>
视图解析器都是必须的
<!-- 3、配置视图解析器 -->
<!-- ==================================================================================================== -->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
2.2 XML+注解配置
控制类添加注解;
@Controller
@RequestMapping("/hello-jsp")
public class HelloJspController {
private static final Logger logger = LogManager.getLogger();
public HelloJspController() {
logger.info("正在创建HelloJspController");
}
@RequestMapping("")
protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mav = new ModelAndView("hello-jsp");
logger.info("正在执行HelloJspController.handleRequestInternal(..)。");
return mav;
}
}
然后更改配置文件
- sao描控制器上的注解,把他们加入springmvc容器
- <mvc:annotataion-driven/>启用默认的HandlerMapping,HandlerAdator,
- <mvc:interceptors>配置拦截器
- 配置视图解析器,这个功能更常用
<!--扫描-->
<context:component-scan base-package="com.wdzl"></context:component-scan>
<mvc:annotation-driven/>
<!-- 独立拦截配置 -->
<!-- ==================================================================================================== -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
</bean>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/admin/**"/>
<bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="com.wdzl.interceptor.MyHandlerInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
<!-- ==================================================================================================== -->
<!-- 3、配置视图解析器 -->
<!-- ==================================================================================================== -->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
最好web.xml文件
这些都是必须滴;;;
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--部署applicationContext.xml文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--配置文件加载监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置DispatchServlet 的核心控制器 -->
<!-- DispatchServlet是HTTP请求的中央调度处理器,
它将web请求转发给controller层处理,
它提供了敏捷的映射和异常处理机制。-->
<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:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--日志-->
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:log4j2.xml</param-value>
</context-param>
</web-app>