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 )

相关推荐
zjw_rp27 分钟前
Spring-AOP
java·后端·spring·spring-aop
Oneforlove_twoforjob40 分钟前
【Java基础面试题033】Java泛型的作用是什么?
java·开发语言
TodoCoder1 小时前
【编程思想】CopyOnWrite是如何解决高并发场景中的读写瓶颈?
java·后端·面试
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行1 小时前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
星河梦瑾2 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富2 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想2 小时前
JMeter 使用详解
java·jmeter
言、雲2 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇2 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表