springmvc执行流程以及常用组件注解01

SpringMVC day01

执行流程

handler,是指包含了我们请求的Controller类和Method方法的对象

组件:

  1. 处理器映射器。handlerMapping 返回的是控制器
  2. 处理器适配器。handlerAdapter 返回的是modelAndView
    1. modelAndView:也就指的是向视图中传递的信息,以及哪个视图
  3. 视图解析器。ViewResolver 解析视图
    1. 也就是通过扫描配置 将视图的资源路径拼接 并且访问
      在这里插入图片描述
视图: Representational State Transfer 具象状态传输
请求参数的绑定:
  1. 普通数据类型 直接封装(参数名称和parameter名一致)

  2. javaBean类型数据封装:

    1. form表单中的name属性值要和要封装的javabean对象中的成员属性名称相同

    2. 如果封装的javabean中存在引用数据类型的话,那么依旧遵循上述的规则,

      例如

      Account(name,password) 中存储 User对象 user中存在 uname, uage 
      那么在form中传递方式应该为
      name
      passowrd
      user.uname
      user.uage
      
      
  3. 调试异常:

    1. 异常信息

      java.lang.NoSuchMethodException: com.gql.pojo.User.<init>()
      
    2. 原因:初始化pojo类变量需要其无参构造 重写有参构造会把默认存在的无参构造覆盖

  4. 绑定 map list集合的参数表达式传递:

    1. list:

      // list是要封装pojo的成员变量名 index是位置 
      // 成员:List <User> list = new ArrayList<User>;
      <input type="text" name="list[index].uname">
      <input type="text" name="list[index].uname">
      

      输出 : list=[User{uage=11, uname=‘wew’}]

    2. map:

      //map是要封装pojo的成员变量名 key是自定义键名称 
      // 成员:Map<String,User> map = new HashMap<String,User>;
      // (理解):map['key'] -> 指的是map中某个key对应的值对象 
      <input type="text" name="map['key'].uname">
      <input type="text" name="map['key'].uage">
      

      输出:map={key=User{uage=22, uname=‘qqq’}}

相对路径:
		/ :表示根目录
  ./ :表示当前目录 (可以省略)
  ../ : 表示上一级目录(../../上二级)
post请求中文乱码问题:
  1. request.setCharSetEncoding(“UTF-8”)

  2. springMVC框架中提供了Filter过滤器,用于解决post请求的中文乱码问题

    1. 配置:web.xml

      <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>
        
      
      

###### 自定义类型转换器

1. 自定义类实现 Converter<S, T>接口

2. 重写 T convert(S source) 方法

3. 在springmvc-config中加载组件

   ```xml
    <!-- 自定义类型转换器   -->
       <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
           <!--   注册一个新的类型转换器-->
           <property name="converters">
                   <!--   像集合中添加组件    -->
               <set>
                   <bean class="com.qqhru.utils.Conversion"></bean>
               </set>
           </property>
       </bean>

ConversionServiceFactoryBean:

成员中有一个set类型的converters 所以在添加 组件的时候用set标签

	@Nullable
	private Set<?> converters;
  1. 输出:Thu Nov 11 00:00:00 CST 1999
常用注解
  1. @RequestParam

    1. 定义作用:把请求中指定名称的参数给控制器中的形参赋值。

    2. 如果浏览器传递的参数与方法的形参名称不同,可以用此注解更改

    3. 理解:也就是将value对应的请求参数赋值给自定义hendller的形参

      请求: method?username=“张三”

      (@RequestParam(value="username" String name)){
      		System.out.pritln(name); //张三
      }
      
  2. @RequestBody

    1. 获取请求体(form表单)内容

      获取结果是键值对形式

      ​ jsp:

      <form action="param/requestBodyTest" method="post">
                  <input type="text" name="username" placeholder="账号请输入">
                  <br>
                  <input type="password" name="password" placeholder="密码请输入">
                  <br>
                  <input type="text" name="money" placeholder="money请输入">
                  <br>
                  <input type="submit" value="click this href check @RequestBody annotation!">
              </form>
      

      ​ handler

      public String testBody(@RequestBody String body)
       // 结果: username=wangjunyu&password=3232&money=288
      
    2. 如果请求是get会报错

      1. 属性:

        required:是否必须有请求体。

        默认值是:true。当取值为 true 时,get 请求方式会报错。

        如果取值为 false,get 请求得到是 null。

  3. @PathVariable(地址 变量)

    1. 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个**{id}**就是 url 占位符。

    2. 即可以通过path/user/number这种形式访问资源

      1. number指的是一个固定参数 @pathVariable注解可以获取{id}中的值

      jsp:

      <a href="param/pathVariableTest/10"> pathVariableTest </a>
      <%-- 占位符位置为10 --%>
      

      handler

       @RequestMapping("/pathVariableTest/{pid}")
          public String testPathVariable(@PathVariable(value = "pid") int id){
            // 操作:将通过注解获取到的pid赋值给方法的形参 id
              System.out.println(id);
              return "success";
          }
      
  4. @RequestHeader

  5. @CookieValue

  6. @ModelAttribute

    1. 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。

      它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。

    2. 出现在参数上,获取指定的数据给参数赋值。

       @ModelAttribute
          public void testModelAttribute_init(){
              System.out.println("ModelAttribute_init执行了...");
           	 //没有返回值的
          }
      
          @RequestMapping("/modelAttributeTest")
          public String testModelAttribute(){
              System.out.println("testModelAttribute执行了..");
              return "success";
          }
      
      //输出结果:ModelAttribute_init执行了...
      //         testModelAttribute执行了..
      
  7. @SessionAttribute

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值