SpringMVC的学习

SpringMVC的学习,第1张

SpringMVC的学习

文章目录
  • 一、简介
  • 二、简单的使用
    • 1、导入常用jar包
    • 2、配置前端控制器
    • 3、创建Controller类
    • 4、创建SpringMVC配置文件
    • 5、创建视图view页面
    • 6、配置tomcat服务器,并发布
  • 三、使用注解
    • 1、Controller注解类型
      • 示例用法:
      • 需要导包
    • 2、RequestMapping注解类型
      • ①、@RequestMapping注解的使用
        • (1)、标注在方法上
        • (2)、标注在类上
      • ②、@RequestMapping注解的属性
      • ③、组合注解
      • ④、请求处理方式的参数类型和返回类型
    • 3、ViewResolver(视图解析器)

一、简介

SpringMVC是Spring提供的一个轻量级Web框架,它实现了Web MVC设计模式,且使用起来功能和性能更加优异。

SpringMVC有如下特点:

  • 是Spring框架的一部分,可以方便地利用Spring所提供的其他功能;
  • 灵活性强,易于与其它框架集成;
  • 提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象;
  • 可自动绑定用户输入,并能正确地转换数据类型;
  • 内置了常见的校验器,可以校验用户输入。如果校验不能通过,就会复位到输入表单;
  • 支持国际化,可以根据用户区域显示多国语言
  • 支持多种识图技术
  • 使用基于xml的配置文件,在编辑后,不需要重新编译应用程序。
二、简单的使用 1、导入常用jar包
		
            org.springframework
            spring-webmvc
            5.3.13
        
        
        
            org.springframework
            spring-web
            5.3.13
        

注:使用IDEA编译器,如果导包后不在这里进行设置,将会出现404错误,记住使用IDEA创建SpringMVC项目,必须每次都进行导包!!!!!


2、配置前端控制器

在web.xml中配置SpringMVC的前端控制器DispatcherServlet



    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc-config.xml
        
        
        1
    
    
        springmvc
        
  	    
        /
    
    

3、创建Controller类
//先导入controller接口
public class MyController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //ModelAndView  模型和视图
        ModelAndView mv = new ModelAndView();

        //封装对象,放在ModelAndView中
        mv.addObject("msg", "Hello World");//msg为前端jsp页面中接受ModelAndView对象的id

        //封装要跳转的视图,放在ModelAndView中
        mv.setViewName("/WEB-INF/jsp/hello.jsp"); //  跳转的页面路径/WEB-INF/jsp/hello.jsp
        return mv;
    }
}
4、创建SpringMVC配置文件



    
    

    
    

    
    

    
    


5、创建视图view页面

在WEB-INF目录下创建jsp子目录,在子目录下创建hello.jsp文件,我们使用EL表达式接受后端对象



    Title


${msg}


6、配置tomcat服务器,并发布





我们来分析一下SpringMVC程序的执行流程:

1、用户通过浏览器向服务器发送请求,请求被SpringMVC的前端控制器DispatcherServlet拦截

2、DispatcherServlet拦截请求后,会调用HandlerMapping处理器映射器

3、处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有就生成)一并返回给DispatcherServlet

4、DispatcherServlet会通过返回信息选择合适的HandleAdapter(处理器适配器)

5、HandlerAdapter会调用并执行Handler(处理器),这里的处理器就是程序中编写Controller类,也被称为后端控制器

6、Controller执行完成后,会返回一个ModelAndView对象,该对象中包含视图名或包含模型与视图名

7、HandlerAdapter将ModelAndView对象返回给DispatcherServlet

8、DispatcherServlet会根据ModelAndView对象选择一个合适的ViewResolver(视图解析器)

9、ViewResolver解析后,会向DispatcherServlet中返回一个具体的View(视图)

10、DispatcherServlet对View进行渲染(将模型视图填充至视图中)

11、视图渲染结果后会返回给客户端浏览器中显示

执行过程中,DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver对象的工作是在框架内部执行,开发人员并不需要关心这些对象内部的实现过程,只需要配置前端控制器(DispatcherServlet),完成Controller中的业务处理,并在视图中(View)中展示响应信息即可。

三、使用注解 1、Controller注解类型

Controller注解类型用于指示Spring类的实例是一个控制器,其注解形式为@Controller,该注解在使用时不需要实现Controller接口,只需要将@Controller注解加入到控制器类上,然后通过Spring的扫描机制找到标注了该注解的控制器即可

示例用法:
@Controller
public class MyController {
		......
}

为了保证Spring能够找到控制器类,还需要在SpringMVC的配置文件中添加响应的扫描配置信息

  • 在配置文件的声明中引入spring-context
  • 使用< context:component-scan>元素指定需要扫描的类包



    
    
    
    
    
    
    
    
        
        
    


元素的属性base-package指定了需要扫描的类包为controller。在运行时,该类包及其子包下的所有标注了注解的类都会被Spring所处理,与实现了Controller接口的方式相比,使用注解的方式显然更简单。
同时,Controller接口的实现类只能处理一个单一的请求动作,而基于注解的控制器可以同时处理多个请求动作,在使用上更灵活。因此,在开发中,通常都会使用基于注解的方式

需要导包
		
            org.springframework
            spring-aop
            5.3.13
        
2、RequestMapping注解类型 ①、@RequestMapping注解的使用

Srping通过@Controller注解找到相应的控制器类后,还需要知道控制器内部对每一个请求是如何处理的,这就需要使用RequestMapping注解类型。RequestMapping用于映射一个请求或一个方法,其注解形式为@RequestMapping,可以使用该注解标注在一个方法或者一个类上

(1)、标注在方法上

当标注在方法上时,该方法将成为一个请求处理方法,它会在程序接收到相应的URL请求时被调用

示例:

@Controller
public class MyController {
	//实际访问地址为:localhost:8080/controller
    @RequestMapping(value = "controller")
    public String hello(Model model) {
        model.addAttribute("msg","Hello World");
        return "controller";
    }
}
(2)、标注在类上

当标注在一个类上时,该类中所有方法都将映射为相对于类级别的请求,表示该控制器所处理的所有请求都被映射到value属性值所指定的路径下

@Controller
@RequestMapping(value = "mycontroller")
public class MyController {
	//实际访问地址:localhost:8080/mycontroller/controller
    @RequestMapping(value = "controller")
    public String hello(Model model) {
        model.addAttribute("msg","Hello World");
        return "controller";
    }
}
②、@RequestMapping注解的属性

@RequestMapping注解除了可以指定value属性外,还可以指定一些其他属性

属性名类型描述nameString可选属性,用于为映射地址指定别名valueString[]可选属性,同时也是默认属性,用于映射一个请求和一种方法,可以标注在一个方法或一个类上methodRequestMethod[]可选属性,用于指定该方法用于处理那种类型的请求方式,其请求方式包括GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE和TRACE,例如,method=RequestMethod.GET表示只支持GET请求,如果需要支持多个请求方式,就需要通过“{}”写成数组的形式,并且多个请求直接是有英文逗号分隔的paramsString[]可选属性,用于指定Request中必须包含某些参数的值,才可以通过其标注的方法处理headersString[]可选属性,用于指定Request中必须包含某些指定的header的值,才可以通过其标注的方法处理consumesString[]可选属性,用于指定处理请求的提交内容类型(Content-Type),比如application/json,text/html等producesString[]可选属性,用于指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型

在上表中,所有的属性都是可选的,但是默认属性是value,当value是唯一属性时,可以省略属性名,例如下面两种标注意义相同

@RequestMapping(value="controller")
@RequestMapping("controller")
③、组合注解

简化了Http方法的映射

  • @GetMapping:匹配GET方式的请求
  • @PostMapping:匹配POST方式的请求
  • @PutMapping:匹配PUT方式的请求
  • @DeleteMapping:匹配DELETE方式的请求
  • @PatchMapping:匹配PATCH方式的请求

以GetMapping为例,下面两种注解意义相同

 @RequestMapping(value="controller",method=RequestMethod.GET)
 public String MyController(String id){
 		......
 }
@GetMapping(value="controller")
public String MyController(String id){
		......
}
④、请求处理方式的参数类型和返回类型

参数类型:

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • WebRequest
  • NativeWebRequest
  • Locale
  • Zoneld
  • Reader/InputStream
  • Writer/OutputStream
  • HttpMehod
  • Principal
  • @PathVariable、@MatrixVariable、@RequestParam、@RequestHeader、@RequestBody、@RequestPart、@SessionAttribute、@RequestAttribute注解
  • HttpEntity
  • Model/ModelMap
  • RedirectAttributes
  • BindingResult
  • SessionStatus
  • UrlComponentsBuilder

返回类型

  • ModelAndView
  • Model
  • Map
  • View
  • String
  • void
  • HttpEntity或ResponseEntity
  • Callable
  • DeferredResult

在上述列举的返回类型中,常见的返回类型为ModelAndView、String、void。
其中,ModelAndView类型中可以添加Model数据,并指定视图;
String类型的返回值可以跳转视图,但不能携带数据;
而void类型主要在异步请求时使用,它只返回数据,不跳转视图。

由于ModelAndView类型未能实现数据与视图直接的解耦,因此在开发是,方法的返回类型通常都会用String,既然String类型的返回值不能携带数据,那么在方法中如何将数据代入到视图页面呢?这就用到了上面所讲解的Model参数类型,通过该参数类型即可添加需要在视图中显示的属性。

返回String类型方法的示例代码如下:

    @RequestMapping(value = "test")
    public String hello(HttpServletRequest req,HttpServletResponse res,Model model) throws Exception {
        model.addAttribute("msg","Hello World");
        return "test";//需要在视图解析器中设置才可以这样写,返回的WEB-INF/jsp/test.jsp页面
    }

上述的代码中添加了Model类型的参数,通过该参数实例的addAttribute()方法即可添加所需数据,String类型出了可以返回上述代码的视图页面外,还可以进行复位向和请求转发
(1)、redirect复位向
例如:

@RequestMapping(value = "test")
    public String hello(HttpServletRequest req,HttpServletResponse res,Model model) throws Exception {
        model.addAttribute("msg","Hello World");
        return "redirect:test";//需要在视图解析器中设置才可以这样写,返回的WEB-INF/jsp/test.jsp页面
    }

(2)、forward请求转发
例如:

@RequestMapping(value = "test")
    public String hello(HttpServletRequest req,HttpServletResponse res,Model model) throws Exception {
        model.addAttribute("msg","Hello World");
        return "forward:test";//需要在视图解析器中设置才可以这样写,返回的WEB-INF/jsp/test.jsp页面
    }
3、ViewResolver(视图解析器)

SpringMVC中的试图解析器负责解析视图,可以在springmvc-config.xml配置文件中定义一个ViewResolver来配置视图解析器

    
    	
        
        
        
    

配置好以后,我们在后端代码中,可以直接返回jsp中的页面,不需要再写/WEB-INF/jsp/*.jsp,只需要写 * 即可

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5693544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存