• SpringMVC学习笔记


    多年来一直保存的武林秘籍

    SpringMVC:基于MVC开发模式的框架,用来优化控制器

    MVC:是一种开发模式,模型视图控制器的简称,所有web应用都是基于MVC开发

    M:模型层:包含实体类,业务逻辑成,数据访问层

    V:视图层,html,javaScript,vue等都是视图JSP也可以定义为视图层(但并不标准),视图层就是用来呈现数据的

    C:控制器,它是用来接收客户端的请求,并返回相应到客户端的组件,Servlet就是组件

    所谓的SSM框架就是Spring,SpringMVC,Mybatis

    Mybatis优化的是数据访问层

    SpringMVC优化控制器

    Spring优化管理对象(控制反转),通过DI(依赖注入)实现IOC(控制反转),AOP(面向切面编程),Spring整合了其他框架,整合了Mybatis,Redis,XXX,XXXX,XXXXX,XXXXXX一塌糊涂

    以前用的SSH框架:Spring,Struts2,Hibernate.

    演示SpringMVC基于注解的开发:

    1)新建项目,选择webapp模块

    2)修改目录

    3)修改pom.xml文件,添加SpringMVC的依赖,添加Servlet的依赖

    4)添加springmvc.xml,指定包扫描(基于注解必须指定包扫描),添加视图解析器

    5)删除web.xml,新建web.xml

    6)在web.xml文件中注册springmvc框架(所有的web请求都是基于servlet的)

    7)在webapp下新建admin目录,在admin目录下新建main.jsp页面,删除index.jsp页面,并新建,发送请求给服务器

    8)开发控制器

     

     目录结构

    根据Maven结构  src下有main和test       src/main/java和resources   test下也有java和resources

    新建个包叫test

     

     然后配置下4个包的属性

    pom.xml

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <groupId>com.hruigroupId>
    5. <artifactId>springmvc-01-demoartifactId>
    6. <version>1.0-SNAPSHOTversion>
    7. <packaging>warpackaging>
    8. <properties>
    9. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    10. <maven.compiler.source>1.7maven.compiler.source>
    11. <maven.compiler.target>1.7maven.compiler.target>
    12. properties>
    13. <dependencies>
    14. <dependency>
    15. <groupId>org.springframeworkgroupId>
    16. <artifactId>spring-webmvcartifactId>
    17. <version>5.2.6.RELEASEversion>
    18. dependency>
    19. <dependency>
    20. <groupId>javax.servletgroupId>
    21. <artifactId>javax.servlet-apiartifactId>
    22. <version>3.1.0version>
    23. dependency>
    24. <dependency>
    25. <groupId>junitgroupId>
    26. <artifactId>junitartifactId>
    27. <version>4.11version>
    28. <scope>testscope>
    29. dependency>
    30. dependencies>
    31. <build>
    32. <resources>
    33. <resource>
    34. <directory>src/main/javadirectory>
    35. <includes>
    36. <include>**/*.xmlinclude>
    37. <include>**/*.propertiesinclude>
    38. includes>
    39. resource>
    40. <resource>
    41. <directory>src/main/resourcesdirectory>
    42. <includes>
    43. <include>**/*.xmlinclude>
    44. <include>**/*.propertiesinclude>
    45. includes>
    46. resource>
    47. resources>
    48. build>
    49. project>

    添加配置文件springmvc.xml(名字叫啥都行)文件名无所谓(就是在web.xml配置springmvc时会指定该文件名)

    引入SpringWEB依赖 也就是引入Spring,那么下面目录下自动会有spring.config选项

     

     注意下目录结构

    main.jsp就个简单jsp用来演示用

    web请求分析:

    客户端请求到index.jsp      

    index.jsp发请求到servlet  SpringMVC里用一个共有的servlet    DisPatcherServlet接收

    DisPatcherServlet经过处理指定跳转或者重定向页面  交给视图解析器   视图解析器加上前缀后缀到具体指定页面

    DispatcherServlet要在web.xml文件中注册才可用

    将原先存在的webapp/WEB-INF/web.xml删掉(原因:版本太低)

     

     

     

     这样就注册了SpringMVC(就是注册了DispatcherServlet)

    原先的index.jsp重新写一个太low了   写个更low的

    写控制器

    请求流程分析:

    客户访问index.jsp页面

     跳转到demo.action 被映射到DispatcherServlet(这一步我不是太确认,个人理解)

    而自己写的DemoController可以理解为DispatcherServclet

     找到路径demo找到对应控制器

     通过spring配置的视图解析器加上前后缀  就变成/admin/main.jsp

    然后找到对应的main.jsp

    添加一个tomcat让war在tomcat应用服务器上运行

     

     

     

     

     

     

    访问通 

    关于@RequestMapping注解:用来映射服务器访问的路径

    1)此注解可加在方法上,是为此方法注册一个可以访问的名称(路径)

    2)此注解可以加在类上,相当于(好比包名)

            举个栗子:

     

     

    3)此注解可以区分get请求和post等请求

            举例:

    新写一个controller

    可以配置下这两个

    jsp和代码修改了会实时刷新

    SpringMVC优化的内容

    1.五种数据提交方式的优化

            1.1) 散提交数据

     

     测试

     

             1.2)对象封装提交数据:在提交请中,保证请求参数的名称与实体类中成员变量的名称一致,则                   可自动提交数据,自动类型转换,自动封装数据到对象中

            举例

    创建实体类接收

    控制器

     测试

     关于中文问题测试(form表单默认提交方式是get)

     

     

     如果我改成post请求

     

     post提交中文请求出现乱码

     get请求不需要处理中文问题是tomcat7之后解决了这个问题,但是post请求中文没有解决,后面会讲

                   1.3)动态占位符提交数据(Restful风格):仅限于超链接或地址栏提交数据.它是一杠一值,一                       杠一大括号,使用注解来解析

                          举例

     

    也可以这样写

     测试

     

            1.4)映射名称不一致:当提交请求参数与action方法的形参不一致,使用注解@RequestParam来解析

    举例

     测试

             1.5)手动提取数据

     

             1.6)Map接收参数

     get和post都可以接收

    SpringMVC中get请求中文乱码在tomcat7之后解决了,但是Post请求中含有中文还是会有中文乱码问题.

    中文乱码解决方案:

    在web.xml中配置过滤器

     测试访问

     访问后端输出都是中文OK的

    2.关于控制器方法的返回值(action方法)

    原先我们一直返回的String 

            2.1) 返回String:客户端资源的地址,自动拼接前缀和后缀.还可以屏蔽自动自动拼接字符串,可以指定返回路径(下面会说)

            2.2)可返回Object对象类型:返回json格式的对象.自动将对象或集合转为json.使用的是jackson工具进行转换,必须添加依赖,一般用于ajax请求

            2.3)void:无返回值.一般用于ajax请求

            2.4)返回基本数据类型:用于ajax请求

            2.5)返回ModelAndView:返回数据和视图(现在用的很少)

    关于发送Ajax请求,SpringMVC接收步骤

    需求发送ajax请求访问服务器,返回学生集合

    1)添加jackson依赖

    2)在webapp目录下新建js目录,添加jQuery函数库

    3)在index.jsp页面上导入函数库

    4)在控制器方法(所谓action上)添加注解@ResponseBody,@ResponseBody专门用来处理ajax请求

    5)在springmvc.xml添加注解驱动,它用来解析@ResponseBody注解

    新建个module

     

     

     

    相同步骤.

    首先结构: 

    根据Maven结构  src下有main和test       src/main/java和resources   test下也有java和resources

     然后配置下4个包的属性

     修改pom.xml引入依赖  多加了一个jackson依赖

    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    3. <modelVersion>4.0.0modelVersion>
    4. <groupId>com.hruigroupId>
    5. <artifactId>springmvc-02-ajaxartifactId>
    6. <version>1.0-SNAPSHOTversion>
    7. <packaging>warpackaging>
    8. <properties>
    9. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    10. <maven.compiler.source>1.8maven.compiler.source>
    11. <maven.compiler.target>1.8maven.compiler.target>
    12. properties>
    13. <dependencies>
    14. <dependency>
    15. <groupId>org.springframeworkgroupId>
    16. <artifactId>spring-webmvcartifactId>
    17. <version>5.2.6.RELEASEversion>
    18. dependency>
    19. <dependency>
    20. <groupId>javax.servletgroupId>
    21. <artifactId>javax.servlet-apiartifactId>
    22. <version>3.1.0version>
    23. dependency>
    24. <dependency>
    25. <groupId>com.fasterxml.jackson.coregroupId>
    26. <artifactId>jackson-databindartifactId>
    27. <version>2.9.8version>
    28. dependency>
    29. <dependency>
    30. <groupId>junitgroupId>
    31. <artifactId>junitartifactId>
    32. <version>4.11version>
    33. <scope>testscope>
    34. dependency>
    35. dependencies>
    36. <build>
    37. <resources>
    38. <resource>
    39. <directory>src/main/javadirectory>
    40. <includes>
    41. <include>**/*.xmlinclude>
    42. <include>**/*.propertiesinclude>
    43. includes>
    44. resource>
    45. <resource>
    46. <directory>src/main/resourcesdirectory>
    47. <includes>
    48. <include>**/*.xmlinclude>
    49. <include>**/*.propertiesinclude>
    50. includes>
    51. resource>
    52. resources>
    53. build>
    54. project>

    配置spring配置文件,文件名无所谓(就是在web.xml配置springmvc时会指定该文件名)

    添加注解驱动1.为了支持ajax请求@ResponseBody的使用  2.日期转换会用到注解驱动   3.静态资源分流 

     

     原有的web.xml版本太低 新建  web.xml用来注册SpringMVC的  控制器

    1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    4. version="4.0">
    5. <filter>
    6. <filter-name>encodefilter-name>
    7. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    8. <init-param>
    9. <param-name>encodingparam-name>
    10. <param-value>UTF-8param-value>
    11. init-param>
    12. <init-param>
    13. <param-name>forceRequestEncodingparam-name>
    14. <param-value>trueparam-value>
    15. init-param>
    16. <init-param>
    17. <param-name>forceResponseEncodingparam-name>
    18. <param-value>trueparam-value>
    19. init-param>
    20. filter>
    21. <filter-mapping>
    22. <filter-name>encodefilter-name>
    23. <url-pattern>/*url-pattern>
    24. filter-mapping>
    25. <servlet>
    26. <servlet-name>springmvcservlet-name>
    27. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    28. <init-param>
    29. <param-name>contextConfigLocationparam-name>
    30. <param-value>classpath:springmvc.xmlparam-value>
    31. init-param>
    32. servlet>
    33. <servlet-mapping>
    34. <servlet-name>springmvcservlet-name>
    35. <url-pattern>*.actionurl-pattern>
    36. servlet-mapping>
    37. web-app>

    需要用jQuery发送ajax请求,在webapp下新建一个js包用来存放jQuery函数库

     删掉index.jsp新建一个index.jsp 原因模板自带的index.jsp没有带

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>page指令

    事实上stu.name    stu.age实际上就是调用了实体类里的get方法  图片引入jQuery写粗哦了  写了个t

     实体类

     控制器

     添加tomcat应用服务器

     

     

    启动时,非常好

    端口占用 解决办法

     启动访问

     请求与转发的和重定向

    重定向和转发的区别

    1.重定向访问服务器两次,转发只访问服务器⼀次。

    2.转发页⾯的URL不会改变,⽽重定向地址会改变

    3.转发只能转发到⾃⼰的web应⽤内,重定向可以重定义到任意资源路径等等等

    还有很多理论区别概念

    SpringMVC的四种跳转方式:其实是衍生出来的,转发分转发页面,转发action(控制器),而重定向也可以重定向页面,重定向action   还是转发和重定向,只不过写法不同

    先将admin那个main复制进来,且同时配置视图解析器和注解驱动,如果在没有视图解析器,只有注解驱动的时候返回String会报错,/main找不到

    转发的代码实现:

    forward:就不会加前后缀,往控制器走

     

     

     

     

     注意:转发无论是转发页面还是转发控制器,地址栏都是第一次请求的地址,不会改变,无论转发多少次,转发到哪个控制器或者转发到哪个页面,  都是第一次请求的地址

    重定向的代码实现:

     

  • 相关阅读:
    磁盘非跨盘访问算法实现
    04数据存储规则/进制转换/文本(数字字母汉字)图片(黑白图灰度图彩色图)声音的存储
    Apache Paimon Flink引擎解析
    【数据结构】动态顺序表(C语言实现)
    【FI】采购预付款管理报错“字段BSEG-EBELP在屏幕SAPMF05A0304上不存在”
    C语言学习(七)之数组
    python Zipf定律-高度偏斜分布
    函数柯里化详解
    【单片机毕业设计】【mcuclub-cl-025】基于单片机的儿童安全座椅的设计
    零基础转行,入职军工类测试方向,月薪10K | 既然选择了,就要全力以赴
  • 原文地址:https://blog.csdn.net/tiantiantbtb/article/details/125846531