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 )

相关推荐
lzjava202425 分钟前
Redis数据结构之List
java·redis
爱的叹息35 分钟前
Spring MVC 框架 的核心概念、组件关系及流程的详细说明,并附表格总结
java·spring·mvc
骑牛小道士2 小时前
java基础 迭代Iterable接口以及迭代器Iterator
java
代码吐槽菌2 小时前
基于微信小程序的智慧乡村旅游服务平台【附源码】
java·开发语言·数据库·后端·微信小程序·小程序·毕业设计
界面开发小八哥2 小时前
企业级Java开发工具MyEclipse v2025.1——支持AI编码辅助
java·ide·人工智能·myeclipse
可问 可问春风3 小时前
Java中的ArrayList方法
java
大苏打seven3 小时前
Java学习笔记(多线程):ReentrantLock 源码分析
java·笔记·学习
白舟的博客3 小时前
做好一个测试开发工程师第二阶段:java入门:idea新建一个project后默认生成的.idea/src/out文件文件夹代表什么意思?
java·开发语言·intellij-idea
凌辰揽月3 小时前
眨眼睛查看密码工具类
java·开发语言·数据库
张张张3123 小时前
4.8学习总结 贪心算法+Stream流
java·学习