SpringMVC

七、SpringMVC

(1)SpringMVC简介

SpringMVC概述
  • SpringMVC技术与Servlet技术功能等同,均属于web层开发技术,web程序大都基于三层架构实现
  • 如果所有的处理都交给Servlet来处理的话,所有的东西都耦合在一起,对后期的维护和扩展极为不利

将后端服务器Servlet拆分成三层,分别是webservicedao
  • web层主要由servlet来处理,负责页面请求和数据的收集以及响应结果给前端

  • service层主要负责业务逻辑的处理

  • dao层主要负责数据的增删改查操作

  • servlet处理请求和数据的时候,存在的问题是一个servlet只能处理一个请求

针对web层进行了优化,采用了MVC设计模式,将其设计为controllerviewModel
  • controller负责请求和数据的接收,接收后将其转发给service进行业务处理

  • service根据需要会调用dao对数据进行增删改查

  • dao把数据处理完后将结果交给service,service再交给controller

  • controller根据需求组装成Model和View,Model和View组合起来生成页面转发给前端浏览器

  • 这样做的好处就是controller可以处理多个请求,并对请求进行分发,执行不同的业务操作。

SpringMVC==主要==负责的就是
  • controller如何接收请求和数据

  • 如何将请求和数据转发给业务层

  • 如何将响应数据转换成json发回到前端

定义
  • SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

优点
  • 使用简单、开发便捷(相比于Servlet)

  • 灵活性强

(2)Spring入门案例

Servlet是如何进行开发的?
  • 1.创建web工程(Maven结构)

  • 2.设置tomcat服务器,加载web工程(tomcat插件)

  • 3.导入坐标(Servlet)

  • 4.定义处理请求的功能类(UserServlet)

复制代码
@WebServlet("/user/save")
public class UserSave extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException{
        //1.接受请求参数
        String name = req.getParameter("name");
        System.out.println("servlet save name ==>"+name);
        //2.产生相应
        res.setContentType("text/json;charset=utf-8");
        PrintWriter writer = res.getWriter();
        writer.write("{'module':'servlet save'}");
    }
    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        this.doGet(req,res);
    }
}
  • 5.设置请求映射(配置映射关系) ==》xml

SpringMVC的实现流程?
  • 1.创建web工程(Maven结构)

  • 2.设置tomcat服务器,加载web工程(tomcat插件)

  • 3.导入坐标(SpringMVC+Servlet) ,同时添加tomcat插件
复制代码
<dependencies>
    <!--1.导入springmvc和servlet依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.19</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.3</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-core</artifactId>
      <version>9.0.83</version>
    </dependency>
</dependencies>
<build>
    <finalName>SpringMVC_01_quickstart</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-api</artifactId>
        <version>7.0.37</version>
      </plugin>
    </plugins>
</build>
  • 4.定义处理请求的功能类(UserController)
复制代码
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/save")
    public String save(String name){
        System.out.println("springmvc user save name==>"+name);
        return "{'info':'springmvc save'}";
    }
    @RequestMapping("/delete")
    public String delete(String name){
        System.out.println("springmvc user delete name==>"+name);
        return "{'info':'springmvc delete'}";
    }
    @RequestMapping("/update")
    public String update(String name){
        System.out.println("springmvc user update name==>"+name);
        return "{'info':'springmvc update'}";
    }
    @RequestMapping("/find")
    public String find(String name){
        System.out.println("user find name==>"+name);
        return "{'info':'springmvc find'}";
    }
}
  • 5.设置请求映射(配置映射关系)==》配置类替代xml配置文件
复制代码
//springmvc配置类
@Configuration
@ComponentScan({"com.presentationLayer.controller"})
public class SpringMVCConfig{...}
//web容器配置类
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    //产生springMVC对象,本质上还是spring容器
    protected WebApplicationContext createServletApplicationContext() {
        //初始化web容器
        AnnotationConfigWebApplicationContext ctx =
                                        new AnnotationConfigWebApplicationContext();
        //加载springMVC配置类
        ctx.register(SpringMVCConfig.class);
        return ctx;
    }
​
    //设置由springmvc控制器处理的请求映射路径
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
​
    //加载spring配置类
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}
  • 6.将SpringMVC设定加载到Tomcat容器中
复制代码
protected WebApplicationContext createServletApplicationContext() {
    //初始化web容器
    AnnotationConfigWebApplicationContext ctx = 
                                        new AnnotationConfigWebApplicationContext();
    //加载springMVC配置类
    ctx.register(SpringMVCConfig.class);
    return ctx;
}
  • 7.启动tomcat服务器

  • 原因:由于业务有json数据类型的返回值,需要在方法体上使用@ResponseBody进行指定该方法返回一个json数据格式的返回值
复制代码
@RequestMapping("/save")
//设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
@ResponseBody
public String save(String name){
    System.out.println("springmvc user save name==>"+name);
    return "{'info':'springmvc save'}";
}
...
    • 8.总结

      • 一次性工作

        • 创建工程,设置服务器,加载工程

        • 导入坐标 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径 SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)

      • 多次工作

        • 定义处理请求的控制器类

        • 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据 (@ResponseBody )

相关推荐
黄名富6 分钟前
Kafka 日志存储 — 日志索引
java·分布式·微服务·kafka
m0_7482550218 分钟前
头歌答案--爬虫实战
java·前端·爬虫
小白的一叶扁舟36 分钟前
深入剖析 JVM 内存模型
java·jvm·spring boot·架构
sjsjsbbsbsn1 小时前
基于注解实现去重表消息防止重复消费
java·spring boot·分布式·spring cloud·java-rocketmq·java-rabbitmq
苹果醋31 小时前
golang 编程规范 - Effective Go 中文
java·运维·spring boot·mysql·nginx
chengpei1471 小时前
实现一个自己的spring-boot-starter,基于SQL生成HTTP接口
java·数据库·spring boot·sql·http
等一场春雨2 小时前
Java设计模式 十二 享元模式 (Flyweight Pattern)
java·设计模式·享元模式
努力搬砖的程序媛儿4 小时前
uniapp悬浮可拖拽按钮
java·前端·uni-app
上海拔俗网络4 小时前
“AI开放式目标检测系统:开启智能识别新时代
java·团队开发
Leaf吧4 小时前
springboot 配置多数据源以及动态切换数据源
java·数据库·spring boot·后端