栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring MVC 学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring MVC 学习笔记

Spring MVC

文章目录
    • Spring MVC
      • 一、配置
      • 二、Spring MVC的请求流程
        • 1.DispatcherServlet
        • 2.HandlerMapping (处理器映射)
        • 3.Controller (控制器)
        • 4.返回 DispatcherServlet
        • 5.视图解析器
        • 6.视图
      • 三、Spring MVC 注解
        • 1. @Controller
        • 2. @RequestMapping
        • 3. @PathVariable、 @RequestParam
        • 4. @ModelAttribute
      • 四、Spring MVC 客户端跳转
      • 五、Spring MVC 文件上传

一、配置

出现${pageContext.request.contextPath}失效,原因可能是web.xml的文件头有问题,特别注意version不能过低。

二、Spring MVC的请求流程

1.DispatcherServlet

从请求离开浏览器以后,第一站就是DispatcherServlet,它会拦截所有请求并发送给Spring MVC 控制器。


    dispatcher
    org.springframework.web.servlet.DispatcherServlet
    1


    dispatcher
    
    /

2.HandlerMapping (处理器映射)

处理器映射会根据请求所携带的URL信息来进行决策决定将请求交给哪个控制器处理。


    
        
            
            helloController
        
    


3.Controller (控制器)

一旦选择了合适的控制器, DispatcherServlet 会将请求发送给选中的控制器,到了控制器,请求会卸下其负载(用户提交的请求)等待控制器处理完这些信息:

public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
    // 处理逻辑
    ....
}
4.返回 DispatcherServlet

当控制器在完成逻辑处理后,通常会产生一些信息,这些信息就是需要返回给用户并在浏览器上显示的信息,它们被称为模型(Model)。仅仅返回原始的信息时不够的——这些信息需要以用户友好的方式进行格式化,一般会是 HTML,所以,信息需要发送给一个视图(view),通常会是 JSP。

控制器所做的最后一件事就是将模型数据打包,并且表示出用于渲染输出的视图名**(逻辑视图名)。它接下来会将请求连同模型和视图名发送回 DispatcherServlet。**

5.视图解析器

这样以来,控制器就不会和特定的视图相耦合,传递给 DispatcherServlet 的视图名并不直接表示某个特定的 JSP。(实际上,它甚至不能确定视图就是 JSP)相反,它传递的仅仅是一个逻辑名称,这个名称将会用来查找产生结果的真正视图。

DispatcherServlet 将会使用视图解析器(view resolver)来将逻辑视图名匹配为一个特定的视图实现,它可能是也可能不是 JSP

6.视图

既然 DispatcherServlet 已经知道由哪个视图渲染结果了,那请求的任务基本上也就完成了。

它的最后一站是视图的实现,在这里它交付模型数据,请求的任务也就完成了。视图使用模型数据渲染出结果,这个输出结果会通过响应对象传递给客户端。

三、Spring MVC 注解 1. @Controller

用于声明控制器,从操作上来说有点类似于让类继承AbstractController

同时xml中可以取消相关注释并增加扫描:

    
    

    
	
2. @RequestMapping

用于将路径映射到某方法上。

同事xml中可以取消相关注释:

                                        
    
            
                
                
            
    

如果RequestMapping作用在类上,相当于给所有该类的方法配置的地址增加上这个地址。

3. @PathVariable、 @RequestParam

用于将获取到的参数并匹配,当@RequestMapping的path属性使用URI模板时,可以使用@PathVariable。而@RequestParam则用在与表单提交的值匹配,该注解有三个变量:value、required、defaultvalue

  1. value :指定 name 属性的名称是什么,value 属性都可以默认不写

  2. required :是否必须要有该参数,可以设置为【true】或者【false】

  3. defaultvalue :设置默认值

4. @ModelAttribute

我们先看一个示例:

@ModelAttribute
public void model(Model model) {
    model.addAttribute("message", "注解成功");
}

@RequestMapping("/value")
public String handleRequest() {
    return "test";
}

这样写就会在访问控制器方法 handleRequest() 时,会首先调用 model() 方法将 message 添加进页面参数中去,在视图中可以直接调用,但是这样写会导致该控制器所有的方法都会首先调用 model() 方法,但同样的也很方便,因为可以加入各种各样的数据。

四、Spring MVC 客户端跳转

不管是地址 /hello 跳转到 index.jsp 还是 /test 跳转到 test.jsp,这些都是服务端的跳转,也就是 request.getRequestDispatcher("地址").forward(request, response);

如果要实现客户端跳转我们需要吧返回的ModelView页面设为redirect:路径

五、Spring MVC 文件上传

如果使用注解的方式上传图片并返回是这样实现的:

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {

    @RequestMapping("/upload")
    public void upload(@RequestParam("picture") MultipartFile picture) throws Exception {
        System.out.println(picture.getOriginalFilename());
    }

    @RequestMapping("/test")
    public ModelAndView upload() {
        return new ModelAndView("upload");
    }

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号