zoukankan      html  css  js  c++  java
  • 一起学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-scan>
    14      <!-- 支持MVC的注解 -->
    15      <mvc:annotation-driven ></mvc:annotation-driven>
    16      <!-- 静态资源的支持 -->
    17      <mvc:default-servlet-handler/>
    18 </beans>

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

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

     1 @Controller
     2 //@RequestMapping("/HC")
     3 public class HelloController {
     4     
     5     /**
     6      * 通过注解的方式声明Controller,不带参数
     7      * @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" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>第一次接触SpringMVC</title>
     8 </head>
     9 <body>
    10     <h1>欢迎信息</h1>
    11     <h1>${msg}</h1>
    12 </body>
    13 </html>

    4. 访问

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

     

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

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

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

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

     1     /**
     2      * 以参数的方式传递获取页面传递过来的值
     3      * @param name
     4      * @param age
     5      * @param date 日期格式,由客户端传递参数到服务端时,需要进行日期格式化,否则会报错
     6      * 注解如下:@DateTimeFormat(pattern="yyyy-MM-dd")
     7      * @return
     8      */
     9     @RequestMapping("/Hello2")
    10     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=new ModelAndView();
    15         mav.addObject("name", name);
    16         mav.addObject("age", age);
    17         mav.addObject("date", date);
    18         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
    19         return mav;
    20     }

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

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

     1     /**
     2      * 通过对象的方式接收参数,SpringMVC可以自动匹配参数到对象的属性中
     3      * 方便扩展
     4      * @param user
     5      * @return
     6      */
     7     @RequestMapping("/Hello3")
     8     public 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=new ModelAndView();
    13         mav.addObject("name", user.getName());
    14         mav.addObject("age", user.getAge());
    15         mav.addObject("date", user.getDate());
    16         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
    17         return mav;
    18     }

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

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Hello world</title>
     8 </head>
     9 <body>
    10 <h1>欢迎信息</h1>
    11     <h1>ID:${user.id}</h1>
    12     <h1>姓名:${user.name}</h1>
    13     <h1>年龄:${user.age}</h1>
    14     <h1>时间:${user.date}</h1>
    15 </body>
    16 </html>

    3. 通过内置对象的方式进行数据的传递

     1     /**
     2      * 通过内置对象HttpServletRequest来获取参数
     3      * @param req
     4      * @param resp
     5      * @return
     6      */
     7     @RequestMapping("/Hello4")
     8     public 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=new ModelAndView();
    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         return mav;
    19     }

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

    1. 采用ModelAndView进行传值

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

     1 /**
     2      * 往页面传递参数
     3      * @return
     4      */
     5     @RequestMapping("/Hello5")
     6     public ModelAndView HelloMvc5(){
     7         //往页面传递参数的一种
     8         ModelAndView mav=new ModelAndView();
     9         mav.addObject("name", "张三");
    10         mav.addObject("age", 20);
    11         mav.addObject("date",new Date());
    12         mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp");
    13         return mav;
    14     }

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

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

     1     /**
     2      * 从后端往前端跳转,使用Model的方式传参
     3      * @return
     4      */
     5     @RequestMapping("/Hello6")
     6     public String HelloMvc6(Model model){
     7         //往页面传递参数的一种
     8         model.addAttribute("name", "张三");
     9         model.addAttribute("age", 16);
    10         model.addAttribute("date", new Date());
    11         return "WEB-INF/jsps/HelloWorld2.jsp";
    12     }

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

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

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

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

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

     1     /**
     2      * 通过内置对象往页面传参并跳转,不常用
     3      * @param req
     4      * @param resp
     5      * @throws ServletException
     6      * @throws IOException
     7      */
     8     @RequestMapping("/Hello8")
     9     public void HelloMvc8(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{
    10         //往页面传递参数的一种
    11         req.setAttribute("name", "刘玲");
    12         req.setAttribute("age", 22);
    13         req.getRequestDispatcher("WEB-INF/jsps/HelloWorld2.jsp").forward(req, resp);
    14     }

    备注

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

  • 相关阅读:
    React中路由的基本使用
    React中props
    一款超级炫酷的编辑代码的插件 Power Mode
    React中使用styled-components的基础使用
    对ES6的一次小梳理
    动态规划法(七)鸡蛋掉落问题(二)
    动态规划法(六)鸡蛋掉落问题(一)(egg dropping problem)
    三对角线性方程组(tridiagonal systems of equations)的求解
    Sherman-Morrison公式及其应用
    动态规划法(四)0-1背包问题(0-1 Knapsack Problem)
  • 原文地址:https://www.cnblogs.com/hsiang/p/11355444.html
Copyright © 2011-2022 走看看