本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!b站搜索狂神说或点击下面链接

https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2

使用注解开发

  • 结构和前一篇是一样的

  • web.xml

    • 也和原来的一样

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">

  6. <!--注册DispatcherServlet-->
  7. <!--这个类是Spring写好的,我们直接注册就可以了-->
  8. <servlet>
  9. <servlet-name>springmvc</servlet-name>
  10. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  11. <!--导入spring的配置文件-->
  12. <init-param>
  13. <param-name>contextConfigLocation</param-name>
  14. <param-value>classpath:springmvc-servlet.xml</param-value>
  15. </init-param>
  16. <!--启动级别-->
  17. <load-on-startup>1</load-on-startup>
  18. </servlet>

  19. <!--所有的请求都会经过这个类-->
  20. <!--/ 匹配所有的请求(不包括jsp)-->
  21. <!--/* 匹配所有的请求(包括jsp)-->
  22. <servlet-mapping>
  23. <servlet-name>springmvc</servlet-name>
  24. <url-pattern>/</url-pattern>
  25. </servlet-mapping>

  26. </web-app>
  • springmvc-servlet.xml

    • 和原来的不同点:

    • 导入context依赖,使注解生效

    • 使用mvc默认的handler,不过滤静态资源

    • 使用mvc:annotation-driven替代原来的映射器和适配器。

    • 不再需要在spring里面注册类了

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:mvc="http://www.springframework.org/schema/mvc"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. https://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/aop
  10. https://www.springframework.org/schema/aop/spring-aop.xsd
  11. http://www.springframework.org/schema/context
  12. https://www.springframework.org/schema/context/spring-context.xsd
  13. http://www.springframework.org/schema/mvc
  14. https://www.springframework.org/schema/mvc/spring-mvc.xsd">

  15. <!--自动扫描包,让指定包下的注解生效,由IOC容器管理-->
  16. <context:component-scan base-package="com.rzp.controller"/>
  17. <!--让SpringMVC不处理静态资源,过滤了.css .js .html .mp3这些静态资源,否则这些资源无法生效-->
  18. <mvc:default-servlet-handler/>
  19. <!--
  20. 支持mvc注解驱动,其实就是直接替代了映射器和适配器
  21. 一般采用@RequestMapping注解来完成映射关系
  22. 要想使@RequestMapping注解生效
  23. 必须向上下文中注册DefaultAnnotationHandlerMapping(映射器)
  24. 和一个AnnotationMethodHandlerAdapter(适配器)实例
  25. 这两个实例分别在类级别和方法级别处理。
  26. 而annotation-driven配置帮助我们自动完成上述两个实例的注入。
  27. -->
  28. <mvc:annotation-driven/>

  29. <!--视图解析器:DispatcherServlet给他的ModelAndView-->
  30. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
  31. <!--页面前缀-->
  32. <property name="prefix" value="/WEB-INF/jsp/"/>
  33. <!--页面后缀-->
  34. <property name="suffix" value=".jsp"/>
  35. </bean>
  36. </beans>
  • hello

    • 使用注解以后:

    • 不再需要继承Controller接口,直接增加Controller,就相当于在spring中注册了。

    • 因为原来的url输入是在springmvc-servlet.xml中配置的,现在我们不在xml中配置,而是增加RequestMapping注解,在这里写上要输入的url。

    • 原来最终输出的页面地址我们封装到ModeAndView对象中,现在我们直接返回一个字符串就可以了,这个字符串就和原来的ModeAndView.setView方法一样,会被视图解析器拼接处理最终找到我们的页面。

  1. package com.rzp.controller;


  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.RequestMapping;

  5. //加了Controller注解的类,这个类中所有的方法,如果返回值是String而且有具体的页面可以跳转,就会被视图解析器解析。

  6. @Controller
  7. // 如果在类上添加,则url要输入..../hello/h1,否则就直接写..../h1就可以了
  8. //@RequestMapping("/hello")
  9. public class HelloController {
  10. @RequestMapping("/h1")
  11. public String hello(Model model){
  12. //封装数据
  13. model.addAttribute("msg","HelloSpingMVCAnnotation!");
  14. return "hello"; //会被视图解析器处理
  15. }
  16.  
  17. //多个页面的时候,可以直接添加一个方法就可以了
  18. @RequestMapping("/h2")
  19. public String hello2(Model model){
  20. //封装数据
  21. model.addAttribute("msg","HelloSpingMVCAnnotation2!");
  22. return "hello2"; //会被视图解析器处理
  23. }
  • hello.jsp

    • 和原来一样

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. ${msg}
  8. </body>
  9. </html>
使用注解开发以后,就彻底的比servlet优化,我们不再需要每个类都要在xml文件里面注册,开发更加简单了。而两个xml文件都是固定的。

与注册xml对比

  • 使用注册的方式,每个页面都要在xml文件中注册,而且一个页面就要给一个类,而使用注解开发我们一个类就可以直接写多个页面。

RESTful风格

  • SpringMVC对RESTful风格的支持:

对于下面这个Controller,有输入参数a和b,要正确显示页面,我们的url中就需要通过?a=1&b=2传入参数

  1. @Controller
  2. public class RestfulStyile {
  3. //原来的方式要在URI最后增加?并且录入参数 http://localhost:8080/s04/add?a=1&b=2
  4. @RequestMapping(value = "/add")
  5. public String test0( int a, int b, Model model){
  6. int res = a+b;
  7. model.addAttribute("msg","结果为"+res);

  8. return "test";
  9. }
  10. }

或者某些URI会暴露我们的动作(例如下面左边的URI),而RESTful风格就是避免这种做法,比如上面的?a=1&b=2应该变成/1/2,或者下面的右边的URI。

GET /rest/api/getDogs --> GET /rest/api/dogs 获取所有小狗

GET /rest/api/addDogs --> POST /rest/api/dogs 添加一个小狗

  • 在SpringMVC中:

    • 通过RequestMapping配置的value = "/add/{a}/{b}",以及在输入参数前面加入@PathVariable注解,就可以自动实现这种风格

  1. @Controller
  2. public class RestfulStyile {
  3. //RestFul风格:http://localhost:8080/s04/add/a/b
  4. @RequestMapping(value = "/add/{a}/{b}",method = RequestMethod.GET)
  5. public String test1(@PathVariable int a,@PathVariable int b, Model model){
  6. int res = a+b;
  7. model.addAttribute("msg","结果为"+res);

  8. return "test";
  9. }
  10. }
  • 测试

  • 在RequestMapping中配置method = RequestMethod.GET可以指定我们的动作。

    • RequestMethod其实是RequestMapping下的枚举类。

  • 除了通过枚举类以外,还可以直接把RequestMapping注解改为以下几种,达到同样的效果

  1. @GetMapping
  2. @PostMapping
  3. @PutMapping
  4. @DeleteMapping
  5. @PatchMapping

例如:

  1. @Controller
  2. public class RestfulStyile {
  3. @GetMapping(value = "/add/{a}/{b}")
  4. public String test1(@PathVariable int a,@PathVariable int b, Model model){
  5. int res = a+b;
  6. model.addAttribute("msg","结果为"+res);

  7. return "test";
  8. }
  9. }

SpringMVC(二):使用注解开发的更多相关文章

  1. springMVC学习三 注解开发环境搭建

    第一步:导入jar包 第二步:配置DispatcherServlet  前端控制器 因为此处把DsipatcherServlet的映射路径配置成了"/",代表除了.jsp文件之外, ...

  2. Java开发学习(十二)----基于注解开发依赖注入

    Spring为了使用注解简化开发,并没有提供构造函数注入.setter注入对应的注解,只提供了自动装配的注解实现. 1.环境准备 首先准备环境: 创建一个Maven项目 pom.xml添加Spring ...

  3. Springmvc配置定时任务注解开发

    1.添加命名空间和xsd约束 xmlns:task="http://www.springframework.org/schema/task" http://www.springfr ...

  4. Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化

    知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...

  5. Java开发学习(十)----基于注解开发定义bean 已完成

    一.环境准备 先来准备下环境: 创建一个Maven项目 pom.xml添加Spring的依赖 <dependencies>    <dependency>        < ...

  6. Java开发学习(十三)----基于注解开发定义第三方bean及注解开发总结

    在前面的博客中定义bean的时候都是在自己开发的类上面写个注解就完成了,但如果是第三方的类,这些类都是在jar包中,我们没有办法在类上面添加注解,这个时候该怎么办? 遇到上述问题,我们就需要有一种更加 ...

  7. SpringMVC注解开发初步

    一.(补充)视图解析器---XmlViewResolver 作用:分离配置信息. 在视图解析器---BeanNameViewResolver的基础之上进行扩充,新建一个myView.xml分离信息 在 ...

  8. SpringMVC的注解开发入门

    1.Spring MVC框架简介 支持REST风格的URL 添加更多注解,可完全注解驱动 引入HTTP输入输出转换器(HttpMessageConverter) 和数据转换.格式化.验证框架无缝集成 ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...

随机推荐

  1. vue基础响应式数据

    1.vue 采用 v……vm……m,模式,v---->el,vm---->new Vue(实例),m---->data 数据,让前端从操作大量的dom元素中解放出来. 2.vue响应 ...

  2. Array.isArray() 判断是不是数组

    var arr = new Array(); if(Array.isArray()){ console.log('yes') } else { conssole.log('no') }

  3. java实现简单的星座查询

    在校小白,大神勿喷. 版本已简化 连接mysql数据库验证用户名及密码进行登陆 public class mysql {Connection con;public mysql(){    try{   ...

  4. 采用最简单的方式在ASP.NET Core应用中实现认证、登录和注销

    在安全领域,认证和授权是两个重要的主题.认证是安全体系的第一道屏障,是守护整个应用或者服务的第一道大门.当访问者请求进入的时候,认证体系通过验证对方的提供凭证确定其真实身份.认证体系只有在证实了访问者 ...

  5. servlet本质是什么

    作者:Javdroider Hong链接:https://www.zhihu.com/question/21416727/answer/339012081来源:知乎著作权归作者所有.商业转载请联系作者 ...

  6. vue 2

    目录 复习 今日 指令 条件指令 循环指令 评论案例 解决插值表达式符号冲突 总结 组件 局部组件 全局组件 组件间的交互:父传子 组件间的交互:子传父 复习 """ 1 ...

  7. 拿 C# 搞函数式编程 - 3

    前言 今天和某个人聊天聊到了 C# 的 LINQ,发现我认识的 LINQ 似乎和大多数人认识的 LINQ 不太一样,怎么个不一样法呢?其实 LINQ 也可以用来搞函数式编程. 当然,并不是说写几个 l ...

  8. 曹工说Spring Boot源码(26)-- 学习字节码也太难了,实在不能忍受了,写了个小小的字节码执行引擎

    曹工说Spring Boot源码(26)-- 学习字节码也太难了,实在不能忍受了,写了个小小的字节码执行引擎 写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean De ...

  9. 生日Party 玄学多维DP

    题目描述 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续的 ...

  10. 【SQL SERVER】锁机制

    锁定是 SQL Server 数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制. 基本概念 利用SQL Server Profiler观察锁 死锁产生的原因及避免 总结 基本概念 数据库引 ...