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

SpringMVC

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

SpringMVC

SpringMVC:
SpringMVC简介:

SpringMVC是基于Spring的一个框架 , 实际上就是spring的一个模块 , 专门是做web开发的 , 是servlet的升级版web开发底层就是Servlet , 框架是在servlet基础之上加入一些功能 , 让你做web开发方便 ,springMVC就是一个Spring , spring就是一个容器 , ioc能够管理对象 , 使用 , @Component , @Repository , @Service , @ControllerSpringMVC能够创建对象 , 放入到容器中(SpringMVC容器) , Springmvc容器中放的是控制器对象 ,

我们要做的就是 : 使用@Controller创建对象 , 把对象放入到Springmvc容器中 , 把创建的对象作为控制器使用 , 这个控制器对象能够接收用户的请求 , 显示处理结果 , 就当做是一个servlet使用

使用**@Controller 注解创建的是一个普通类的对象** , 不是servlet , SpringMVC赋予了控制器对象一些额外的功能

web开发底层是servlet , springmvc中有一个对象是servlet : DispatherServlet(中央调度器)

DispatcherServlet : 负责接收用户的所有请求 , 用户把请求给了DispatcherServlet, 之后 , DispatcherServlet把请求转发给我们的Controller对象 , 最后是Controller对象处理请求


SpringMVC优点 :

1.基于MVC架构 ,

功能分工明确 , 解耦合 2.容易理解 , 上手快 , 解耦合

就可以开发一个注解的SpringMVC项目 , SpringMVC也是轻量级的 , jar很小 , 不依赖特定的接口和类 3.作为Spring框架的一部分 , 能够使用Spring的 IOC , 和AOP , 方便整合Strtus , MyBatis , Hibernate , JPA等其他框架4.SpringMVC强化注解的使用 , 在控制器 , Service , Dao都可以使用注解 , 方便灵活 ,

使用@Controller创建处理器对象 , @Service创建业务对象 , @Autowired 或者 @Resource在控制器类中注入Service , Service类中注入Dao


SpringMVC快速入门:


配置SpringMVC核心控制器DispatcherServlet , 在web.xml文件中配置

    
        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
        1
    
    
        DispatcherServlet
        
        /
    

创建Controller类和视图页面 , 并且配置业务方法的映射地址

@Controller
public class UserController {
    //请求映射
    @RequestMapping("/save")
    public String save(){
        System.out.println("Controller save Running...");
        //return 直接就是对应的资源文件
        return "success.html";
        //这里默认的就是转发的方式 , 如果想要使用重定向 , 就要在访问路径前边加上一个 , redirect:
    }
}

配置Spring-MVC的核心配置文件 spring-mvc.xml

使用的是spring的主配置文件模板


在上边的xml文件中的前端控制器中 , 配置初始化参数 : 将spring-mvc.xml文件加载进去

    
        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
        
        1
    
    
        DispatcherServlet
        
        /
    

SpringMVC注解解析: @Controller :
@RequestMapping : 请求映射

用于建立请求URL与处理请求方法之间的对应关系
位置 :
类上 : 请求URL的第一级访问目录 , 此处不写的话 , 就相当于应用的根路径
方法上 : 请求URL的第二级访问目录 , 与类上使用@RequestMapping标注的一级目录一起组成访问虚拟路径

属性 :
value : 用于指定请求的URL , 它和path属性的作用是一样的
method : 用于指定请求的方式
params : 用于指定限制请求参数的条件 , 它支持简单的表达式 , 要求请求参数的key和value必须和配置的一模一样

例如 : params = {“accountName”} , 表示请求参数必须有accountNameparams = {“money!100”} 表示请求参数中money不能是100

@Controller
@RequestMapping("/user")//一级访问
public class UserController {
    //请求映射 , 如果类上边没写这个注解 , 那么访问路径就是直接使用/save 即可 ,
    // 如果类上边也有这个注解 , 那么访问路径就是 , /user/save
    @RequestMapping(value = "/save",method = RequestMethod.POST) //二级访问
    public String save(){
        System.out.println("Controller save Running...");
        //return 直接就是对应的资源文件
        return "success.jsp";
        //前边什么都不写,就是相对位置,
        //在使用请求路径,/user/save时,进行跳转,会寻找/user/success.jsp
        //所以这里要加一个 / , 表示从项目的根路径下找资源
        //    "/success.jsp";
    }
}

spring-mvc组件扫描器的其他用法 :

spring-mvc.xml文件

    
        
        

        
        
    

spring-mvc配置文件的其他配置 :(了解)

spring-mvc配置文件除了可以配置组件扫描之外 , 还可以配置其他组件

这些组件在spring-mvc的jar下的DispatcherServlet.properties文件中可以看到 , 可以指定其中的一些属性 , (比较深层次 , 了解即可)使用的是 和 这些标签完成的功能

可以修改那些带有set方法的参数内容:


各个组件的名称 , 以及功能 :

DispatcherServlet : 前端控制器

需要我们手动配置的 , 帮助我们调用其他的一些功能组件 HandlerMapping : 处理器映射器

帮我们解析请求 , 返回一个处理器执行链 HandlerAdapter : 处理器配适器

被前端处理器调用 , 帮我们去执行对应的处理器 Handler : 处理器

相当于就是 Controller View Resolver : 视图解析器

帮我们将view解析出来 View : 视图

封装了视图的一些信息

在Spring-MVC的各大组件中 , 处理器映射器 , 处理器配适器 , 视图解析器 , 称为Spring-MVC的三大组件


SpringMVC的数据响应:

你想使用那些对象 , 都可以在方法的参数中 , 添加这个对象 , Spring-MVC内部都可以进行创建 , 并且将其放在域中 , 你在方法中直接使用就可以了

(1)页面跳转

直接返回字符串

此种方式会将返回的字符串与视图解析器的前后缀进行拼接后跳转

通过ModelAndView对象返回

@RequestMapping(value = "/save2")
public ModelAndView save2(){
    
   ModelAndView modelAndView = new ModelAndView();
   //设置模型数据 , 在页面中配合el表达式 , 来获取数据
   modelAndView.addObject("username","sichen");
   //设置视图 :
   modelAndView.setViewName("/success.jsp");
   return modelAndView;
}

或者直接在参数中添加 , Spring-MVC会根据你的参数 ,自动给你创建一个ModelAndView对象存储到容器中

@RequestMapping(value = "/save3")
    public ModelAndView save3(ModelAndView modelAndView){
        //设置模型数据 , 在页面中配合el表达式 , 来获取数据
        modelAndView.addObject("username","sichen");
        //设置视图 :
        modelAndView.setViewName("/success.jsp");
        return modelAndView;
    }
(2)写回数据

直接返回字符串

(1)通过Spring-MVC框架注入的response对象 , 使用response.getWriter().print(“hello world”)回写数据, 此时不需要视图跳转 , 业务方法返回值为 void

@RequestMapping(value = "/save4")
public void save4(HttpServletResponse response) throws IOException {
        response.getWriter().print("思尘");
    }

(2)如果你想直接返回字符串 , 而不是使用response对象 , 那么就需要使用@ResponseBody注解 , 告诉SpringMVC框架 , 方法返回的字符串不是跳转 , 而是直接在http响应体中返回

//使用@ResponseBody 
//告诉SpringMVC 不进行跳转 , 返回的字符串是直接响应的
    @ResponseBody
    @RequestMapping(value = "/save5")
    public String save5() throws IOException {
        return "hello sichen";
    }

返回对象或集合

//使用json返回数据 , 将数据的转换工作交给springmvc完成
    @ResponseBody
    @RequestMapping("/save7")
    //期望SpringMVC自动将User转换为json格式的字符串
    public User save7() throws JsonProcessingException {
        User user = new User();
        user.setName("思尘");
        user.setAge(21);
        return user;
    }

这个工作需要你在springmvc.xml文件中配置处理器映射器


    
        
            
			
        
    


简便方式配置处理器映射器 , 是返回数据自动转换为json类型数据

上边配置配置处理器映射器 , 的时候配置是比较繁琐的 , 这里springmvc提供了一个注解驱动代替上边的配置 ,


在SpringMVC的各大组件中 , 处理器映射器 , 处理器配适器 , 视图解析器 , 称为SpringMVC的三大组件 ,
使用 自动加载处理器映射器 ,
处理器适配器 , 可用在Spring-MVC的配置文件中使用 , 替代注解处理器和配适器的配置

同时 , 使用mvc:annotation-driven 默认底层就会集成jackson进行对象或集合的json格式字符串的转换


SpringMVC获得请求数据: (1)获得请求参数 :

客户端请求参数的格式是 : name=value&age=value…

服务器端获得请求的参数 , 有时还需要进行数据的封装 , SpringMVC可以接收如下类型的参数 :

基本类型参数POJO类型参数 (bean)数组类型的参数集合类型的参数


获得基本类型的参数 :

Controller中的业务方法的参数名称要与请求参数的name一致 , 参数值会自动映射匹配 , 会自动获取请求参数的值

请求 : http://localhost:8080/request/save1?name=思尘&age=21

 @RequestMapping("/save1")
    @ResponseBody
    //请求中的参数名称和方法参数中的name一致时 , springMVC会自动进行赋值
    // http://localhost:8080/request/save1?name=思尘&age=21
    public User save1(User user,String name,int age){
        user.setName(name);
        user.setAge(age);
        return user;
        // {"name":"思尘","age":21}
    }

获得POJO类型参数 :

Controller中的业务方法的POJO参数的属性与请求参数的name一致 , 参数值会自动映射匹配 , springMVC会自动对请求参数进行封装

//请求参数中的name名和一个bean对象中的参数一致时 , springMVC会自动进行封装
    // http://localhost:8080/request/save2?name=思尘&age=21
    @RequestMapping("/save2")
    @ResponseBody
    public User save2(User user){
        return user;
        // {"name":"思尘","age":21}
    }

获取数组类型的参数:

Controller中的业务方法数组名称与请求参数中的name一致 , 参数值会自动映射匹配

//获取请求参数中重复的值 , 比如说爱好..
    // http://localhost:8080/request/save3?strs=思尘&strs=闻熙灏
    @RequestMapping("/save3")
    @ResponseBody
    public List save3(String[] strs){
        return Arrays.asList(strs);
        // ["思尘","闻熙灏"]
    }

获取集合类型参数:

获取集合参数的时候 , 要将集合的参数包装到一个POJO中才可以

//domain : VO
private List userList;


@RequestMapping("/save4")
@ResponseBody
public void save4(VO vo){
    System.out.println(vo);
}

from表单 : 使用js :


<%--表示是第几个User对象的username--%> 






使用ajax请求的方式请求数据 :

 
 @RequestMapping("/save5")
    @ResponseBody
    //这里需要在参数前添加一个注解 @RequestBody
    public void save5(@RequestBody List userList){
        System.out.println(userList);
    }

找不到js文件的解决方式 :

这里是应为在web.xml中注册spring-mvc的前端控制器的时候 , 使用的是缺省的路径格式 , 这会导致在请求数据的时候 , 会将js的文件的名称也当做一个请求路径来请求 , 这样就导致 , 请求不到对应的资源

在springmvc.xml文件中添加 :

 

 

② : 配置异常处理器



③ : 编写异常页面

④ : 测试异常跳转


在配置了这些之后 , 再有异常就直接往上层抛即可 , 我们配置了一个异常的处理类 , 会帮助我们处理这些异常

 * @param o Object
 * @param e Exception : 参数Exception : 异常对象
 * @return 返回值 , ModelAndView , 跳转到错误视图信息
 */
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    ModelAndView modelAndView = new ModelAndView();
    if (e instanceof MyException){
        //判断e , 是不是MyException的实例
        modelAndView.addObject("info","自定义异常");
    }else if (e instanceof ClassCastException){
        modelAndView.addObject("info","类转换异常");
    }
    modelAndView.setViewName("error");
    return modelAndView;
}
② : 配置异常处理器

```xml



③ : 编写异常页面

④ : 测试异常跳转


在配置了这些之后 , 再有异常就直接往上层抛即可 , 我们配置了一个异常的处理类 , 会帮助我们处理这些异常

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

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

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