• springmvc注解@Controller和@RequestMapping


    Spring从2.5版本引入注解,从而让开发者的工作变得非常的轻松

    springmvc注解Controller

    org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个控制器,使用该注解不需要继承特定的类或实现特定的接口,相比较配置文件而言更加简单。

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Controller {
    
    	String value() default "";
    
    }
    

    RequestMapping注解

    org.springframework.web.bind.annotation.RequestMapping注解用来指示Spring用哪一个类或者方法来处理请求动作,该注解可用于类或方法。当@RequestMapping注解在类上时候,所有的方法都将映射为相对于类级别的请求,表示该控制器处理的所有的请求都将被映射到value属性指示的路径下
    源码如下

    
    package org.springframework.web.bind.annotation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    import java.util.concurrent.Callable;
    
    import org.springframework.core.annotation.AliasFor;
    
    
    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Mapping
    public @interface RequestMapping {
    
    	/**
    	 * 给映射地址一个别名
    	 */
    	String name() default "";
    
    	/**
    	 * 用于将指定的请求的实际地址映射到方法上
    	 */
    	@AliasFor("path")
    	String[] value() default {};
    
    	@AliasFor("value")
    	String[] path() default {};
    
    	/**
    	 * 映射指定的请求的方法类型:
    	 * GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.
    	 */
    	RequestMethod[] method() default {};
    
    	/**
    	 * 指定request中必须包含某些参数值,才让该方法处理
    	 */
    	String[] params() default {};
    
    	/**
    	 * 指定request中必须包含某些指定的header值,才让该方法处理
    	 */
    	String[] headers() default {};
    
    	/**
    	 * 指定处理请求提交的内容(Content-Type),例如application/json、text/html等
    	 */
    	String[] consumes() default {};
    
    	/**
    	 * 指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型
    	 */
    	String[] produces() default {};
    
    }
    
    

    Model和 ModelAndView

    SpringMVC在内部使用一个org.springframework.ui.Model接口存储模型数据,类似Map接口。SpringMVC在调用处理方法之前会创建一个隐含的模型对象,作为模型数据的存储器。如果处理方法的参数为Model和ModelMap类型,则springMVC会将隐含模型的引用传递给这些参数。在处理方法内部,开发者就可以通过这个参数队形访问模型中的所有数据,也可以像模型中添加新的属性数据。
    UserController.java

    package com.rookie.bigdata.controller;
    
    import com.rookie.bigdata.domain.User;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * Created by dell on 2019/6/15.
     */
    @Controller
    public class UserController {
    
        private static final Log LOG = LogFactory.getLog(UserController.class);
    
        /**
         * @param loginname
         * @param password
         * @param model
         * @ModelAttribute修饰的方法会先于login调用,该方法用于接受前台jsp页面传入的参数,该方法 public void userNodel(String loginname, String password, Model model)可以直接改为 public void userNodel(String loginname, String password, ModelMap modelMap)  
         */
        @ModelAttribute
        public void userNodel(String loginname, String password, Model model) {
            LOG.info("该方法执行啦");
            //用于存储JSP页面传入的参数
            User user = new User();
            user.setLoginname(loginname);
            user.setPassword(password);
            //将user添加到Model中
            model.addAttribute("user", user);
        }
    
        @RequestMapping(value = "/login1")
        public String login(Model model) {
            //从Model中取出user对象
            User user = (User) model.asMap().get("user");
            System.out.println(user);
            //设置user对象的属性
            user.setUsername("张三");
            return "result1";
        }
    
    
    }
    
    

    loginForm1.jsp

    <%@ 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>测试Model</title>
    </head>
    <body>
    <h3>测试Model</h3>
    <form action="login1" method="post">
         <table>
             <tr>
             	<td><label>登录名: </label></td>
                 <td><input type="text" id="loginname" name="loginname" ></td>
             </tr>
             <tr>
             	<td><label>密码: </label></td>
                 <td><input type="password" id="password" name="password" ></td>
             </tr>
             <tr>
                 <td><input id="submit" type="submit" value="登录"></td>
             </tr>
         </table>
    </form>
    </body>
    </html>
    

    ModelAndView

    控制器处理方法的返回值如果是ModelAndView,则其既包含模型数据信息,也包含视图信息。
    如下代码跟上面的效果相同

    package com.rookie.bigdata.controller;
    
    import com.rookie.bigdata.domain.User;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    /**
     * Created by dell on 2019/6/15.
     */
    @Controller
    public class User1Controller {
    
        private static final Log LOG = LogFactory.getLog(User1Controller.class);
    
        /**
         * @param loginname
         * @param password
         * @param modelAndView
         */
        @ModelAttribute
        public void userNodel(String loginname, String password, ModelAndView modelAndView) {
            LOG.info("该方法执行啦");
            //用于存储JSP页面传入的参数
            User user = new User();
            user.setLoginname(loginname);
            user.setPassword(password);
            //将user添加到Model中
            modelAndView.addObject("user", user);
        }
    
        @RequestMapping(value = "/login1")
        public ModelAndView login(ModelAndView modelAndView) {
            //从ModelAndView的Model中取出user对象
            User user = (User) modelAndView.getModel().get("user");
            System.out.println(user);
            //设置user对象的属性
            user.setUsername("张三");
            modelAndView.setViewName("result1");
            return modelAndView;
        }
    }
    
  • 相关阅读:
    oracle 12C linux centos7.5 安装 12C
    FizzBuzz
    批量判断能否telnet登录
    统计所有机器的挂载情况
    ffmpeg windows vs library 下载地址
    需求文档测试
    接口测试分析
    chrome网页截图
    不要为了测试写一个新系统
    C# 判断是否为数字
  • 原文地址:https://www.cnblogs.com/haizhilangzi/p/11026399.html
Copyright © 2020-2023  润新知