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

【SpringMVC】SpringMVC基础

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

【SpringMVC】SpringMVC基础

目录

1、MVC简介

1.1、JSP+JavaBean模式

1.2、Servlet+JSP+JavaBean模式

1.3、MVC优缺点

2、SpringMVC

2.1、什么是SpringMVC:

2.2、优点:

3、第一个SpringMVC程序

3.1、项目结构

3.2、搭建环境

3.3、SpringMVC配置

3.4、底层原理分析

4、使用注解开发SpringMVC

4.1、项目结构:

4.2、项目步骤

5、@RequestMapping详解

5.1、解析源码

5.2、简单实例

5.3、method 属性

5.3、使用RestFul风格

6、乱码处理

7、JSON

7.1、什么是JSON

7.2、JSON语法规则

7.3、JSON与JS关系

8、Jackson

8.1、实例

8.2、自定义ObjectMapper获取工具包

8.3、项目结构


1、MVC简介

MVC 设计模式一般指 MVC 框架,M(Model)指数据模型层,V(View)指视图层,C(Controller)指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离,使同一个程序可以有不同的表现形式。其中,View 的定义比较清晰,就是用户界面。

官方配置文件:Web on Servlet Stack

  • View(视图):jsp

    • 负责格式化数据并把它们呈现给用户,包括数据展示、用户交互、数据验证、界面设计等功能。

  • Controller(控制器):servlet

    • 负责接收并转发请求,对请求进行处理后,指定视图并将结果发送给客户端。

  • Model(模型):dao,service,JavaBean

    • 模型对象拥有最多的处理任务,是应用程序的主体部分,负责数据逻辑(业务规则)的处理和实现数据操作即在数据库中存取数据。

SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式。

1.1、JSP+JavaBean模式
  • y优点:适合开发业务逻辑不太复杂的web应用程序,这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,又显示数据。

  • 缺点:JSP+JavaBean 模式中 JSP 身兼数职,既要负责视图层的数据显示,又要负责业务流程的控制,结构较为混乱,并且也不是我们所希望的松耦合架构模式,所以当业务流程复杂的时候并不推荐使用。

 

1.2、Servlet+JSP+JavaBean模式
  • Servlet+JSP+JavaBean 中 Servlet 用于处理用户请求,JSP 用于数据显示,JavaBean 用于数据封装,适合复杂的 Web 程序。

  • 相比 JSP+JavaBean 模式来说,Servlet+JSP+JavaBean 模式将控制层单独划分出来负责业务流程的控制,接收请求,创建所需的 JavaBean 实例,并将处理后的数据返回视图层(JSP)进行界面数据展示。

  • Servlet+JSP+JavaBean 模式的结构清晰,是一个松耦合架构模式,一般情况下,建议使用该模式。

 

1.用户发送请求

2.Servlet接收请求,并调用对应的业务逻辑方法处理

3.业务处理完后,返回更新后的数据给servlet

4.servlet转向给jsp,由jsp渲染页面

5.响应给用户更新后的页面

1.3、MVC优缺点

优点:

  • 多视图共享一个模型,大大提高了代码的可重用性

  • MVC 三个模块相互独立,松耦合架构

  • 控制器提高了应用程序的灵活性和可配置性

  • 有利于软件工程化管理

总的来说,可以通过 MVC 设计模式打造出一个松耦合+高可重用性+高可适用性的完美架构。

缺点:

  • 原理复杂

  • 增加了系统结构和实现的复杂性

  • 视图对模型数据的低效率访问

MVC 并不适合小型甚至中型规模的项目,花费大量时间将 MVC 应用到规模并不是很大的应用程序,通常得不偿失,所以对于 MVC 设计模式的使用要根据具体的应用场景来决定。

2、SpringMVC

2.1、什么是SpringMVC:
  • Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。

  • SpringMVC是由Servlet+JSP+JavaBean实现的。

  • Spring 框架提供了构建 Web应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架

  • 它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所具有的优势。而且框架本身有代码,看起来容易理解。

  • 在 Spring MVC 框架中,Controller 替换 Servlet 来担负控制器的职责,用于接收请求,调用相应的 Model 进行处理,处理器完成业务处理后返回处理结果。Controller 调用相应的 View 并对处理结果进行视图渲染,最终客户端得到响应信息。

2.2、优点:
  • 易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试。

  • 清晰地角色划分,Spring MVC 在 Model、View 和 Controller 方面提供了一个非常清晰的角色划分,这 3 个方面真正是各司其职,各负其责。

  • 灵活的配置功能,可以把类当作 Bean 通过 XML 进行配置。

  • 提供了大量的控制器接口和实现类,开发者可以使用 Spring 提供的控制器实现类,也可以自己实现控制器接口。

  • 面向接口编程

  • Spring MVC 框架采用松耦合可插拔的组件结构,具有高度可配置性,比起其它 MVC 框架更具有扩展性和灵活性。

  • 真正做到与 View 层的实现无关。它不会强制开发者使用 JSP,可以根据项目需求使用 Velocity、FreeMarker 等技术。

3、第一个SpringMVC程序

3.1、项目结构

 

3.2、搭建环境

1.创建父工程SpringMVC并删除src文件

 

2.建立一个SpringMVC-01子项目,添加Web app支持

 

右键子项目-->Add frameworks Support-->Web Application-->ok创建成功

3.导入SpringMVC的jar依赖

Spring MVC 依赖 JAR 文件包括 Spring 的核心 JAR 包和 commons-logging 的 JAR 包。

 

    
    
        javax.servlet
        javax.servlet-api
        3.1.0
    
    
        javax.servlet.jsp
        jsp-api
        2.2
    
​
    
    
        org.springframework
        spring-web
        5.2.3.RELEASE
    
    
        org.springframework
        spring-webmvc
        5.2.3.RELEASE
    
    
        org.springframework
        spring-context
        5.2.3.RELEASE
    
    
        org.springframework
        spring-test
        5.2.3.RELEASE
    
    
        org.springframework
        spring-jdbc
        5.2.3.RELEASE
    
    
        com.github.stefanbirkner
        system-rules
        1.16.1
        test
    
    
        org.aspectj
        aspectjweaver
        1.8.9
    

 

3.3、SpringMVC配置

Spring MVC 是基于 Servlet 的,DispatcherServlet 是整个 Spring MVC 框架的核心,主要负责截获请求并将其分派给相应的处理器处理。所以配置 Spring MVC,首先要定义 DispatcherServlet。跟所有 Servlet 一样,用户必须在 web.xml 中进行配置。

1.注册DispatcherServlet

在web.xml中部署DispatcherServlet:

springMVC


    springmvc
    org.springframework.web.servlet.DispatcherServlet
    
    
        contextConfigLocation
        classpath:springmvc-servlet.xml
    
    
    
    1



    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc-servlet.xml
        
        
        
        1
    
    
    
    
        springmvc
        
        /
    
    
    
        encoding
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encoding
        /*
    

3、在resources下配置springmvc-servlet.xml



​
    
    
​
    
    
        
        
        
        
    

4、编写实体类User,目的:将User里面的信息输出给前端页面

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
    private String sex;
​
}

5、创建UserController类实现方法

@Controller
public class UserController {
    @RequestMapping("/json1")
    @ResponseBody   //通过这个注解,不会走视图解析器,会直接返回一个字符串,也可以直接在类上使用@RestController,替换掉@Controller和@ResponseBody ,表明这个类下的所有方法都不走视图解析器
    public String json1() throws JsonProcessingException {
        //Jackson
        ObjectMapper mapper = new ObjectMapper();
​
        //创建一个对象
        User user = new User("张三", 21, "男");
​
        String str = mapper.writevalueAsString(user);
        return str;
    }
}

返回结果:

{"name":"??","age":21,"sex":"?"}

6、解决乱码问题

  • 手动解决

    • @RequestMapping(value = "/json1",params = "application/json;charset=utf-8")

  • SpringMVC配置统一指定:在SpringMVC的配置文件上添加一段消息StringHttpMessageConverter转换配置

    • 
          
              
                  
              
              
                  
                      
                          
                      
                  
              
          
      

8.2、自定义ObjectMapper获取工具包

如果每次传输数据都要去new一个ObjectMapper会很麻烦,所有创建一个工具包,自动new

1、创建一个工具包类

public class JsonUtil {
    //实现代码的复用
    public static String getJson(Object obj) {
        return getJson(obj,"yyy-MM-dd HH:mm:ss");   //自己标准化的时间格式
    }
​
    public static String getJson(Object obj,String dateFormat){
        ObjectMapper mapper = new ObjectMapper();
​
        //不使用时间戳方式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        //自定义时间格式
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);    //自定义时间格式
        mapper.setDateFormat(sdf);
        try {
            return mapper.writevalueAsString(obj);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

2、调用工具包里的方法获取时间

@RequestMapping(value = "/json3")
//@ResponseBody   //通过这个注解,不会走视图解析器,会直接返回一个字符串
public String json3() throws JsonProcessingException {
    Date date = new Date();
​
    return JsonUtil.getJson(date);
}

结果

"2021-12-02 01:15:51"

3、调用工具包里的方法,输出一个list

@RequestMapping(value = "/json2")
//@ResponseBody   //通过这个注解,不会走视图解析器,会直接返回一个字符串
public String json2() throws JsonProcessingException {
​
    //创建一个对象
    List userList = new ArrayList();
    User user1 = new User("老1", 21, "男");
    User user2 = new User("老2", 21, "男");
    User user3 = new User("老3", 21, "男");
​
    userList.add(user1);
    userList.add(user2);
    userList.add(user3);
​
    return JsonUtil.getJson(userList);
}

结果

[{"name":"老1","age":21,"sex":"男"},{"name":"老2","age":21,"sex":"男"},{"name":"老3","age":21,"sex":"男"}]

 

8.3、项目结构

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

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

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