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 )

相关推荐
·云扬·2 小时前
Java IO 与 BIO、NIO、AIO 详解
java·开发语言·笔记·学习·nio·1024程序员节
求积分不加C2 小时前
Spring Boot中使用AOP和反射机制设计一个的幂等注解(两种持久化模式),简单易懂教程
java·spring boot·后端
枫叶_v2 小时前
【SpringBoot】26 实体映射工具(MapStruct)
java·spring boot·后端
东方巴黎~Sunsiny2 小时前
java-图算法
java·开发语言·算法
2401_857617623 小时前
汽车资讯新趋势:Spring Boot技术解读
java·spring boot·后端
小林学习编程4 小时前
从零开始理解Spring Security的认证与授权
java·后端·spring
写bug的羊羊4 小时前
Spring Boot整合Nacos启动时 Failed to rename context [nacos] as [xxx]
java·spring boot·后端
努力的小陈^O^4 小时前
docker学习笔记跟常用命令总结
java·笔记·docker·云原生
童先生4 小时前
如何将java项目打包成docker 镜像并且可运行
java·开发语言·docker
feilieren4 小时前
SpringBoot 2.x 整合 Redis
java·开发语言·spring