SpringMVC(二):使用注解开发
本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出一遍就懂!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(二):使用注解开发的更多相关文章
- springMVC学习三 注解开发环境搭建
第一步:导入jar包 第二步:配置DispatcherServlet 前端控制器 因为此处把DsipatcherServlet的映射路径配置成了"/",代表除了.jsp文件之外, ...
- Java开发学习(十二)----基于注解开发依赖注入
Spring为了使用注解简化开发,并没有提供构造函数注入.setter注入对应的注解,只提供了自动装配的注解实现. 1.环境准备 首先准备环境: 创建一个Maven项目 pom.xml添加Spring ...
- Springmvc配置定时任务注解开发
1.添加命名空间和xsd约束 xmlns:task="http://www.springframework.org/schema/task" http://www.springfr ...
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...
- Java开发学习(十)----基于注解开发定义bean 已完成
一.环境准备 先来准备下环境: 创建一个Maven项目 pom.xml添加Spring的依赖 <dependencies> <dependency> < ...
- Java开发学习(十三)----基于注解开发定义第三方bean及注解开发总结
在前面的博客中定义bean的时候都是在自己开发的类上面写个注解就完成了,但如果是第三方的类,这些类都是在jar包中,我们没有办法在类上面添加注解,这个时候该怎么办? 遇到上述问题,我们就需要有一种更加 ...
- SpringMVC注解开发初步
一.(补充)视图解析器---XmlViewResolver 作用:分离配置信息. 在视图解析器---BeanNameViewResolver的基础之上进行扩充,新建一个myView.xml分离信息 在 ...
- SpringMVC的注解开发入门
1.Spring MVC框架简介 支持REST风格的URL 添加更多注解,可完全注解驱动 引入HTTP输入输出转换器(HttpMessageConverter) 和数据转换.格式化.验证框架无缝集成 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...
随机推荐
- SIP压力测试——奇林软件kylinPET
一.Sip协议简介: SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定 ...
- 小白学 Python 数据分析(17):Matplotlib(二)基础操作
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- IntelliJ IDEA 常用快捷键(转载)
转自:http://www.open-open.com/lib/view/open1396578860887.html Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 ...
- 0402数据放入集合进行查询-Java(新手)
JDBC工具类: package cn.Wuchang.zyDome; import java.sql.*; public class JDBCUtils { private static final ...
- linux下查看系统版本
工作中我们会遇到安装软件需要知道linux是什么发行版本,话不多话上干货(按照我认为常用排序) 1. lsb_release -a 名词解释:LSB (Linux Standard Base) # 如 ...
- 五分钟学Java:一篇文章带你搞懂spring全家桶套餐
原创声明 本文首发于微信公众号[程序员黄小斜] 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 本文思维导图 什么是Spring,为什么你要学习spring? 你第一次接触spring框架是在 ...
- python3正则提取字符串里的中文
# -*- coding: utf-8 -*- import re #过滤掉除了中文以外的字符 str = "hello,world!!%[545]你好234世界..." str ...
- MySQL优化之执行计划
前言 研究SQL性能问题,其实本质就是优化索引,而优化索引,一个非常重要的工具就是执行计划(explain),它可以模拟SQL优化器执行SQL语句,从而让开发人员知道自己编写的SQL的运行情况. 执行 ...
- TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类
目录: 冰山图片识别背景 数据介绍 数据预处理 模型搭建 结果分析 总结 一.冰山图片识别背景 这里我们要解决的任务是来自于Kaggle上的一道赛题(https://www.kaggle.com/c/ ...
- python之常用模块ymal
在学习python如何操作yml文件之前,我们先科普一下yml的格式 yaml是专门写配置文件的语言,非常简洁和强大,比json更加方便 YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便 ...