• SpringMVC入门


    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存取数据

  • 相关阅读:
    深度学习和神经网络的区别是什么
    各种数据类型范围
    排队接水
    最大整数
    马拉松接力赛
    合并果子
    统计学生信息(使用链表完成)
    删除数组中的元素(链表)
    求最大公约数(最小公倍数)
    十进制转化成八进制(一到十六进制)
  • 原文地址:https://www.cnblogs.com/juaner767/p/5744583.html
Copyright © 2020-2023  润新知