一起学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 2823 Sliding Windows (单调队列+输入输出挂)
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 73426 Accepted: 20849 ...
- tomcat session共享
1.版本 redis3.2 nginx tomcat8.5 2.下载jar包 tomcat-cluster-redis-session-manager 解压后大家可以看看 readMe.tx ...
- bsoj5988 [Achen模拟赛]期望 题解
bsoj5988 Description [题目背景] NOI2018 已经过去了许久,2019 届的 BSOIer 们退役的退役,颓废的颓废,计数能力大不如前.曾经的数数之王 xxyj 坦言:&qu ...
- JavaFX如何制作鼠标多击事件?
JavaFX制作鼠标双击或者多击事件需要用到getClickCount()方法,这个方法需要添加addEventHandler()方法,addEventHandler()是事件方法. 1 scene. ...
- LAMPSecurity: CTF6 Vulnhub Walkthrough
镜像下载地址: https://www.vulnhub.com/entry/lampsecurity-ctf6,85/ 主机扫描: ╰─ nmap -p- -sV -oA scan 10.10.202 ...
- bossplayersCTF 1: Vulnhub Walkthrough
主机扫描: http://10.10.202.130/ <!--WkRJNWVXRXliSFZhTW14MVkwaEtkbG96U214ak0wMTFZMGRvZDBOblBUMEsK--> ...
- super performSelector: 解决调用父类私有方法的问题
super performSelector: 解决objc调用父类私有方法的问题 Objc中[super performSelector: ...]并不会像其他语言一样能良好的工作.super只是编译 ...
- 搭建API Mock
所需环境 Node.js + MySQL 5.7+ Redis 4.0+ Node.js 安装 .要安装nvm,需要安装构建源包所需的工具,CentOS 上安装,用这些命令来安装构建工具: sudo ...
- 管网平差的python程序
在市政给水管网当中,管网平差的目的是在已知节点流量.管段长度的情况下,求得各管段流量和对应的经济管径.本科生学习阶段了解并掌握管网平差原理及方法是必不可少的环节. 在下面的程序当中,将利用哈代克罗斯法 ...
- harbor部署之SSL
harbor部署之SSL 1 签名证书与自签名证书 签名证书:由权威颁发机构颁发给服务器或者个人用于证明自己身份的东西. 自签名证书:由服务器自己颁发给自己,用于证明自己身份的东西,非权威颁发机构发布 ...