微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一起学SpringMVC之注解

概述

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注解两项内容

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xmlns:context="http://www.springframework.org/schema/context"
 5 xmlns:mvc="http://www.springframework.org/schema/mvc"
 6 xsi:schemaLocation="http://www.springframework.org/schema/beans
 7  http://www.springframework.org/schema/beans/spring-beans.xsd
 8  http://www.springframework.org/schema/context
 9  http://www.springframework.org/schema/context/spring-context.xsd
10  http://www.springframework.org/schema/mvc
11  http://www.springframework.org/schema/mvc/spring-mvc.xsd">
12       <!-- 配置注解的扫描 -->
13      context:component-scan base-package="com.hex.second"></context:component-scan14       支持MVC的注解 15      mvc:annotation-driven mvc:annotation-driven16       静态资源的支持 17      mvc:default-servlet-handler/>
18 </beans>

2. 新建一个增加方法,并在方法添加注解

如下所示,通过@Controller表示一个类,通过@RequestMapping("/Hello")标识一个访问请求处理方法

@Controller
//@RequestMapping("/HC")
 3 public class HelloController {
 4     
 5     /**
 6      * 通过注解的方式声明Controller,不带参数
     * @return
 8      */
 9     @RequestMapping("/Hello")
10     public ModelAndView HelloMvc(){
11         ModelAndView mav=new ModelAndView();
12         mav.addobject("msg","HelloWorld,HelloSpringMVC!!!");
13         mav.setViewName("WEB-INF/jsps/HelloWorld.jsp"14         return mav;
15     }
16 }

3. 新增一个Jsp页面接收并显示内容

如下所示:通过${msg} 接收后台传递过来的参数

 1 <%@ page language="java contentTypetext/html; charset=UTF-8"
 2     pageEncodingUTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" 4 html 5 headMeta http-equiv="Content-Type" content="text/html; charset=UTF-8"title>第一次接触SpringMVCbodyh1>欢迎信息11     >${msg}12 13 4. 访问

打开浏览器,输入网址即可访问,如下所示:

 

SpringMVC接收页面传递数据的方式(前端-->后端)

1. 通过方法的参数的方式

如下所示:SpringMVC能够自动页面传递的数据和函数的参数匹配起来;

如果是日期格式的数据,需要进行格式化

 1          * 以参数的方式传递获取页面传递过来的值
@param name
 age
 date 日期格式,由客户端传递参数到服务端时,需要进行日期格式化,否则会报错
     * 注解如下:@DateTimeFormat(pattern="yyyy-MM-dd")
 9     @RequestMapping("/Hello2"public ModelAndView HelloMvc2(String name,int age,@DateTimeFormat(pattern="yyyy-MM-dd")Date date){
11         System.out.println("name:"+name);
12         System.out.println("age:"+age);
13         System.out.println("date"+date);
14         ModelAndView mav=15         mav.addobject("name",name);
16         mav.addobject("age"17         mav.addobject("date"18         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp"19         20     }

2. 通过对象的方式进行数据的传递

如下所示,先定义一个User类,来接收页面传递的数据,SpringMVC能自动进行匹配

     * 通过对象的方式接收参数,SpringMVC可以自动匹配参数到对象的属性     * 方便扩展
 user
 6       7     @RequestMapping("/Hello3" 8      ModelAndView HelloMvc3(User user){
 9         System.out.println("name:"+user.getName());
10         System.out.println("age:"+user.getAge());
11         System.out.println("date"+user.getDate());
12         ModelAndView mav=13         mav.addobject("name"14         mav.addobject("age"15         mav.addobject("date"16         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp"17         18     }

Jsp页面接收如下所示:以key.property的方式获取内容

>Hello world>ID:${user.id}12     >姓名:${user.name}13     >年龄:${user.age}14     >时间:${user.date}16 3. 通过内置对象的方式进行数据的传递
     * 通过内置对象HttpServletRequest来获取参数
 req
 resp
 7     @RequestMapping("/Hello4" ModelAndView HelloMvc4(HttpServletRequest req,HttpServletResponse resp){
 9         System.out.println("name:"+req.getParameter("name"));
10         System.out.println("age:"+req.getParameter("age"11         System.out.println("date"+req.getParameter("date"12         页面传递参数的一种
13         ModelAndView mav=14         mav.addobject("name",req.getParameter("name"15         mav.addobject("age",req.getParameter("age"16         mav.addobject("date",req.getParameter("date"17         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp"18         19     }

SpringMVC页面接收参数的方式(后端-->前端)

1. 采用ModelAndView进行传值

如下所示:可以通过键值对的方式增加参数

     * 往页面传递参数
 4       5     @RequestMapping("/Hello5" 6      ModelAndView HelloMvc5(){
 7          8         ModelAndView mav= 9         mav.addobject("name","张三"10         mav.addobject("age",2011         mav.addobject("date",1)"> Date());
12         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp"13         14     }

2. 通过Model的方式传递参数

如下所示:Model作为一个参数,可以直接新增键值对,返回一个字符串,表示页面的路径

     * 从后端往前端跳转,使用Model的方式传参
 5     @RequestMapping("/Hello6" String HelloMvc6(Model model){
 8         model.addAttribute("name",1)"> 9         model.addAttribute("age",1610         model.addAttribute("date",1)">11         return "WEB-INF/jsps/HelloWorld2.jsp";
12     }

3. 通过对象的方式传递参数

如下所示:将对象通过属性的方式进行传递,也需要一个key值作为标识

     * 采用对象的方式传参到前台
 model
 5       6     @RequestMapping("/Hello7" 7      String HelloMvc7(Model model){
 8          9         User user=new User(1L,"李四",20,1)">10         model.addAttribute("user"model.addAttribute(user);不建议用这种,会有一个认的key,是类名的首字母小写,和对象名无关
return "WEB-INF/jsps/HelloWorld3.jsp"13     } 

4. 通过内置对象传递参数

如下所示:内置对象HttpServletRequest传递参数并进行跳转

     * 通过内置对象往页面传参并跳转,不常用
@throws servletexception
 IOException
 7       8     @RequestMapping("/Hello8" 9     void HelloMvc8(HttpServletRequest req,HttpServletResponse resp) throws servletexception,IOException{
10         11         req.setAttribute("name","刘玲"12         req.setAttribute("age",2213         req.getRequestdispatcher("WEB-INF/jsps/HelloWorld2.jsp").forward(req,resp);
14     }

备注

 曾以为我是那崖畔的一枝花,后来才知道,不过是人海一粒沙。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐