Spring MVC详解(下)

一、视图层解析

在这里插入图片描述
调用Web资源给域对象传值

  • page
  • request
  • session
  • application

业务数据的绑定是指把业务数据绑定给JSP域对象,业务数据的绑定是由ViewResolver来完成的,开发时,我们先添加业务数据,再交给ViewResolver来绑定,我们重点是学习如何添加业务数据,Spring MVC提供了下面几种方式来添加业务数据:

  • Map
  • Model
  • ModelAndView
  • @SessionAttribue
  • @ModelAttribute
  • Servlet的API

1.1业务数据绑定到request域对象

1) Map
Spring MVC在调用业务方法之前会先创建一个隐含对象作为业务数据的存储容器,设置业务方法的入参为Map类型,Spring MVC会把隐含对象的引用传递给入参
在这里插入图片描述
在这里插入图片描述

2) Model
Model和Map类似,业务方法通过入参来完成业务数据的绑定
在这里插入图片描述
3)ModelAndView
和Map,Model不同的是,ModelAndView不仅包含业务数据,同时也封装了视图信息,如果使用ModelAndView来处理业务数据,业务方法的返回值必须是ModelAndView对象

业务方法中对ModelAndView进行两个操作:

  1. 填充业务数据
  2. 绑定视图信息

第一种方式:
在这里插入图片描述
第二种方式:
在这里插入图片描述

第三种方式:
在这里插入图片描述

第四种方式:
在这里插入图片描述

第五种方式:
在这里插入图片描述

4) Servlet的API
Spring MVC可以在业务方法种直接获取Servlet原生Web资源,只需要在方法定义时添加HttpServletRequest输入参数就可以,在方法体种直接使用request对象
先在pom.xml导入相关依赖

 <!--导入servlet API -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>

在这里插入图片描述
5)@ModelAttribute
Spring MVC还可以通过@ModelAttribute注解的方式添加业务数据,具体使用步骤如下:

  1. 定义一个方法,这个方法用来填充到业务数据中的对象
  2. 给该方法添加@ModelAttribute注解,不是响应请求的业务方法
  3. @ModelAttribute注解的作用,将请求参数绑定到Model对象。被@ModelAttribute注释的方法会在Controller每个方法执行前被执行(如果在一个Controller映射到多个URL时,要谨慎使用)。
    在这里插入图片描述
    @ModelAttribute的作用是当Handler接收到一个客户端请求以后,不管调用哪一个业务方法,都会优先调用被@ModelAttribute注解修饰的方法,并且把其返回值作为业务数据,再到业务方法,此时业务方法只需要返回视图信息就可以了,不需要返回业务数据,即使返回业务数据,也会被@ModelAttribute注解修饰的方法返回的数据所覆盖

域中的对象以key-value的形式存储,此时key默认值是业务数据所对应的类的类名首字母小写以后的结果
如果getUser没有返回值,则必须手动在该方法中填充业务数据,使用Map或者Model均可。

@ModelAttribute
public void getUser(Model model){
   
   
	User user=new User();
	user.setId(1);
	user.setName("张三");
	model.addAttribute("user",user);
}

在这里插入图片描述

1.2业务数据绑定到Session域对象

1)使用原生的Servlet API
在这里插入图片描述

2)@SessionAttribute
@SessionAttribute这个注解不是给方法添加的,而是给类添加的
在这里插入图片描述
@SessionAttributes除了可以通过key值绑定,也可以通过业务数据的数据类型进行绑定

@Controller
@SessionAttributes(type=User.class)
public class ViewHandler{
   
   
	...
}

在这里插入图片描述
@SessionAttributes可以同时绑定多个业务数据

@Controller
@SessionAttributes(type={
   
   User.class,Address.class})
public class ViewHandler{
   
   
	...
}

或者

@Controller
@SessionAttributes(value={
   
   "user","address"})
public class ViewHandler{
   
   
	...
}

二、自定义数据类型转换器

Spring MVC默认情况下可以对基本类型进行类型转换,例如可以将String转换为Integer,Double,Float等。但是Spring MVC并不能转换日期类型(java.util.Date),如果希望把字符串参数转换为日期类型,必须自定义类型转换器
在这里插入图片描述
1)创建DateConverter类,并且实现org.springframework.core.convert.converter.Converter接口,这样它就成为了一个自定义数据类型转换器,需要指定泛型<String,Date>,表示把String类型转为Date类型

public class DateConverter implements Converter<String, Date> {
   
   

    private String pattern;

    public DateConverter(String pattern) {
   
   
        this.pattern = pattern;
    }

    @Override
    public Date convert(String s) {
   
   
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(this.pattern);
        try {
   
   
            return simpleDateFormat.parse(s);
        } catch (ParseException e | java.text.ParseException e) {
   
   
            e.printStackTrace();
        }
        return null;
    }
}

2)在springmvc.xml中配置conversionService bean,这个bean是org.springframework.context.support.ConversionServiceFactoryBean的实例化对象,同时bean中必须包含一个converters属性,在其中注册所有需要使用的自定义转换器

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.zyh.converter.DateConverter">
                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
                </bean>
            </list>
        </property>
    </bean>
     <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

在这里插入图片描述

三、RESTful风格

3.1初识RESTful<

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码上生花

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

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

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

打赏作者

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

抵扣说明:

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

余额充值