一起学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的源码,看到了该框架的注入注解的部分觉的有点吃力,可能还是对注解的方面的知识还认识的不够深刻,所以特意去学习注解方面的知识.由于本人也是抱着 ...
随机推荐
- poj 3279 Fliptile (简单搜索)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16558 Accepted: 6056 Descrip ...
- Web基础了解版04-XML-Tomcat-Http
XML 什么是XML - Tomcat - Http XML:eXtensible Markup Language (可扩展标记语言). XML 是一种标记语言,很类似 HTML. XML 的设计宗旨 ...
- 智能家居手势识别,只需百度AI即可搞定
上次我尝试做了一个给眼镜加特效,针对的是静态图像,具体文章参考 https://ai.baidu.com/forum/topic/show/942890 . 这次我尝试在视频中加眼镜特效,并且加上手势 ...
- linux部署.net Core项目
首篇笔记,多多关照.方便回忆和给新手指导,大神绕道 首先在Linux系统部署.net Core项目首先准备一个Linux系统的服务器,百度云,阿里云都行. 1.net core 部署在Linux系统上 ...
- flask项目统一捕获异常并自定义异常信息
背景: 在日常编写了一些flask项目,主要用于测试方面的mock场景,但迭代到后期发现有时候会抛出各种乱七八糟的异常或者直接500且没有任何异常信息,这种情况一般都是某个代码块没有用try ...
- DRF单表序列化和反序列化
安装 djangorestframework pip install djangorestframework 将rest_framework注册到app上 INSTALLED_APPS = [ 're ...
- Java 添加超链接到Word文档
对特定元素添加超链接后,用户可以通过点击被链接的元素来激活这些链接,通常在被链接的元素下带有下划线或者以不同的颜色显示来进行区分.按照使用对象的不同,链接可以分为文本超链接,图像超链接,E-mail链 ...
- 使用EasyPOI导入导出图片出现数组越界异常
在我使用easypoi做导出功能的时候,突然抛了一个数组越界异常,找了很久也没找到,最后猜想有可能是路径出了问题,然后打印了一下图片存放的路径,结果发现在其保存路径上存在“.”,也就是easypoi底 ...
- doPost()和doGet()方法的区别?
GET和POST请求都是http的请求方式,用户通过不同的http的请求方式完成对资源(url)的不同操作.GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作,具 ...
- 小白到大神,你需要了解的 sqlite 最佳实践
本文微信公众号「AndroidTraveler」首发. 背景 本文是对一篇英文文档的翻译,原文请见文末链接. 并发数据库访问 假设你实现了自己的 SQLiteOpenHelper. public cl ...