概述

SpringMVC不仅提供了Xml的配置方式,还提供了注解的方式来声明一个Controller,本文属于SpringMVC的入门级内容,仅供学习分享使用,如有不足之处,还请指正。

SpringMVC注解优点

  • XML配置起来有时候冗长,此时注解可能是更好的选择。
  • 注解最大的好处就是简化了XML配置;其实大部分注解一定确定后很少会改变,在一些中小项目中使用注解反而提供了开发效率。
  • 注解相对于XML的另一个好处是类型安全的,XML只能在运行期才能发现问题。
  • 采用注解的方式,一个类可以有多个Action。

SpringMVC相关知识点

  1. SpringMVC默认采用的是请求转发的跳转方式,不是重定向方式。
  2. RequestMapping的路径可以和方法名不一致
  3. 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之注解的更多相关文章

  1. 【转】跟着开涛学SpringMVC

    跟着开涛学SpringMVC 第一章源代码下载 博客分类: 跟开涛学SpringMVC 跟开涛学SpringMVC  源代码请到附件中下载. 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 ...

  2. 跟我学SpringMVC目录汇总贴、PDF下载、源码下载

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  3. 学SpringMVC收藏

     一个较完整的SpringMVC工程的配置 2014-01-22 17:17:25 标签:java spring springMVC 配置 springSecurity web.xml 原创作品,允许 ...

  4. SpringMVC常用注解實例詳解3:@ResponseBody

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  5. SpringMVC常用注解實例詳解2:@ModelAttribute

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  6. springMVC的注解详解

    springmvc常用注解标签详解 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业 ...

  7. springmvc常用注解与类型转换

    springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --> <context:annotation ...

  8. Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列

    Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列

  9. springMvc的注解注入方式

    springMvc的注解注入方式 最近在看springMvc的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着 ...

随机推荐

  1. hdu 1667 The Rotation Game ( IDA* )

    题目大意: 给你一个“井”子状的board,对称的由24个方块组成,每个方块上有123三个数字中的一个.给你初始状态,共有八种变换方式,求字典序最小的最短的的变换路径使得,board中间的八个方块上数 ...

  2. 数组知识总结(js)

    js数组知识注意点: 声明空数组时,和c语言中的不同 js c var arr=[ ] //合法,声明一个空数组,数组长度为0; int a[];//错误因为在c中声明一个数组不仅要指定类型还要指定数 ...

  3. 【活动】美团技术沙龙第49期:AI在外卖场景中的最佳实践

    美团技术沙龙第49期开始啦! 本次沙龙,美团外卖技术部专家会深入介绍AI在对话系统.图像处理.个性化推荐.智能营销等方向在外卖业务中的实践,希望与业界技术同学一起交流学习. 无论你从事智能搜索,或是算 ...

  4. centos安装与配置keepalived+nginx高可用

    一.安装启动keepalived 1.下载keepalived 在centos系统中,用wget下载最新版本: mkdir tool cd tool wget https://www.keepaliv ...

  5. CSDN不限积分代下载,知网、万方、sci、IEEE论文代下载,智慧树、超星尔雅刷课

    下载内容: 1.CSDN不限积分代下载. 2.知网.万方.sci.IEEE论文代下载. 3.超星尔雅,智慧树刷课. 注:由于本人手抖买一个CSDN会员,想挽回一点损失,所以创立了一个下载群,绝对不是骗 ...

  6. H5和ionic RN和Weex 他们之间的比较

    使用H5和ionic 进行移动APp开发 首先要开发一个完整的网站,然后,在网站的基础上,使用 H5+huozhe ionic提供的打包技术,把网站打包成一个应用. 把网站打包成一个可以安装到手机上运 ...

  7. acwing 861. 二分图的最大匹配 模板

    地址  https://www.acwing.com/problem/content/description/863/ 给定一个二分图,其中左半部包含n1n1个点(编号1~n1n1),右半部包含n2n ...

  8. Vue之循环遍历Json数据,填充Table表格

    简单记一次Vue循环遍历Json数据,然后填充到Table表格中,展示到前端的代码: async getData(id) { const res = await this.$store.api.new ...

  9. React 组件的生命周期方法

    React 组件的生命周期方法 按渲染顺序: 1: componentWillMount() – 在渲染之前执行,在客户端和服务器端都会执行. 2: componentDidMount() – 仅在第 ...

  10. js 淡入淡出的tab选项卡

    代码如下 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...