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

SpringMVC个人学习总结

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

SpringMVC个人学习总结

目录

1、回顾servlet

2、初识SpringMVC

配置SpringMVC

3、SpringMVC运行原理

4、使用注解开发SpringMVC

5、Restful风格

6、重定向与转发

7、接收前端参数和参数回显

1.直接接收

 2.当提交的域名称和处理方法的参数名不一致时

3.数据显示到前端

8、乱码问题

9、JSON

Controller返回JSON数据

 FastJson


1、回顾servlet

        1.导入Maven依赖

    
        
            junit
            junit
            4.11
        
        
            org.springframework
            spring-webmvc
            5.3.13
        
        
            javax.servlet
            servlet-api
            2.5
        
        
            javax.servlet.jsp
            jsp-api
            2.1
        
        
            javax.servlet.jsp.jstl
            jstl
            1.2
        
    

2.编写servlet类,处理用户请求

3.编写Hello.jsp,在WEB-INF下新建一个jsp文件夹,新建一个hello.jsp

4.编写一个form表单提交

6.在web.xml中配置servlet

6.配置Tomcat,并启动测试

2、初识SpringMVC

SpringMVC的特点:

        1、轻量级,简单易学

        2、高效,基于请求响应的MVC框架

        3、与Spring兼容性好,无缝结合

        4、约定大于配置

        5、功能强大:RESTful、数据验证、格式化、本地化、主体等

        6、简洁灵活

配置SpringMVC

1.新建一个Moudle,添加web支持

2.确定导入了SpringMVC依赖

3.配置web.xml,注册DispatcherServlet

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

4.编写springmvc的配置文件,名称为springmvc-servlet.xml,

5.添加处理映射器

6.添加处理适配器

7.添加视图解析器




    
    
    
    
    
    
        
        
        
        
    


8.编写操作业务Controller,要么实现Controller接口,要么增加注解,需要返回一个ModelAndView,装数据,封视图

9.将自己的类交给springIOC容器,注册Bean

10.写要跳转的jsp页面,显示ModelAndView存放的数据,以及我们的正常页面

11.配置tomcat启动测试

可能遇到的问题:访问出现404,排查步骤:

1. 查看控制台输出,看一下是不是缺少了什么jar包

2.如果jar包存在,显示无法输出,就在IDEA项目发布中,添加lib依赖

3.重启Tomcat

3、SpringMVC运行原理

1、用户发起请求,前端控制器DispatcherServlet接收请求并且拦截请求

2、前端控制器DispatcherServlet调用处理映射器HandlerMapping,映射器根据请求的url查找具体的Handler

3、HandlerExecution就是一个具体的Handler,作用为根据url查找控制器

4、HandlerExecution将解析后的信息返回给DispatcherServlet

5、DispatcherServlet再讲接收到的信息给处理适配器HandlerAdapter,按照特定的规则去执行Handler

6、将Handler交给具体的控制器Controller去执行

7、Controller把具体执行的信息返回给HandlerAdapter,例如ModelAndView

8、HandlerAdapter再把接收到的视图逻辑名或者模型返回给DispatcherServlet

9、DispatcherServlet调用视图解析器ViewResolver解析从适配器那里接收到的视图逻辑名

10、ViewResolver将解析的视图逻辑名返回给DispatcherServlet

11、DispatcherServlet根据接收到的视图逻辑名结果,调用具体的视图

12、最后将视图呈现给用户

4、使用注解开发SpringMVC

1.新建一个Model,添加web支持

2.导入依赖(父类实现了就可跳过这一步)

3.配置web.xml

        注意点:

                1、注意web.xml版本,要最新版

                2、检查项目结构中是否有lib文件,若没有则创建并导入jar包

注册DispatcherServlet

关联SpringMVC配置文件

启动级别为1

路径映射为/ 【不要用/*,会报404】

死代码,配置就用这个 

4.添加SpringMVC配置文件

让IOC的注解生效

静态资源过滤:html,js,css,图片,视频等

配置视图解析器

    
    
    
    

    

    
    
        
        
        
        
    

 使用时候只用修改扫描的包的路径

5.创建一个controller类

@Controller是为了让Spring IOC容器初始化时自动扫描到;

 @RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello

方法中声明Model类型的参数是为了把Action中的数据带到视图中;

方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp

6.创建视图层

7.配置Tomcat运行

使用springMVC必须配置的三大件:

处理器映射器、处理器适配器、视图解析器

通常,我们只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置

5、Restful风格

概念

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

功能

资源:互联网所有的事物都可以被抽象为资源

资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。

分别对应 添加、 删除、修改、查询。

实现

1.新建一个RestFulController

以前的方法

 

 RestFul风格则是在Spring MVC中可以使用  @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。

 

使用method属性指定请求类型

用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

增加一个方法

浏览器地址栏默认是Get请求,会报405

 修改为GET就正常了

一个是@PostMapping,一个是@GetMapping,结果走的是@GetMapping

 当前端声明了走post时   ps:a.jsp放在web文件路径下,不是WEB-INF文件路径 

提交后用post方法

依旧走get方法

这就是用了Restful以后为什么url地址相同,通过提交方式不一样,产生了不一样的结果 

6、重定向与转发

        通过SpringMVC来实现转发和重定向 - 无需视图解析器;

将视图解析器注释掉

设置绝对路径转发

forward转发

redirect重定向,/m1/t1直接跳转到index.jsp页面

 有视图解析器的时候,转发可直接实现

重定向 , 不需要视图解析器 , 本质就是重新请求一个新地方 , 所以要注意路径问题.

可以重定向到另外一个请求实现 .

7、接收前端参数和参数回显

1.直接接收

编写实体类

接收前端参数

 

什么都不输入,页面为空,控制台输出为null

输入参数,控制台成功接收

2.当提交的域名称和处理方法的参数名不一致时

添加@RequestParam("xxx")注解

测试

 

 

3.数据显示到前端

第一种,通过ModelAneView

第二种,通过ModelMap

@RequestMapping("/hello")
public String hello(@RequestParam("username") String name, ModelMap model){
   //封装要显示到视图中的数据
   //相当于req.setAttribute("name",name);
   model.addAttribute("name",name);
   System.out.println(name);
   return "hello";
}

第三种,通过Model

@RequestMapping("/ct2/hello")
public String hello(@RequestParam("username") String name, Model model){
   //封装要显示到视图中的数据
   //相当于req.setAttribute("name",name);
   model.addAttribute("msg",name);
   System.out.println(name);
   return "test";
}

对比

就对于新手而言简单来说使用区别就是:

Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;

ModelMap 继承了 linkedMap ,除了实现了自身的一些方法,同样的继承 linkedMap 的方法和特性;

ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。

8、乱码问题

编写一个form表单

 用post方法

测试

 

出现乱码

注意!!!!

在SpringMVC中,/  &  /*

/:只匹配所有请求,不会去匹配jsp页面
/*:匹配所有请求,包括jsp页面

以前乱码问题通过过滤器解决 , 而SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置

    
    
        encoding
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encoding
        /*
    

 

修改xml文件后重启服务器问题解决~

 

9、JSON
  • JSON(Javascript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。

  • 采用完全独立于编程语言的文本格式来存储和表示数据。

  • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

  • 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

在 Javascript 语言中,一切都是对象。因此,任何Javascript 支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。看看他的要求和语法格式:

  • 对象表示为键值对,数据由逗号分隔

  • 花括号保存对象

  • 方括号保存数组

JSON 键值对是用来保存 Javascript 对象的一种方式,和 Javascript 对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值:

{"name": "QinJiang"}
{"age": "3"}
{"sex": "男"}

很多人搞不清楚 JSON 和 Javascript 对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:

JSON 是 Javascript 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串

JSON 和 Javascript 对象互转

要实现从JSON字符串转换为Javascript 对象,使用 JSON.parse() 方法:

var obj = JSON.parse('{"a": "Hello", "b": "World"}');
//结果是 {a: 'Hello', b: 'World'}

要实现从Javascript 对象转换为JSON字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: 'Hello', b: 'World'});
//结果是 '{"a": "Hello", "b": "World"}'

Controller返回JSON数据

1.导jar包

    
        com.fasterxml.jackson.core
        jackson-databind
        2.13.0
    

2.配置SpringMVC的web.xml和springmvc-servlet.xml

3.编写一个实体类(使用注解需导入lombok的jar包)

4.编写Controller

注解@ResponseBody   添加以后它就不会走视图解析器,会直接返回一个字符串

 

 

发现出现了乱码问题,我们需要设置一下他的编码格式为utf-8,以及它返回的类型;

通过@RequestMaping的produces属性来实现,修改下代码

    @RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")

 

乱码统一解决

上一种方法比较麻烦,如果项目中有许多请求则每一个都要添加,可以通过Spring配置统一指定,这样就不用每次都去处理了!

我们可以在springmvc的配置文件上添加一段消息StringHttpMessageConverter转换配置


   
       
           
       
       
           
               
                   
               
           
       
   

 

返回json字符串统一解决

在类上直接使用 @RestController ,这样子,里面所有的方法都只会返回 json 字符串了,不用再每一个都添加@ResponseBody 。我们在前后端分离开发中,一般都使用 @RestController ,十分便捷

 输出多个对象

用list集合添加

 输出时间

 

自定义日期格式

 

 如果使用的比较多,将这些代码封装到一个工具类中,实现复用

 

 

 我们如果也想把第一个和第二个也简化一下应该怎么做?对工具类进行一下改动

 方法的重载,在同一个工具类中有一个同名的方法,当对括号内传参数量不同,调用不同的方法。这种编程的思想特别的重要,在各种源码里也会体现出来

这里的j2调用第一个就可以实现功能,将userList传进去即可实现

FastJson

 1.导入jar包

    
        com.alibaba
        fastjson
        1.2.78
    

 

直接调用方法,传参进去即可!

 

fastjson 三个主要的类:

JSonObject  代表 json 对象

  • JSONObject实现了Map接口, 猜想 JSONObject底层操作是由Map实现的。

  • JSONObject对应json对象,通过各种形式的get()方法可以获取json对象中的数据,也可利用诸如size(),isEmpty()等方法获取"键:值"对的个数和判断是否为空。其本质是通过实现Map接口并调用接口中的方法完成的。

JSonArray   代表 json 对象数组

  • 内部是有List接口中的方法来完成操作的。

JSON代表 JSONObject和JSONArray的转化

  • JSON类源码分析与使用

  • 仔细观察这些方法,主要是实现json对象,json对象数组,javabean对象,json字符串之间的相互转化。

这种工具类,我们只需要掌握使用就好了,在使用的时候在根据具体的业务去找对应的实现。和以前的commons-io那种工具包一样,拿来用就好了!

 

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

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

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