一起学SpringMVC之注解
概述
SpringMVC不仅提供了Xml的配置方式,还提供了注解的方式来声明一个Controller,本文属于SpringMVC的入门级内容,仅供学习分享使用,如有不足之处,还请指正。
SpringMVC注解优点
- XML配置起来有时候冗长,此时注解可能是更好的选择。
- 注解最大的好处就是简化了XML配置;其实大部分注解一定确定后很少会改变,在一些中小项目中使用注解反而提供了开发效率。
- 注解相对于XML的另一个好处是类型安全的,XML只能在运行期才能发现问题。
- 采用注解的方式,一个类可以有多个Action。
SpringMVC相关知识点
- SpringMVC默认采用的是请求转发的跳转方式,不是重定向方式。
- RequestMapping的路径可以和方法名不一致
- PUT/DELETE访问方式,可以采用过滤器(HiddenMethodFilter)的方式进行拦截
SpringMVC支持注解步骤
1. 配置dispatcher-servlet.xml文件
如下所示,主要配置注解的扫描,和支持MVC注解两项内容
<?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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 配置注解的扫描 -->
<context:component-scan base-package="com.hex.second"></context:component-scan>
<!-- 支持MVC的注解 -->
<mvc:annotation-driven ></mvc:annotation-driven>
<!-- 静态资源的支持 -->
<mvc:default-servlet-handler/>
</beans>
2. 新建一个类增加方法,并在方法上添加注解
如下所示,通过@Controller表示一个类,通过@RequestMapping("/Hello")标识一个访问请求处理方法
@Controller
//@RequestMapping("/HC")
public class HelloController { /**
* 通过注解的方式声明Controller,不带参数
* @return
*/
@RequestMapping("/Hello")
public ModelAndView HelloMvc(){
ModelAndView mav=new ModelAndView();
mav.addObject("msg", "HelloWorld,HelloSpringMVC!!!");
mav.setViewName("WEB-INF/jsps/HelloWorld.jsp");
return mav;
}
}
3. 新增一个Jsp页面接收并显示内容
如下所示:通过${msg} 接收后台传递过来的参数
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一次接触SpringMVC</title>
</head>
<body>
<h1>欢迎信息</h1>
<h1>${msg}</h1>
</body>
</html>
4. 访问
打开浏览器,输入网址即可访问,如下所示:

SpringMVC接收页面传递数据的方式(前端-->后端)
1. 通过方法的参数的方式
如下所示:SpringMVC能够自动将页面传递的数据和函数的参数匹配起来;
如果是日期格式的数据,需要进行格式化
/**
* 以参数的方式传递获取页面传递过来的值
* @param name
* @param age
* @param date 日期格式,由客户端传递参数到服务端时,需要进行日期格式化,否则会报错
* 注解如下:@DateTimeFormat(pattern="yyyy-MM-dd")
* @return
*/
@RequestMapping("/Hello2")
public ModelAndView HelloMvc2(String name,int age,@DateTimeFormat(pattern="yyyy-MM-dd")Date date){
System.out.println("name:"+name);
System.out.println("age:"+age);
System.out.println("date"+date);
ModelAndView mav=new ModelAndView();
mav.addObject("name", name);
mav.addObject("age", age);
mav.addObject("date", date);
mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
return mav;
}
2. 通过对象的方式进行数据的传递
如下所示,先定义一个User类,来接收页面传递的数据,SpringMVC能自动进行匹配
/**
* 通过对象的方式接收参数,SpringMVC可以自动匹配参数到对象的属性中
* 方便扩展
* @param user
* @return
*/
@RequestMapping("/Hello3")
public ModelAndView HelloMvc3(User user){
System.out.println("name:"+user.getName());
System.out.println("age:"+user.getAge());
System.out.println("date"+user.getDate());
ModelAndView mav=new ModelAndView();
mav.addObject("name", user.getName());
mav.addObject("age", user.getAge());
mav.addObject("date", user.getDate());
mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
return mav;
}
Jsp页面接收如下所示:以key.property的方式获取内容
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello world</title>
</head>
<body>
<h1>欢迎信息</h1>
<h1>ID:${user.id}</h1>
<h1>姓名:${user.name}</h1>
<h1>年龄:${user.age}</h1>
<h1>时间:${user.date}</h1>
</body>
</html>
3. 通过内置对象的方式进行数据的传递
/**
* 通过内置对象HttpServletRequest来获取参数
* @param req
* @param resp
* @return
*/
@RequestMapping("/Hello4")
public ModelAndView HelloMvc4(HttpServletRequest req,HttpServletResponse resp){
System.out.println("name:"+req.getParameter("name"));
System.out.println("age:"+req.getParameter("age"));
System.out.println("date"+req.getParameter("date"));
//往页面传递参数的一种
ModelAndView mav=new ModelAndView();
mav.addObject("name", req.getParameter("name"));
mav.addObject("age", req.getParameter("age"));
mav.addObject("date", req.getParameter("date"));
mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
return mav;
}
SpringMVC页面接收参数的方式(后端-->前端)
1. 采用ModelAndView进行传值
如下所示:可以通过键值对的方式增加参数
/**
* 往页面传递参数
* @return
*/
@RequestMapping("/Hello5")
public ModelAndView HelloMvc5(){
//往页面传递参数的一种
ModelAndView mav=new ModelAndView();
mav.addObject("name", "张三");
mav.addObject("age", 20);
mav.addObject("date",new Date());
mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
return mav;
}
2. 通过Model的方式传递参数
如下所示:Model作为一个参数,可以直接新增键值对,返回一个字符串,表示页面的路径
/**
* 从后端往前端跳转,使用Model的方式传参
* @return
*/
@RequestMapping("/Hello6")
public String HelloMvc6(Model model){
//往页面传递参数的一种
model.addAttribute("name", "张三");
model.addAttribute("age", 16);
model.addAttribute("date", new Date());
return "WEB-INF/jsps/HelloWorld2.jsp";
}
3. 通过对象的方式传递参数
如下所示:将对象通过属性的方式进行传递,也需要一个key值作为标识
/**
* 采用对象的方式传参到前台
* @param model
* @return
*/
@RequestMapping("/Hello7")
public String HelloMvc7(Model model){
//往页面传递参数的一种
User user=new User(1L,"李四",20,new Date());
model.addAttribute("user", user);
//model.addAttribute(user);//不建议用这种,会有一个默认的key,是类名的首字母小写,和对象名无关
return "WEB-INF/jsps/HelloWorld3.jsp";
}
4. 通过内置对象传递参数
如下所示:内置对象HttpServletRequest传递参数并进行跳转
/**
* 通过内置对象往页面传参并跳转,不常用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/Hello8")
public void HelloMvc8(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{
//往页面传递参数的一种
req.setAttribute("name", "刘玲");
req.setAttribute("age", 22);
req.getRequestDispatcher("WEB-INF/jsps/HelloWorld2.jsp").forward(req, resp);
}
备注
曾以为我是那崖畔的一枝花,后来才知道,不过是人海一粒沙。
一起学SpringMVC之注解的更多相关文章
- 【转】跟着开涛学SpringMVC
跟着开涛学SpringMVC 第一章源代码下载 博客分类: 跟开涛学SpringMVC 跟开涛学SpringMVC 源代码请到附件中下载. 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 ...
- 跟我学SpringMVC目录汇总贴、PDF下载、源码下载
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 学SpringMVC收藏
一个较完整的SpringMVC工程的配置 2014-01-22 17:17:25 标签:java spring springMVC 配置 springSecurity web.xml 原创作品,允许 ...
- SpringMVC常用注解實例詳解3:@ResponseBody
我的開發環境框架: springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...
- SpringMVC常用注解實例詳解2:@ModelAttribute
我的開發環境框架: springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...
- springMVC的注解详解
springmvc常用注解标签详解 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业 ...
- springmvc常用注解与类型转换
springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --> <context:annotation ...
- Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列
Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列
- springMvc的注解注入方式
springMvc的注解注入方式 最近在看springMvc的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着 ...
随机推荐
- git 每次提交需要输入密码
亲测可行(第一种) 原文:git每次提交都要输入密码怎么办 ================COPY=========================== 不少用户反映在使用Git时,经常会遇到需要频 ...
- CSRF与auth模块
目录 一.模拟实现中间件的编程思想 (一)impotlib模块 (二)实现功能的配置使用 二.跨站请求伪造CSRF (一)由来 (二)form表单的CSRF (三)ajax中的CSRF (1)通过da ...
- 《Java基础知识》Java静态内部类、匿名内部类、成员式内部类和局部内部类
内部类可以是静态(static)的,可以使用 public.protected 和 private 访问控制符,而外部类只能使用 public,或者默认. 成员式内部类 在外部类内部直接定义(不在方法 ...
- 【转载】Opening Robot Framework log failed
问题: 两种方法可以解决: 1.临时解决方案 jenkins系统管理—>运行命令行,在文本里输入 System.setProperty("hudson.model.DirectoryB ...
- Office安装时报错1907的解决方法
大家在装office时可能遇到过1907错误,字体无法注册 的问题,百度后者是采用什么四种方法,我四种方法都试过了没有用,也有人说缺什么日本字体,我也试过了没有用,做为有强迫证的我都重做系统,重下载o ...
- Ubuntu18.04搭建测试环境
前言 说一下我的情况,之前由于我的云服务器数据库的root账号密码123456太简单,而在之前的博客中也泄露出了我的云服务器的IP地址,导致有人远程连接我的数据库,删除了项目数据库里的数据只剩下WAR ...
- Mysql 主从复制搭建-极简版
前言 自己在百度.Google一番踩坑搭建成功后,记录一下,也希望后来人不再被这些坑到. 这里为了方便使用 docker,不会的同学请移步相关 Docker 教程. 正文 1. 启动 mysql #启 ...
- .netcore3.0 System.Text.Json 日期格式化
.netcore3.0 的json格式化不再默认使用Newtonsoft.Json,而是使用自带的System.Text.Json来处理. 理由是System.Text.Json 依赖更少,效率更高. ...
- sleuth和zipkin微服务里的链路跟踪
分布式链路跟踪介绍 对于一个微服务系统,大多数来自外部的请求都会经过数个服务的互相调用,得到返回的结果,一旦结果回复较慢或者返回了不可用,我们就需要确定是哪个微服务出了问题.于是就有了分布式系统调用跟 ...
- JS---DOM---自定义属性引入和移除
总结:在html标签中添加的自定义属性, 如果想要获取这个属性的值, 需要使用getAttribute("自定义属性的名字")才能获取这个属性的值 html标签中有没有什么自带的属 ...