一起学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的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着 ...
随机推荐
- CCF-CSP题解 201703-3 Markdown
要求实现简易的Markdown到Html格式的转换. 主要就是字符串处理.以空行划分各个区块,区块内部字符的输出用一个\(print\_buf\)实现,至于强调和超链接的嵌套,则可以递归实现. 注意用 ...
- C#程序编写高质量代码改善的157个建议【20-22】[泛型集合、选择集合、集合的安全]
建议20.使用泛型集合来替代非泛型集合 http://www.cnblogs.com/aehyok/p/3384637.html 这里有一篇文章,是我之前专门来介绍泛型的.我们应尽量的使用泛型集合.因 ...
- Android Activity启动流程, app启动流程,APK打包流程, APK安装过程
1.Activity启动流程 (7.0版本之前) 从startActivity()开始,最终都会调用startActivityForResult() 在该方法里面会调用Instrumentation. ...
- Jetpack架构组件(二)Lifecycle使用
1.直接添加如下依赖就可以满足日常的工作,如果缺少哪个库,再去单独添加就好了 implementation "android.arch.lifecycle:extensions:1.1.1& ...
- mongodb 简单的增删改查
增加 语法: db.collectionName.insert({json对象}); 1. 增加单个文档,json对象格式 db.user.insert({name:'lee',age:23,sex: ...
- Linux 使用vi命令的教程
一.首先用vi命令打卡要编辑的文件: 注意:vi命令的使用如下: 打开或新建文件,并将光标至于第一行首:[root@centos6 /]# vi /etc/my.cnf 打开文件,并将光标移至最后一行 ...
- Pycharm导入Django项目
Pycharm导入Django项目 添加项目:file-->open,找到项目所在的位置打开项目 添加django后台项目路径 file-->settings-->Languages ...
- utf8和utf8mb4的区别
一.简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编码改为ut ...
- Selenium 与自动化测试 —— 《Selenium 2 自动化测试实战》读书笔记
背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工 ...
- ASP.NET Core Web 应用程序系列(五)- 在ASP.NET Core中使用AutoMapper进行实体映射
本章主要简单介绍下在ASP.NET Core中如何使用AutoMapper进行实体映射.在正式进入主题之前我们来看下几个概念: 1.数据库持久化对象PO(Persistent Object):顾名思义 ...