美文网首页
Spring MVC 2018-10-18

Spring MVC 2018-10-18

作者: 哈222 | 来源:发表于2018-10-19 09:28 被阅读0次

    1.helloWorld

    1.spring-config.xml 2.web.xml

    init-param不配置,有默认文件,位于/WEB-INF/<servlet-name>-servlet.xml
    3.注解方法:

    @RequestMapping("/helloworld") 注解来映射请求的URL

    public Stringhello(){

        System.out.println("hello World!");

        return "success"; }

    通过配置试图解析器,可跳转到/WEB-INF/views/success.jsp页面

    2.@RequestMapping 映射请求

    1.除了修饰方法,还能修饰类

    2.method属性,指定请求方式

    例如:@RequestMapping(value="/testMethod", method = RequestMethod.POST)

    3.params 、headers 请求参数和请求头等于或者不等于指定数值

    4.支持通配符

    ?匹配文件名中一个字

    *匹配文件名中任意字

    ** ** 匹配多层径

    5.目标方法中取参数 @PathVariable

    3.REST 资源表现层转化

    GET 获取资源 /order/1

    POST 新建资源 /order

    PUT 更新资源 /order/1

    DELETE 删除资源 /order/1

    在web.xml文件中配置

    4.映射请求参数

    获取请求参数

    get获取请求参数  order?username=ai&age=12

    获取请求头参数

    获取cookie中的参数

    5.使用POJO对象绑定请求参数值-支持级联属性

    Spring MVC 会按照请求参数名和 POJO 属性名进自动的匹配,为该对象填充属性值。支持级联属性。

    6.Sevlet原生api作为参数

    7.处理模型数据 ModelAndView

    目标返回方法的返回值可以使ModelAndView类型

    其中可以包含视图和模型类型

    success.jsp

    内部原理:

    springmvc会把modelandview的model中的数据放到request域对象中。

    8.处理模型数据的Map

    可从requestScope中获取


    9.参数放入session中--只能放在类的上面,不能放在方法的上面

    在Controller的类上面添加注解,可通过属性和对象类型把对象放入session中

    @SessionAttributes(value={"user","password"},types={String.class})

    10.ModelAttribute注解

    使用场景:

    ①注解标记的方法,会在每个目标方法执行之前被springMVC调用

    ②可以修饰目标方法POJO类型的入参, 其value属性值有如下作用:

    >SpringMvc会使用value属性值再implicitModel中查找对应的对象,若存在则会直接传入到目标方法的入参中

    >SpringMVC会把value为key,POJO类型的对象为value,存入到request中

    运行流程:

    1.执行该注解的方法从数据库中去除对象,把对象放入Map中,键位:User--键名需要与目标方法的入参类型的第一个字母小写的字符串一致

    2.springmvc从Map中取出User对象,并把表单的请求参数赋值给该User对象的对应属性

    3.springmvc把上述对象传入目标方法的参数。

    源码分析的流程:

    1.调动@ModelAttribute注解修饰的方法,实际上把@ModelAttribute方法中Map的数据放在了implicitModel中。

    2.解析请求处理器的目标参数,实际上目标参数来自于WebDatBinder对象的target属性

    2.1创建WebDataBinder对象:

    ① 确定objectName属性:若传入的attributeName是空串,则objectName为类名第一个字母小写。

    注意:attributeName.若目标方法的POJO属性使用了@ModelAttribute来修饰,则attributeName值即为@ModelAttribute的value属性值。

    ② 确定target属性:

    >在implicitModel中查找,attributeName对应的属性值。若存在,ok。

    >若不存在:则验证当前Handler是否使用了@SessoinAttribute进行修饰,若使用了,则尝试从Session中获取attrName所对应的属性值。若Session中没有对应的属性值,则抛出异常。

    >若Handler没有使用@SessionAttribute进行修饰,或@SessionAttribute中没有使用value值指定的key和attrName相匹配,则通过反射创建了POJO对象。

    2.2 spingmvc把请求表单的请求参数赋给了WebDataBinder的target对应的属性

    2.3.SpringMvc会把WebDataBinder的attrName和target给到implicitModel

    2.4把WebDataBinder的target作为参数传递给目标方法的入参

    11.springMVC如何确定pojo的类型

    12.视图解析器

    无论返回String、View或ModelMap等类型,SpringMVC会在内部装配称一个ModelAndView对象,包含逻辑名和模型对象的视图。

    SpringMVC借助视图解析器(ViewResolver)得到最终的物理视图-View对象。

    视图对象由视图解析器负责实例化,由于是无状态的(每个请求创建新的对象),不会有线程安全问题。

    13.mvc:view-controller标签

    可直接按相应转发的页面,而无需进过Handler的方法,在spring 配置xml文件中添加

    <mvc:view-controller path="/success" view-name="success"></mvc:view-controller>

    使用该标签,需使用mvc:annotation-driven标签,否则controller不起作用

    <mvc:annotation-driven></mvc:annotation-driven>

    14.自定义视图

    1.在spring配置文件中配置,通过order设置优先级,数值越小约高,默认视图解析器优先级最低

    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="100"></bean>

    2.创建视图类,实现View接口,并进行@Controller注释

    3.返回字段为类名即可调用视图

    15.重定向

    在目标方法返回的路径前加 forward:/ 和redirect:/

    16.CRUD

    一、按照helloWorld进行配置,再为了能够获取到delete和put请求

    把post请求转为delete或put请求

    web.xml配置

    二、增加操作,使用spring的表单标签,在jsp页面中添加以下代码

    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

    form表单标签可以更快速的开发出表单页面,且更方便的进行表单值的回显,可通过modelAttribute属性指定绑定的模型属性,若没有指定该属性,则默认从request域对象中读取command的表单bean,如果该属性不存在,则会发生错误。request域中的对象,即在handler中存入map的对象。path:表单字段,对应html元素的那么属性,支持级联属性

    <form:form action="emp" method="post" modelAttribute="employee">

        LastName:<form:input path="lastName"></form:input>

    </form:form>

    三、删除操作

    1.SpringMVC处理静态资源

    问题:优雅的REST风格的资源URL不希望带.html或.do等后缀。若将DispatcherServlet请求映射配置为/,则SpringMVC将获取WEB容器的所有请求,包括静态资源的请求,SpringMVC会将他们当成一个普通的请求处理,因此找不到对应的处理器将导致错误。

    解决:再SpringMVC的配置文件中配置

    <mvc:default-servlet-handler/><mvc:annotation-driven></mvc:annotation-driven>

    default-servlet-handler 将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,它会进入DispatcherServlet的请求进行筛选,如果发现是没有经过映射的请求,就将请求交由WEB应用服务器默认的Servlet处理。如果不是静态资源的请求,才由DispatcherServlet继续处理。

    相关文章

      网友评论

          本文标题:Spring MVC 2018-10-18

          本文链接:https://www.haomeiwen.com/subject/tcwszftx.html