概述

注解: 在Spring中尽管使用XML配置文件可以实现Bean的装配工作,但如果应用中Bean的数量较多,会导致XML配置文件过于臃肿,从而给维护和升级带来一定的困难。

从JDK 5开始提供了名为Annotation(注解)的功能,Spring正是利用这一特性,Spring逐步完善对Annotation注解技术的全面支持,使XML配置文件不再臃肿,向“零配置”迈进。

Spring框架也为表示层提供了一个优秀的Web框架,即Spring MVC。由于Spring MVC采用了松耦合可插拔组件结构,比其他MVC框架具有更大的扩展性和灵活性。通过注解,Spring MVC使得POJO成为处理用户请求的控制器,无需实现任何接口。

@

壹:注解说明

Spring中定义了一系列的Annotation注解,如下所示:

注解名称 说明
@Component注解 @Component 是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次。
@Repository注解 @Repository 注解用于将数据访问层(DAO 层)的类标识为Spring的Bean。
@Service注解 @Service 通常作用在业务层,但是目前该功能与@Component相同。
@Controller注解 @Controller标识表示层组件,但是目前该功能与@Component相同
@Autowired注解 用于对Bean的属性变量、属性的set方法及构造函数进行标注,配合对应的注解处理器完成Bean的自动配置工作。@Autowired注解默认按照Bean类型进行装配。@Autowired注解加上@Qualifier注解,可直接指定一个Bean实例名称来进行装配。
@Resource注解 作用相当于@Autowired,配置对应的注解处理器完成Bean的自动配置工作。区别在于:①:@Autowired默认按照Bean类型进行装配,②:@Resource默认按照Bean实例名称进行装配。

贰:实现注解声明控制器与请求映射

一:使用controller

org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个控制器,其注解形式为@Controller。该注解在使用时不需要再实现Controller接口,只需要将@Controller注解加入到控制器类上,然后通过Spring的扫描机制找到标注了该注解的控制器即可。

  1. @Controller
  2. public class SpringController {
  3. @GetMapping("/helloWorld")
  4. public String hello(){
  5. System.out.println("hello.....");
  6. return "hello";
  7. }
  8. }

我们常用的rest 风格请求(REST : 即 Representational State Transfer 。(资源)表现层状态转化):

请求 说明 用于
@GetMapping 匹配GET方式的请求; 一般读取数据
@PostMapping 匹配POST方式的请求; 一般用于插入数据
@PutMapping 匹配PUT方式的请求; 一般用于更新数据
@DeleteMapping 匹配DELETE方式的请求; 一般用于删除数据

二:配置包扫描与视图解析器

1、配置包扫描

虽然哦我们已经i邪恶好了controller,但是直接这样写我们是不能用的,还需要在spring-mvc.xml配置文件中,用spring的包扫描将他注入到容器中,我们才能实现调用。

  1. <!--使用扫描机制 -->
  2. <context:annotation-config/>
  3. <context:component-scan base-package="com.lomtom.controller"/>
  4. 当然,spring提供了很多种方法,我们是用最简单实现的就可以。

2、配置试图解析器

SpringMVC中的视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图。

spring-mvc.xml加入试图解析器,其中的前缀就是根据自己的文件存放目录来写,后缀就是你的文件的后缀名,你可以是.jsp、.html等等。

  1. <!-- 配置视图解析器 prefix:前缀, suffix:后缀-->
  2. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  3. <property name="prefix" value="/"></property>
  4. <property name="suffix" value=".html"></property>
  5. </bean>

三:配置部署描述符

Deployment Descriptors(描述符)是一个xml文件,用来描述如何部署一个模块或者应用(根据描述符中定义的配置和容器选项)。

在这里简单来说就是我们的web.xml

1、读取spring-mvc.xml文件

虽然,我们已经把controller通过spring-mvc.xml注入到容器中,相信这时你启动项目时,是访问不了的controller的请求的,也就是说,我们的我没在配置该文件,这时候在你的web.xml中加入。

如果我们不指定SpringMVC配置文件的路径,则会自动到WEB-INF下找 ‘‘前端控制器名-servlet.xml’’ 这个文件,如果找不到则会报错。

  1. <!-- 配置Spring MVC配置文件-->
  2. <init-param>
  3. <param-name>contextConfigLocation</param-name>
  4. <param-value>classpath:spring-mvc.xml</param-value>
  5. </init-param>

2、配置匹配映射

servlet: 它提供静态资源。它处理所有未映射到其他带有servlet映射的servlet(在这里或在您自己的-web.xml文件)。

servlet-mapping: 当为静态资源提供服务时,Tomcat将自动生成基于资源文件扩展名的“Content Type”头,基于这些映射。可以在此处添加其他映射(到应用于所有web应用程序),或在您自己的应用程序的web.xml中部署描述符。

  1. <!-- 配置DispatcherServlet -->
  2. <servlet>
  3. <servlet-name>dispatcherServlet</servlet-name>
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5. </servlet>
  6. <!-- ServLet 匹配映射 -->
  7. <servlet-mapping>
  8. <servlet-name>dispatcherServlet</servlet-name>
  9. <url-pattern>/</url-pattern>
  10. </servlet-mapping>

四:建立html文件

新建两个文件,用于访问测试,一个index.html,写一个连接指向href=“helloWorld”,写另一个hello.html,用于访问成功后,跳转到该页面。

叁:配置tomcat

在这里,作者摸索到了两种配置tomcat的方法,一种就是本地自个的tomcat,还有一种就是maven提供的tomcat容器。

一:配置本地tomcat

基本上就是这几步,其中的选择tomcat目录省略了,不是很难,添加服务就可以,找不到入口就算了,请不要打我。如果你配置tomcat也不会,那么,现在放下电脑去打把王者荣耀吧,妲己可能会告诉你。

二:配置maven内置tomcat

配置maven的tomcat相对会麻烦一点,不过也不是很麻烦,在你的pom.xml文件中加入一下插件依赖。

  1. <plugins>
  2. <plugin>
  3. <groupId>org.apache.tomcat.maven</groupId>
  4. <artifactId>tomcat7-maven-plugin</artifactId>
  5. <version>2.2</version>
  6. </plugin>
  7. </plugins>

然后,添加配置,需要注意的是,你需要配置你的maven,在下图的General里面,如果你已经使用了maven,就不用配了,可以查看General下配置是否正确。

安装与配置maven:传送门



接下来你就可以启动你的项目了,祝你能够一步成功,哈哈哈哈。

肆:结果及问题

一:tomcat启动示意图:

本地tomcat:



maven内置tomcat:

二:结果

首页:

死案及后跳转:

三:问题

1、解决SpringMVC不能访问html页面

  1. <servlet-mapping>
  2. <servlet-name>default</servlet-name>
  3. <url-pattern>*.html</url-pattern>
  4. </servlet-mapping>

2、使用maven内置tomcat有时能跳转,有时不能跳转,不能跳转的时候他会卡在读取文件这里,这里对不起了,笔者没找到解决方法,如果你找到了,欢迎告诉笔者。

  1. 三月 21, 2020 1:02:09 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  2. 信息: Loading XML bean definitions from class path resource [spring-mvc.xml]

该问题追加:

根据csdn评论中大佬的解决方法,我重新试了一下,后来发现问题根源,发现项目根本找不到spring-context.xsd,导致spring-mvc.xml文件加载出错,并且造成通配符的匹配很全面, 但无法找到元素 'context:annotation-config' 的声明的错误,所以项目一直在加载spring-mvc.xml文件,这时我就意识到是我的spring-mvc.xml中的引入出问题了,经过修改,问题解决了。

  1. 修改前:
  2. https://www.springframework.org/schema/context/spring-context.xsd
  3. 修改后:
  4. http://www.springframework.org/schema/context/spring-context.xsd

伍:结构及源码

源码都放出来了,还不是ctrl+c,ctrl+v一顿乱搞。

一:目录结构

二:源码

1、controller

  1. package com.lomtom.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. /**
  5. * @Author: LOMTOM
  6. * @Date: 2020/3/20
  7. * @Time: 18:40
  8. * @Email: lomtom@qq.com
  9. */
  10. @Controller
  11. public class SpringController {
  12. @GetMapping("/helloWorld")
  13. public String hello(){
  14. System.out.println("hello.....");
  15. return "hello";
  16. }
  17. }

2、spring-mvc.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd">
  12. <mvc:annotation-driven/>
  13. <!--使用扫描机制 -->
  14. <context:annotation-config/>
  15. <context:component-scan base-package="com.lomtom.controller"/>
  16. <!-- 配置视图解析器 prefix:前缀, suffix:后缀-->
  17. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  18. <property name="prefix" value="/"></property>
  19. <property name="suffix" value=".html"></property>
  20. </bean>
  21. </beans>

3、web.xml

  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4. <web-app>
  5. <display-name>Archetype Created Web Application</display-name>
  6. <servlet>
  7. <!-- 配置DispatcherServlet -->
  8. <servlet-name>dispatcherServlet</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <!-- 指定spring mvc配置文件位置 不指定使用默认情况 -->
  11. <init-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>classpath:spring-mvc.xml</param-value>
  14. </init-param>
  15. </servlet>
  16. <!-- ServLet 匹配映射 -->
  17. <servlet-mapping>
  18. <servlet-name>dispatcherServlet</servlet-name>
  19. <url-pattern>/</url-pattern>
  20. </servlet-mapping>
  21. <servlet-mapping>
  22. <servlet-name>default</servlet-name>
  23. <url-pattern>*.html</url-pattern>
  24. </servlet-mapping>
  25. </web-app>

4、pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <parent>
  5. <artifactId>spring</artifactId>
  6. <groupId>spring</groupId>
  7. <version>1.0-SNAPSHOT</version>
  8. </parent>
  9. <modelVersion>4.0.0</modelVersion>
  10. <artifactId>spring-8</artifactId>
  11. <packaging>war</packaging>
  12. <name>spring-8 Maven Webapp</name>
  13. <!-- FIXME change it to the project's website -->
  14. <url>http://www.example.com</url>
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. <maven.compiler.source>1.8</maven.compiler.source>
  18. <maven.compiler.target>1.8</maven.compiler.target>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <version>4.11</version>
  25. <scope>test</scope>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework</groupId>
  29. <artifactId>spring-web</artifactId>
  30. <version>4.3.1.RELEASE</version>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework</groupId>
  34. <artifactId>spring-webmvc</artifactId>
  35. <version>4.3.1.RELEASE</version>
  36. </dependency>
  37. </dependencies>
  38. <build>
  39. <finalName>spring-8</finalName>
  40. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  41. <plugins>
  42. <plugin>
  43. <groupId>org.apache.tomcat.maven</groupId>
  44. <artifactId>tomcat7-maven-plugin</artifactId>
  45. <version>2.2</version>
  46. </plugin>
  47. <plugin>
  48. <artifactId>maven-clean-plugin</artifactId>
  49. <version>3.1.0</version>
  50. </plugin>
  51. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  52. <plugin>
  53. <artifactId>maven-resources-plugin</artifactId>
  54. <version>3.0.2</version>
  55. </plugin>
  56. <plugin>
  57. <artifactId>maven-compiler-plugin</artifactId>
  58. <version>3.8.0</version>
  59. </plugin>
  60. <plugin>
  61. <artifactId>maven-surefire-plugin</artifactId>
  62. <version>2.22.1</version>
  63. </plugin>
  64. <plugin>
  65. <artifactId>maven-war-plugin</artifactId>
  66. <version>3.2.2</version>
  67. </plugin>
  68. <plugin>
  69. <artifactId>maven-install-plugin</artifactId>
  70. <version>2.5.2</version>
  71. </plugin>
  72. <plugin>
  73. <artifactId>maven-deploy-plugin</artifactId>
  74. <version>2.8.2</version>
  75. </plugin>
  76. </plugins>
  77. </pluginManagement>
  78. </build>
  79. </project>

5、html

  1. 1index.html
  2. <html>
  3. <body>
  4. <h2>Hello World!</h2>
  5. <a href="helloWorld">hello</a>
  6. </body>
  7. </html>
  8. 2hello.html
  9. <!DOCTYPE html>
  10. <html lang="en">
  11. <head>
  12. <meta charset="UTF-8">
  13. <title>hello</title>
  14. </head>
  15. <body>
  16. <h2>你好啊,你成功了</h2>
  17. </body>
  18. </html>

作者有话

这篇文章,作者已经肝了很久了,如果对你有用的话,点个赞再走吧,不说了,作者要交作业去了。

【spring springmvc】springmvc使用注解声明控制器与请求映射的更多相关文章

  1. 使用SpringMVC的@CrossOrigin注解解决跨域请求问题

    跨域问题,通俗说就是用ajax请求其他站点的接口,浏览器默认是不允许的.同源策略(Same-orgin policy)限制了一个源(orgin)中加载脚本或脚本与来自其他源(orgin)中资源的交互方 ...

  2. springmvc学习(二)——使用RequestMapper请求映射

    本次内容是@RequestMapping,后面会有实例代码 Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求在控制器的类定义及方法定义处都可标注@ ...

  3. springmvc 开涛 注解式控制器

    版本 定义处理器类 处理器映射适配器 备注 支持的注解 2.5前 controller       2.5 注解 DefaultAnnotationHandlerMapping AnnotationM ...

  4. Spring MVC学习笔记——注解式控制器

  5. 【spring springmvc】这里有你想要的SpringMVC的REST风格的四种请求方式

    概述 之前的文章springmvc使用注解声明控制器与请求映射有简单提到过控制器与请求映射,这一次就详细讲解一下SpringMVC的REST风格的四种请求方式及其使用方法. 你能get的知识点 1.什 ...

  6. SpringMVC传统风格控制器和基于注解的控制器

    SpringMVC的DispatcherServlet 之前说过springMVC是使用Servlet作为控制器,就是这个用于调度的DispatcherServlet了.这个是servlet,可以根据 ...

  7. springMVC基于注解的控制器

    springMVC基于注解的控制器 springMVC基于注解的控制器的优点有两个: 1.控制器可以处理多个动作,这就允许将相关操作写在一个类中. 2.控制器的请求映射不需要存储在配置文件中.使用re ...

  8. SpringMVC:学习笔记(2)——RequestMapping及请求映射

    SpringMVC--RequestMapping及请求映射 @RequestMapping 说明 Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请 ...

  9. SpringMVC听课笔记(三:使用@RequestMapping映射请求)

    1. Spring MVC使用 @RequestMapping 注解为控制器指定可以处理哪些URL请求 2. 标注点: --类定义处:提供初步的请求映射信息.相对于WEB应用的根目录 --方法处:提供 ...

随机推荐

  1. SpringBoot打印MyBatis sql日志输出

    SpringBoot打印MyBatis sql日志输出 默认情况下mybatis是不开启SQL日志输出,需要手动配置 方法一:(在mybatis整合在springboot框架的情况下) 只需要在配置文 ...

  2. 忘记mysql密码后重置密码

    https://jingyan.baidu.com/album/c275f6ba479ca9e33d7567ee.html?picindex=4 找不到mysql的my.ini文件问题: https: ...

  3. js 原生轮播图插件

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. res文件夹及xml资源文件详解

    目录 一.values文件:存放字符串(strings).颜色(colors).尺寸(dimens).数组(arrays).样式(styles类似于CSS文件).类型等资源 二.drawable:存放 ...

  5. R (Ani Katchova) · Eric

    首先介绍一下Ani Katchova的R教程,然后再继续总结Advanced R. R introduction setwd("path")设置工作路径 mydata<-re ...

  6. ActiveMQ学习总结(一)

    自己写的网上商城项目中使用了ActiveMQ,虽然相比于RabbitMQ,kafka,RocketMQ等相比,ActiveMQ可能性能方面不是最好的选择,不过消息队列其实原理区别不大,这里对学过的关于 ...

  7. Leetcode 239题 滑动窗口最大值(Sliding Window Maximum) Java语言求解

    题目链接 https://leetcode-cn.com/problems/sliding-window-maximum/ 题目内容 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧 ...

  8. oa办公系统快速开发工具,助力企业优化升级

    随着互联网的快速发展.信息化 IT 技术的不断进步.移动互联新技术的兴起,不管是大的集团企业还是中小型企业,纸质化的办公模式已不能满足现有需求,构建oa平台,为员工提供高效的办公环境尤其重要. 我们先 ...

  9. Java程序员考研失败后的面试经历,oppo、VIVO、等面经

      温馨提示:有些可能会遗漏个别问题,都是最近一周的面试,有点忘了. 浪潮(一面挂) 你是网络工程的?对网络很了解? 解释一下什么是广播域 怎么划分子网 说一下CSS的几种分类器 数据库中有哪些聚集函 ...

  10. grid实战之微信钱包 腾讯服务界面

    网格布局简介 CSS3网格布局是让开发人员设计一个网格并将内容放在这些网格内.而不是使用浮动制作一个网格,实际上是你将一个元素声明为一个网格容器,并把元素内容置于网格中. 有一些浏览器是不支持网格布局 ...