SpringMVC框架笔记 第一天

SpringMVC框架



1-1 SpringMVC的优势

1、清晰的角色划分:
    前端控制器(DispatcherServlet)
    请求到处理器映射(HandlerMapping)
    处理器适配器(HandlerAdapter)
    视图解析器(ViewResolver)
    处理器或页面控制器(Controller)
    验证器(Validator)
    命令对象(Command请求参数绑定到的对象就叫命令对象)
    表单对象(Form Object提供给表单展示和提交到的对象就叫表单对象)
    
2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要

3、由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象。

4、和Spring 其他框架无缝集成,是其它Web框架所不具备的。

5、可适配,通过HandlerAdapter可以支持任意的类作为处理器。

6、可定制性,HandlerMapping、ViewResolver等能够非常简单的定制。

7、功能强大的数据验证、格式化、绑定机制。

8、利用Spring提供的Mock对象能够非常简单的进行Web层单元测试。

9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

10、强大的JSP标签库,使JSP编写更容易。

    ..................还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。

2-1 SpringMVC框架的快速入门

框架入门的需求:便写jsp的页面,编写超链接,点击链接,发送请求,SpringMVC框架处理请求,转发到成功页面

具体步骤如下:
    1.创建maven的项目,导入开发的坐标(或导入jar包)
        commons-logging-1.2.jar
        spring-aop-4.3.13.RELEASE.jar
        spring-beans-4.3.13.RELEASE.jar
        spring-context-4.3.13.RELEASE.jar
        spring-core-4.3.13.RELEASE.jar
        spring-expression-4.3.13.RELEASE.jar
        
        spring-web-4.3.13.RELEASE.jar
        spring-webmvc-4.3.13.RELEASE.jar
        
    2.编写index.jsp页面和suc.jsp页面
        index.jsp页面
            <%@ page contentType="text/html;charset=UTF-8" language="java" %>
            <html>
                  <head>
                      <title>入门程序</title>====
                  </head>
                  <body>
                      <%--超链接--%>
                      <h3>入门</h3>
                      <a href="/hello.do">入门程序</a>
                  </body>
            </html>
        suc.jsp页面
            <%@ page contentType="text/html;charset=UTF-8" language="java" %>
            <html>
            <head>
                <title>成功</title>
            </head>
            <body>
                <h3>入门成功了.......</h3>
            </body>
            </html>
            
    3.编写Controller类(控制器类),方法就可以去执行
        //控制器:处理用户的请求
        @Controller
        public class HelloController {
            //处理超链接发出来的请求
            @RequestMapping("/hello.do")
            public String sayHello(){
                System.out.println("入门方法执行了...");
                //返回值为jsp页面跳转的路径,默认使用的是请求的转发
                //return "/suc.jsp";
        
                //配置了视图解析器后的写法
                return "suc";
            }
        }
        
    4.配置前端控制器(Servlet,SpringMVC框架提供的)(web.xml)
        <?xml version='1.0' encoding='UTF-8'?>
        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns="http://java.sun.com/xml/ns/javaee"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">


            <!--配置springMVC的前端控制器-->
            <servlet>
                <servlet-name>dispatcherServlet</servlet-name>
                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                <!--加载springmvc.xml配置文件,配置的是spring配置-->
                <init-param>
                    <param-name>contextConfigLocation</param-name>
                    <param-value>classpath:springmvc.xml</param-value>
                </init-param>
                <!--配置启动加载-->
                <load-on-startup>1</load-on-startup>
            </servlet>
            <servlet-mapping>
                <servlet-name>dispatcherServlet</servlet-name>
                <url-pattern>*.do</url-pattern>
            </servlet-mapping>
        </web-app>

    5.编写Springmvc.xml配置文件(配置Spring一些配置,开启注解扫描)
        <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
               xmlns:mvc="http://www.springframework.org/schema/mvc"
               xmlns:context="http://www.springframework.org/schema/context"
               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.xsd
                                   http://www.springframework.org/schema/mvc
                                   http://www.springframework.org/schema/mvc/spring-mvc.xsd
                                   http://www.springframework.org/schema/context
                                   http://www.springframework.org/schema/context/spring-context.xsd">
        
            <!--配置了内容,启动Tomcat服务器的时候,就会被加载-->
            <!--配置注解扫描-->
            <context:component-scan base-package="main.java.cn.xuqg.demo1"/>
        
            <!--配置视图解释器,进行页面的跳转-->
            <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--跳转的页面的路径-->
                    <property name="prefix" value="/" />
            <!--跳转的页面的后缀名称-->
                    <property name="suffix" value=".jsp" />
            </bean>
        
        </beans>
    6.启动Tomcat,测试

2-2 SpringMVC入门程序的执行过程

1.服务器启动,应用被加载。读取到web.xml中的配置创建spring容器并且初始化容器中的对象。注意:从入门案例中可以看到的是:HelloController和InternalResourceViewResolver,但是远不止这些。
    
2.浏览器发送请求,被DispatherServlet捕获,该Servlet并不处理请求,而是把请求转发出去。转发的路径是根据请求URL,匹配@RequestMapping中的内容。

3.匹配到了后,执行对应方法。该方法有一个返回值。

4.根据方法的返回值,借助InternalResourceViewResolver找到对应的结果视图。

5.渲染结果视图,响应浏览器
。

2-3 SpringMVC入门程序中涉及的组件

SpringMVC框架是基于组件式开发

1.DispatcherServlet:前端控制器
    用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
    
2.HandlerMapping:处理器映射器
    HandlerMapping负责根据用户请求找到Handler即处理器,SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

3.Handler:处理器
    它就是我们开发中要编写的具体业务控制器。由DispatcherServlet把用户请求转发到Handler。由Handler对具体的用户请求进行处理。

4.HandlAdapter:处理器适配器
    通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
    
5.View Resolver:视图解析器
    View Resolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

6.View:视图
    SpringMVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

2-4 mvc:annotation-driven说明

    在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。
    使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter( 处 理 适 配 器 ),
    可 用 在SpringMVC.xml配 置 文 件 中 使 用<mvc:annotation-driven>替代注解处理器和适配器的配置。
    
    它就相当于在xml中配置了:
        <!--上面的标签相当于如下配置-->
        <!--Begin -->
        <!--HandlerMapping -->
        <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
        <bean
            class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
         <!--HandlerAdapter -->
         <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
         <bean
            class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
        <bean
            class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
        <!--HadnlerExceptionResolvers -->
        <bean
            class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver"></bean>
        <bean
            class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver"></bean>
        <bean
            class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver"></bean>
        <!--End -->
        注意:
            一般开发中,我们都需要写上此标签(虽然从入门案例中看,我们不写也行,随着课程的深入,该标签还有具体的使用场景)。
        明确:
            我们只需要编写处理具体业务的控制器以及视图。

2-5 RequestMapping注解

1.RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系

2.RequestMapping注解可以作用在方法和类上
    1.作用在类上:第一级的访问目录
    2.作用在方法上:第二级的访问路径
    3.细节:路径可以不编写/表示应用的根目录开始

3.RequestMapping的属性
    1.path      指定请求路径的URL
    2.value     value属性和path属性是一样的
    3.method    指定该方法的请求方式
    4.param     指定限制请求参数的条件

3-1 请求参数的绑定

解决中文乱码
    <!--配置中文乱码问题的过滤器-->
    <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>    


日期变换方式一:
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    
日期变换方式二:
    自定义类型装转器 
            //自定义类型转换器 把String转换成Date
            public class StringToDate implements Converter<String, Date> {
                
                //进行类型转换的方法
                @Override
                public Date convert(String s) {
                    if(s==null){
                        throw new RuntimeException("请输入内容");
                    }
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
            
                    try {
                        return sdf.parse(s);
                    } catch (ParseException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
            
    <!--配置日期类型装换器,类型转化器的组件,把日期类型转化器注入到组件对象中-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="main.java.cn.xuqg.demo2.StringToDate"/>
            </set>
        </property>
    </bean>

    <!--让映射器、适配器和处理器生效(默认不配置也是可以的)-->
    <mvc:annotation-driven conversion-service="conversionService"/>

3-2 SpringMVC常用的注解

注解一:
        @RequestParam注解
            属性:required 
                  value
                  defaultValue

注解二:
        @RequestBody注解


注解三:
        @PathVariable注解

注解四:
        @RequestHeader注解


注解五:
        @CookieValue注解

ps:另外附上资源 https://blog.csdn.net/weixin_44040023/article/details/103376121
发布了30 篇原创文章 · 获赞 47 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44040023/article/details/105695039