1.什么是springmvc,它与spring有什么关系

  springmvc属于spring框架的后续产品,用在基于MVC的表现层开发,类似于struts2框架。

2.初识springmvc工作流程

  用户请求Action-->springmvc DispathcerServlet-->映射器-->适配器-->Action-->视图解析器-->springmvc DispathcerServlet-->jsp页面

3.springmvc快速入门(XML版本)

  导入spring core、spring web、spring mvc包;

  在web.xml中配置spring核心控制器

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--通知dispatcherservlet去指定的目录下加载springmvc-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

  创建控制器类HelloAction

public class HelloAction implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","这是我的第一个springmvc程序");
        //视图的真实路径
//        modelAndView.setViewName("/jsp/success.jsp");
        //视图的逻辑路径
        modelAndView.setViewName("success");
        return modelAndView;
    }
}

  创建转发到的success.jsp页面

  配置springmvc.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"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
    <!--注册action-->
    <bean name="/hello.action" class="springmvc.HelloAction">
    </bean>
    <!--映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--如果action中书写的是视图逻辑名称,那么视图解析器必须配置-->
        <!--如果action中书写的是视图的真实名称,那么视图解析器可选-->
        <!--路径前缀-->
        <property name="prefix" value="/jsp/"></property>
        <!--路径后缀-->
        <property name="suffix" value=".jsp"></property>
        <!--前缀+逻辑名+后缀=真实路径-->
    </bean>
</beans>

4..视图解析器【解析视图逻辑名对应的真实路径】【配置可省】InternalResourceViewResolver

  如果需要配置jsp-jsp之间的转发控制器,需要如下配置(不要和本文件下的视图解析器同时存在,否则可能会加前缀和后缀):

    <bean name="/index.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
        <property name="viewName" value="/WEB-INF/index.jsp"></property>
    </bean>

5.映射器Mapping【什么样的请求交给Action】【配置可省】BeanNameUrlHandlerMapping

  1) org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(核心)

    将程序员定义的Action所对应的<bean>标签的name属性作为请求路径;

    <bean name="/hello.action" class="springmvc.HelloAction">
    </bean>

  2) org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

    /delete.action和/update.action和/find.action请求路径都交由<bean>标签为id的Action,即多个路径对应同一个Action

    <bean id="userActionID" class="springmvc.UserAction"></bean>
    <!--映射器-->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/update.action">userActionID</prop>
                <prop key="/delete.action">userActionID</prop>
                <prop key="/find.action">userActionID</prop>
            </props>
        </property>
    </bean>

7.适配器Adapter【Action实现什么接口】【配置可省】SimpleControllerHandlerAdapter

8.控制器Controller【Action继承什么类】【配置必写】HelloAction

   org.springframework.web.servlet.mvc.AbstractCommandController能够以实体的形式,收集客户端参数

public class EmpAction extends AbstractCommandController{
    public EmpAction(){
        this.setCommandClass(Emp.class);
    }

    @Override
    protected ModelAndView handle(HttpServletRequest request,
                                  HttpServletResponse response,
                                  Object obj,
                                  BindException error) throws Exception {
        Emp emp = (Emp) obj;
        System.out.print(emp);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","封装成功");

        modelAndView.setViewName("success");
        return modelAndView;
    }
}

9.日期转换器和编码过滤器

  配置编码过滤器(只能针对post方法的参数)

    <!--注册spring针对post的乱码问题,仅适用于post-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  日期转换器

public class EmpAction extends AbstractCommandController{
    public EmpAction(){
        this.setCommandClass(Emp.class);
    }
    //自定义类型转换器,将string转换成date类型yyyy-mm-dd

    @Override
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
        //向springmvc中注册一个自定义的类型转换器
        //参数一:将string转成什么类型的字节码
        //参数二:自定义转换规则
        binder.registerCustomEditor(Date.class,
                new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
    }

    @Override
    protected ModelAndView handle(HttpServletRequest request,
                                  HttpServletResponse response,
                                  Object obj,
                                  BindException error) throws Exception {
        Emp emp = (Emp) obj;
        System.out.print(emp);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","封装成功");

        modelAndView.setViewName("success");
        return modelAndView;
    }
}  

10.springmvc与struts2的区别

1)springmvc的入口是一个servlet,即前端控制器,例如:*.action
  struts2入口是一个filter过虑器,即前端过滤器,例如:/*
2)springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例
  struts2是基于类开发,传递参数是通过类的属性,只能设计为多例
3)springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView对象,最后又将模型数据通过request对象传输到页面
  struts采用值栈存储请求和响应的数据,通过OGNL存取数据

 posted on 2016-08-06 17:55  十三弦  阅读(277)  评论(0编辑  收藏  举报