zoukankan      html  css  js  c++  java
  • Spring MVC注解开发入门

    注解式开发初步

     常用的两个注解:

    @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求。标识当前类是控制层的一个具体的实现

    @requestMapping:放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestmapping来访问

     扩充:

    注解名称

    作用

    @Controller

    注解标明该类需要Spring容器自动加载,将一个类成为 Spring 容器的 Bean。

    @RequestMapping

    可以标注在类定义处,将 Controller 和特定请求关联起来;还可以标注在方法签名处。所以在类声明处标注的 @RequestMapping 相当于让 POJO 实现了 Controller 接口,而在方法定义处的 @RequestMapping 相当于让 POJO 扩展 Spring 预定义的 Controller(如 SimpleFormController 等)。

    @Resource

    用来注解该属性的SETTER方法参数来源于Spring Bean

    @ModelAttribute

    ①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;

    ②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;

    ③暴露@RequestMapping方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。

    @SessionAttributes

    代表被注解对象会被存放到HttpSession作用域

    @PathVariable

    用于将请求URL中的模板变量映射到功能处理方法的参数上

    @requestParam

    用于将请求参数区数据映射到功能处理方法的参数上

    前提是:配置一个包扫描器

    案例:使用@Controller和@RequestMapping()实现欢迎程序

    配置包扫描器:

    FirstController:

    package cn.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.stereotype.Controller;
    /**
     * 
     * @author 景佩佩
     *
     */
        @Controller
        public class FirstController{
            @RequestMapping("/dofirst.do")
             public String doFirst(){
                
                 return "/WEB-INF/index.jsp";
             }
                   
        }
        

     

    一个处理类中定义N个处理器方法

    package cn.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.stereotype.Controller;
    /**
     * 
     * @author 景佩佩
     *
     */
        @Controller
        public class FirstController{
            @RequestMapping("/dofirst.do")
             public String doFirst(){
                
                 return "/WEB-INF/index.jsp";
             }
    
            
    
              @RequestMapping("/dosecond.do")
          public String doSecond(){
             return "/WEB-INF/index.jsp";
          }
                   
        }

     

     命名空间:

     

    请求中的通配符用法

    package cn.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    /**
     * 
     * @author 景佩佩
     *
     */
        @Controller
        //命名空间
        @RequestMapping("/hr")
        public class FirstController{
            @RequestMapping("/dofirst.do")
             public String doFirst(){
                
                 return "/WEB-INF/index.jsp";
             }
            
                    
            @RequestMapping("/dosecond.do")
             public String doSecond(){
                 return "/WEB-INF/index.jsp";
             }
            
              
             
              @RequestMapping("/*third.do")  // *代表的0个或者N个字符,匹配上的所有以third结尾的格式
                 public String doThird(){
                     return "/WEB-INF/index.jsp";
                 }
                
                @RequestMapping ("/fourth*.do") //*代表的0个或者N个字符,匹配所有以fourth开头的地址格式
                 public String doFour(){
                     return "/WEB-INF/index.jsp";
                 }
              
              
              @RequestMapping("/**/fiveth.do")   //必须以fiveth结尾,前面可以有N级别目录,也可以是0级
                 public String doFive(){
                     return "/WEB-INF/index.jsp";
                 }
              
                @RequestMapping("/*/sixth*.do")  //在hr和sixth之前必须存在一级路径。并且只能是一级
                 public String doSix(){
                     return "/WEB-INF/index.jsp";
                 }
           
        }
        

     

     

     请求中方式的定义

    对于@RequestMapping,有一个属性method,用于对被注解方法所处理请求的提交方式进行限制,只有满足该method属性指定的提交方式,才会执行被注解方法。 method属性的取值为RequestMethod,是一个枚举常量。常用值为 RequestMethod.GET 与 RequestMethod.POST

    package cn.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    /**
     * 
     * @author 景佩佩
     *
     */
        @Controller
        //命名空间
        @RequestMapping("/hr")
        public class FirstController{
                    
            @RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
             public String doFirst(){
                 return "/WEB-INF/index.jsp";
             }
            
        
           
        }
        
        

    默认是GET,POST的话会报错405

    处理器方法的参数

    处理器方法中常用的参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用
    1)HttpServletRequest
    2)HttpServletResponse
    3)HttpSession
    4)用于承载数据的Model
    5)请求中所携带的请求参数

    我们先用前三种

    package cn.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    /**
     * 
     * @author 景佩佩
     *
     */
        @Controller
        //命名空间
        @RequestMapping("/hr")
        public class FirstController{        
            @RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
             public String doFirst(HttpServletRequest request,HttpServletResponse response,HttpSession session,Model model){
                System.out.println("request	"+request);
                System.out.println("response	"+response);
                System.out.println("session	"+session);
                System.out.println("model	"+model);
                 return "/WEB-INF/index.jsp";
             }
            
        }
        

    请求中所携带的请求参数——零散参数

    @RequestMapping(value="/dofirst.do",method=RequestMethod.GET)
        public String doFirst(Model model){
         
            Map<String,Object> datas=new HashMap<String, Object>();
            datas.put("uname", "火狐");
            model.addAllAttributes(datas);
            System.out.println(model);
             
            return ""/WEB-INF/index.jsp";
        }

    对象参数:装配成实体

    自定义实体类:UserInfo

    package cn.entity;
    
    public class UserInfo {
        private String uname;
    
        public String getUname() {
            return uname;
        }
    
        public void setUname(String uname) {
            this.uname = uname;
        }
    
    }

    FirstController控制器类方法参数是实体类对象:

    package cn.controller;
    
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    
    import cn.entity.UserInfo;
    
        @Controller
        //命名空间
        @RequestMapping("/hr")
        public class FirstController{
            
            @RequestMapping(value="/dofirst.do")
             public String doFirst(UserInfo info){
                System.out.println(info.getUname());
                
                 return "/WEB-INF/index.jsp";
             }
            
        
        }
        

    appliactiobContext.xml

    jsp页面form表单提交:

     

    解决乱码问题:Web.xml配置编码过滤器---CharacterEncodingFilter

  • 相关阅读:
    lsyncd实时同步搭建指南——取代rsync+inotify
    Linux内存管理
    [Python爬虫] 之十一:Selenium +phantomjs抓取活动行中会议活动信息
    [Python爬虫] 之十:Selenium +phantomjs抓取活动行中会议活动
    [Python爬虫] 之九:Selenium +phantomjs抓取活动行中会议活动(单线程抓取)
    python 正则表达式
    Scrapy 安装
    python 安装whl文件
    [Python爬虫] 之八:Selenium +phantomjs抓取微博数据
    [Python爬虫] 之七:selenium webdriver定位不到元素的五种原因及解决办法(转载)
  • 原文地址:https://www.cnblogs.com/jingpeipei/p/6222829.html
Copyright © 2011-2022 走看看