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

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

使用注解开发

  • 结构和前一篇是一样的

  • web.xml

    • 也和原来的一样

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

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

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

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

    • 和原来的不同点:

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

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

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

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

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

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

    • 使用注解以后:

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

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

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

package com.rzp.controller;


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

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

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

    • 和原来一样

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

与注册xml对比

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

RESTful风格

  • SpringMVC对RESTful风格的支持:

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

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

return "test";
}
}

或者某些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注解,就可以自动实现这种风格

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

return "test";
}
}
  • 测试

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

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

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

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

例如:

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

return "test";
}
}

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. Python面向对象之反射,双下方法

    一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  2. Spring Boot入门系列(六)如何整合Mybatis实现增删改查

    前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...

  3. TCP/IP协议基本知识

    1.TCP/IP协议中主机与主机之间通信的三要素: IP地址(IP address) 子网掩码(subnet mask) IP路由(IP router) 2.IP地址的分类及每一类的范围: A类1-1 ...

  4. vscode使用cnpm报错

     1.在wind10搜索框里输入 Windows PowerShell 进入这个界面 2.打开Windows PowerShell 之后 输入命令:set-ExecutjionPolicy Remot ...

  5. 【Win10】我们无法更新系统保留的分区

      前言 笔者是一个萌新,这个方案也是慢慢摸索出来的,有更好的方案欢迎大家提出 前段时间用公司电脑发现win10新版本还行,回家升级自己的电脑却提示“我们无法更新系统保留的分区”.(O_o)?? 笔者 ...

  6. beforeEach 之 next

    在这里我用通俗点的说法解释上next(),next(false),next('/'),next(error),希望通过这接地气的解释你能掌握这几个知识点.背景:你乘坐汽车从A景区想赶往B景区(模拟路由 ...

  7. 在Servlet端获取html页面选中的checkbox值,request获取页面checkbox(复选框)值

    html端代码: 选项框: <input type="checkbox" name="crowd" value="选项一">选项 ...

  8. linux入门系列18--Web服务之Apache服务1

    前面系列文章讲解了Linux下通过文件传输.文件共享.邮件系统来分享和获取资源,本文讲解网络资源获取和共享的另外一种形式,通过Apache服务程序来提供Web服务. 本文先讲解目前主流的Web服务程序 ...

  9. JavaScript 模式》读书笔记(4)— 函数2

    这篇,我们仍旧继续学习函数. 二.回调模式 函数都是对象,这表示它们可以作为参数传递给其它函数. function writeCode(callback) { // 执行一些事务... callbac ...

  10. Angularjs优点

    数据双向绑定,前后台的更改都可以随时生效, 提供mvc开发模式模式,剥离前端各部分代码,使代码便于维护管理. 简化了你写DOM操作