JavaWeb框架 -SpringMVC05

使用注解的形式进行SpringMVC 的配置:

  1. SpringMVC请求响应所经过的步骤:
    在这里插入图片描述

    • 请求离开浏览器时 ,会带有用户所请求内容的信息,至少会包含请求的URL。但是还可能带有其他的信息(例如用户提交的表单)
    • DispatcherServlet的任务是将请求发送给Spring MVC控制器 (controller)
    • 控制器是一个用于处理请求的Spring组件 DispatcherServlet以会查询一个或多个处理器映射(handler mapping)。处理器映射会根据请求所携带的URL信息来进行决策 一旦选择了合适的控制器,DispatcherServlet会将请求发送给选中的控制器
    • 控制器在完成逻辑处理后,通常会产生一些信息,这些信息需要返回 给用户并在浏览器上显示。这些信息被称为模型(model)最后就是将模型数据打包,并且标示出用于渲染 输出的视图名
    • DispatcherServlet将会使用视图解析器(view resolver) 来将逻辑视图名匹配为一个特定的视图实现
    • 最后就是视图的实现 和 响应
  2. 使用Java类进行SpringMVC DispatcherSerlvet的配置:(需要注意就是这种方式需要的是Servlet3.0以上的版本)

    public class Config extends AbstractAnnotationConfigDispatcherServletInitializer {
        /**
         * 为DispatcherServlet指定servlet 映射.映射的是"/",
         * (其实就相当于<servlet-mapping>的子元素<url-pattern>用于指定应用于Servlet的URL路径)
         */
        @Override
        protected String[] getServletMappings() {
            return new String[] { "/" };
        }
        /**
         * RootConfig配置类加载的是驱动应用后端的中间层和数据层组件,是父上下文
         */
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class<?>[] { RootConfig.class };
        }	
        /**
         * WebConfig配置类中主要是内容是启用组件扫描,配置视图解析器,配置静态资源的处理。 其实就是使用配置在WebConfig配置类中的bean
         */
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class<?>[] { WebConfig.class };
        }
    }
    

    实际上,AbstractAnnotationConfigDispatcherServletInitializer 会同时创建DispatcherServlet和 ContextLoaderListenerGetServlet-ConfigClasses() 方法返回的带有@Configuration注解的类将会用来定义DispatcherServlet应用上下文中的 bean getRootConfigClasses()方法返回的带 有@Configuration注解的类将会用来配 置ContextLoaderListener创建的应用上下文中的bean 这种方式是传统方式的代替方式

  3. 视图解析器的配置详解:

    • 没有配置视图解析器。如果这样的话,Spring默认会使 用BeanNameView-Resolver,这个视图解析器会查找ID与视 图名称匹配的bean,并且查找的bean要实现View接口,它以这样 的方式来解析视图
    • Java类进行视图解析器的配置:
      @Configuration
      @ComponentScan("com.itheima")//开启组件扫描
      @EnableWebMvc// 启用SpringMvc
      public class WebConfig extends WebMvcConfigurerAdapter {
          @Bean
          public ViewResolver viewResolver(){
              InternalResourceViewResolver resolver = new InternalResourceViewResolver();
              resolver.setPrefix("/WEB-INF/pages/");
              resolver.setSuffix(".jsp");
              resolver.setExposeContextBeansAsAttributes(true);
              // 支持JSTL
              resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
              resolver.setExposeContextBeansAsAttributes(true);
              return resolver;
          }
      }
      
    • Spring自带了13个视图解析器,能够将逻辑视图名转换为物理实现:常用的就是三种
    视图解析器描述
    InternalResourceViewResolver将视图解析为Web应用的内部资源(一般为 JSP)(最常用的)
    FreeMarkerViewResolver将视图解析为FreeMarker模板(能解析Html后缀)
    BeanNameViewResolver将视图解析为Spring应用上下文中的bean,其中 bean的ID与视图的名字相同 (不配置使用的默认的)
    • 配置Thymeleaf视图解析器:
      • 为了要在Spring中使用Thymeleaf,我们需要配置三个启用Thymeleaf与 Spring集成的bean:
        • ThymeleafViewResolver:将逻辑视图名称解析为Thymeleaf 模板视图
        • SpringTemplateEngine:处理模板并渲染结果在·
        • TemplateResolver:加载Thymeleaf模板
      • 使用Java代码的方式,配置Spring对Thymeleaf的支持
  4. 进行控制器的编写:

    @Controller
    @RequestMapping("/")
    public class HelloController {
        @RequestMapping(method = RequestMethod.GET)
        public String hello(){
            return "hello";
        }
    }
    

    配置InternalResourceViewResolver的方式,视图 名“hello”将会解析为“/WEB-INF/views/hello.jsp”路径的JSP

  5. 表单校验使用的注解:

    需要导入的包

    <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
    </dependency>
    
    
    注解描述
    @AssertFalse所注解的元素必须是Boolean类型,并且值为false
    @AssertTrue所注解的元素必须是Boolean类型,并且值为true
    @DecimalMax所注解的元素必须是数字,并且它的值要小于或等于给定的 BigDecimalString值
    @DecimalMin所注解的元素必须是数字,并且它的值要大于或等于给定的 BigDecimalString值
    @Digits所注解的元素必须是数字,并且它的值必须有指定的位数
    @Future所注解的元素的值必须是一个将来的日期
    @Max所注解的元素必须是数字,并且它的值要小于或等于给定的值
    @Min所注解的元素必须是数字,并且它的值要大于或等于给定的值
    @NotNull所注解元素的值必须不能为null
    @Null所注解元素的值必须为null
    @Past所注解的元素的值必须是一个已过去的日期
    @Pattern所注解的元素的值必须匹配给定的正则表达式
    @Size所注解的元素的值必须是String、集合或数组,并且它的长度要符 合给定的范围

    注意在使用这些等注解时,一定要和@valid一起使用,不然@NotBlank不起作用
    在这里插入图片描述

    public class HualalaRegistVO {
        @NotBlank
        @Pattern(regexp = "^\\d{11}$", message = "手机号码格式错误")
        String phoneNumber; //手机号码
        @NotBlank
        String name; //姓名
        @NotBlank
        String loanBody;//借款主体
        @NotBlank
        String loanBodyId;//借款主体ID
        @NotNull
        BigDecimal borrowAmount;//借款金额
        @NotNull
        BigDecimal turnover;//月营业额
        @NotNull
        BigDecimal profit; //月利润
        @NotBlank
        String usage;//用途
        @NotBlank(groups = {A.clss})
        String groupID;//集团ID
        String source = ""; //来源
        String code; //验证码(更换手机号码时使用)
        String ipAddress; //ip地址  
    }
    
  6. 参数校验的方式:

    • 第一种方式就是使用if进行判断:这样的方式是最简单的也是最容易想到的 但是对于属性比较多的时候非常的麻烦 都是重复的代码 (pass)
      在这里插入图片描述
    • 使用Spring框架中的注解的形式 方便的提供参数校验的工作
      在这里插入图片描述
      在对象的入口处 使用@Valid注解 历来对传入的参数进行验证:
      在这里插入图片描述
    • 这样的方式也是比较的繁琐 最终的方式就是使用异常拦截器进行参数的校验:
      在这里插入图片描述
  7. 各组件配置总结:

    • 配置核心的控制器也就是DispatcherServlet,并使Spring容器在TOMCAT初始化时创建.在工程的webapp/WEB_INF目录下配置web.xml 和 处理编码的过滤器:characterEncodingFilter

      <!DOCTYPE web-app PUBLIC
      "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/dtd/web-app_2_3.dtd" >
      <web-app>
          <display-name>Archetype Created Web Application</display-name>
          <!--配置过滤器使用的是filter标签 注意的是filter标签在Servlet标签的之前用来设置字符集-->
          <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>
          <!-- SpringMVC的核心控制器 -->
          <servlet>
              <servlet-name>dispatcherServlet</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 -->
              <init-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:springmvc.xml</param-value>
              </init-param>
               <!-- 配置servlet启动时加载对象 -->
              <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
              <servlet-name>dispatcherServlet</servlet-name>
              <url-pattern>/</url-pattern>
          </servlet-mapping>
      </web-app>
      
      
    • 视图解析器配置:

      <!--配置视图的解析器-->
      <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <!--表示文件所在的目录 (前缀)-->
          <property name="prefix" value="/WEB-INF/pages/" ></property>
          <!--文件的后缀名是什么 (后缀)-->
          <property name="suffix" value=".jsp"></property>
      </bean>
      
    • 前端控制器(控制静态资源)

      <!-- location属性必须是一个有效的目录,因此必须以 / 结尾 -->
      <mvc:resources location="/css/" mapping="/css/**"/>
      <mvc:resources location="/images/" mapping="/images/**"/>
      <mvc:resources location="/js/" mapping="/js/**"/>
      
    • 文件解析器:

      <!-- 配置文件解析器,其id是固定的,必须为multipartResolver -->
      <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
          <!-- 设置文件的最大尺寸 -->
          <property name="maxUploadSize" value="10485760"/>
      </bean>			
      
    • 异常处理器:

      <!--配置异常处理器-->
      <bean id="myExceptionResolver" class="cn.maoritian.exception.MyExceptionResolver"/>			
      
    • 异常拦截器:

      <mvc:interceptors>
          <mvc:interceptor>
              <!-- 拦截的方法 -->
              <mvc:mapping path="/**" />
              <!-- 具体的拦截器 -->
              <bean id="officeHoursInterceptor" class="com.itheiam.interceptor.TimeBasedAccessInterceptor">
                  <property name="openingTime" value="9"/>
                  <property name="closingTime" value="18"/>
              </bean>
          </mvc:interceptor>
      </mvc:interceptors>
      
    • 自定义类型转换器:

      	<!--配置自定义类型转换器 使用的标签是bean标签 属性是id 和 class属性-->
      	<bean id="dateConverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
      	   <property name="converters">
      	       <set>
      	           <!--将自定义的类型转换器注册到set中 第三步将转换器生效-->
      	           <bean class="com.itheima.utils.StringToDateConverter"></bean>
      	       </set>
      	   </property>
      	</bean>
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上山打卤面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值