Spring MVC 3.0 入门指导与重构

Spring MVC

项目结构

  • java

  • resources

  • webapp

  • WEB-INF
    • xxx-servlet.xml
    • web.xml
  • index.jsp

主要是 web.xml 和 servlet.xml 配置

web.xml 包括配置 spring 核心监听器 , 过滤器,DispatcherServlet

Spring 核心监听器

Spring 核心监听器默认会以 /WEB-INF/applicationContext.xml作为配置文件,

public class ContextLoaderListener extends ContextLoader implements ServletContextListener

ContextLoader 可以指定在 Web 应用程序启动时载入 Ioc 容器, ServletContextListener 监听 ServletContext,

ContextLoaderListener 启动 Web 容器时,读取在 contextConfigLocation 中定义的 xml 文件,自动装配ApplicationContext 的配置信息,并产生 WebApplicationContext 对象,然后将这个对象放置在 ServletContext的属性里。

IOC

数据源,sessionFactory,component-scan,配置事务管理器, AOP 配置提供事务增强, 配置事务的传播特性。

DispatcherServlet

component-scan, 启动Spring MVC的注解功能,完成请求和注解POJO的映射 

AnnotationMethodHandlerAdapter, 静态资源访问, 视图解析器, 上传文件,国际化文件和异常处理。

过滤器

容器编码、登录认证、静态资源拦截, 在 DispatcherServlet 前后进行处理

拦截器

拦截器是什么,什么场景使用?

AOP 实现事务管理、日志打印、时间耗时统计、权限认证

说说 DispatcherServlet 做了什么

日志框架

Java 日志统一接口

jcl: Jakarta Commons-logging 是 apache 最早提供的日志的门面接口, 也是 spring 默认使用的日志框架。

Commons-logging 的目的是为 “所有的 Java 日志实现” 提供一个统一的接口,它自身的日志功能平常弱(只有一个简单的SimpleLog?),所以一般不会单独使用它。Log4j 的功能非常全面强大,是目前的首选。

apache commons-logging

log4j

slf4j:Simple Logging Facade for Java,为 Java 提供的简单日志 Facade。Facade 门面,更底层一点说就是接口。它允许用户以自己的喜好,在工程中通过 slf4j 接入不同的日志系统。

因此 slf4j 入口就是众多接口的集合,它不负责具体的日志实现,只在编译时负责寻找合适的日志系统进行绑定。具体有哪些接口,全部都定义在 slf4j-api 中。

maven 仓库:slf4j-log4j12

10分钟搞定--混乱的 Java 日志体系

SpringMVC 配置 log4j

异常处理

你之前项目中异常/国际化如何处理?

首先看看 Spring MVC 处理异常的 3 中方式,进行比较,最终选用一个比较合适的方式。

Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolver;

Spring MVC 异常处理接口 HandlerExceptionResolver 自定义自己的异常处理器;

@ExceptionHandler 注解实现异常处理;

国际化

你之前项目中异常/国际化如何处理?

使用 ResourceBundleMessageSource, 在 i18n/messages 加上对应翻译文件,根据请求头 lang 加载翻译文件

    <bean id="messageSource"
          class="org.springframework.context.support.ResourceBundleMessageSource"
          p:basename="i18n/messages" />

常用注解

常见的使用多的注解问几个(requestbody, responsebody, ModelAttribute 等,

应用

返回视图和 json 对象

ModelAndView, @ResponseBody: 获取 reponse.getWriter(), redirect 传参数放在 ModelAndView

发表评论

评论内容
 

评论列表, 共 0 条评论