视频观看地址:http://edu.51cto.com/course/14795.html

1、SpringMVC

1.1、概述

Spring为展现层提供了一个优秀的mvc框架-Springmvc和大多数web框架一样,它是基于mvc的设计理念,此外它采用了松散耦合可插拔组件结构,与mvc框架相比更具有更好的扩展性和灵活性

SpringMVC通过一套mvc注解,让pojo称为处理请求的控制器,无需实现任何接口,此外Springmvc在数据绑定、视图解析、本地化及静态资源处理上都有许多不俗的表现

它在框架设计、扩展性、灵活性等方面全面超越了Struts、WebWork等mvc框架,从原来的追赶着一跃成为mvc的领跑者

SpringMVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet是SpringMVC框架的总导演、总策划、它负责截取请求并将其分派给相应的处理器处理

1.2、spring的架构图

2、SpringMVC程序搭建

2.1、添加jar包

2.2、配置web.xml文件



  springmvc
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
    
    springmvc
    org.springframework.web.servlet.DispatcherServlet
    1
  
  
    springmvc
    *.do
  

2.3、配置HandlerMapping

HandlerMapping的继承结构图

在springmvc-servlet中配置

 
     

2.4、配置handlerAdapter

在在springmvc-servlet中配置

 
 

2.5、编写控制器

package cn.org.kingdom.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        ModelAndView  mv = new ModelAndView();
        mv.setViewName("hello");
        mv.addObject("name", "hello springmvc");

        return mv;
    }
}

xml的配置

 
 

注意导入servlet-api

2.6、配置视图解析器

如何配置

 
     
        
        
     

2.7、测试

2.8、添加日志

添加日志包

log4j-1.2.17.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar

并且在src目录中添加log4j.properties文件

log4j.rootLogger=debug,stdout,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout\t
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

2.9、SpringMVC的默认配置

DispatcherServlet.properties里面定义什么东西呢?

# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

那么既然这个配置文件中定义一些默认的配置,所有我们可以对于自己的配置文件进行更改



     
     
        
        
     
     
     

3、注解配置

3.1、第一个案例的问题

1、每个类都需要实现Controller接口,这样很麻烦

2、方法写的太死,只能处理一个业务

3、每个Controller都要在xml中进行配置

3.2、使用注解搞定

1、编写一个pojo类,在类中加上@Controller注解

2、在pojo类中,编写相应的方法,方法上加入@RequestMapping注解

3、采用spring的扫描包方式进行操作

3.3、定义Hello2类

package cn.org.kingdom.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class Hello2 {
    @RequestMapping(value="show01")
    public ModelAndView show01(){
        ModelAndView  mv = new ModelAndView() ;
        mv.setViewName("hello");
        mv.addObject("name", "采用注解完成");
        return mv ; 
    }
}

3.4、配置xml



     
     
        
        
     
     
     
     

3.5、测试

3.6、观察程序执行流程

发现注解采用的HandlerMapping

发现注解采用HandlerAdapter

发现:

@Deprecated
public class DefaultAnnotationHandlerMapping extends ...{}

已经废弃了

@Deprecated
public class AnnotationMethodHandlerAdapter extends WebContentGenerator
        implements HandlerAdapter, Ordered, BeanFactoryAware {}

这个类也废弃掉

springmvc为我们提供可用的类:

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

重新为核心配置文件加上配置



     
      
      

     
        
        
     
     
     
     

3.7、采用注解驱动来替换配置



     
     
     
        
        
     
     
     
     

注解配置