程序员社区

SpringMVC注解式开发

一.搭建环境

  1. 后端控制器无需实现接口,添加相应注解
  2. springmvc中无需注册controller控制器
  3. springmvc配置文件中添加组件扫描,和mvc注解驱动的标签
<!-- 注册组件扫描器 -->        
<context:component-scan base-package="com.bjsxt.handlers"></context:component-scan>

<!-- 注册mvc注解驱动 -->    
<mvc:annotation-driven/>
二.常用注解
  1. @Controller 将当前类交给spring容器去管理
@Controller(value="demoController")  //value为id值,可以通过applicationContext.getBean(..)获取
public class DemoController{

}
  1. @RequestMapping()
    在类上注解作用:起到命名空间的作用,限定访问范围
    在方法上注解的作用:定义handlerMethod的访问路径
@RequestMapping("/registry")//起到命名空间的作用,限定访问范围
public class DemoController{

        @RequestMapping("/register2.do")
        public String demo03(@RequestParam("name1")String name,@RequestParam(defaultValue="0",value="age2")int age,Demo people){
        System.out.println(name+":"+age);
        System.out.println(people);
        return "welcome";
      }
        
        //可以匹配多个访问路径  因为该注解value的类型是String[] 字符串数组  
    @RequestMapping({"/register.do","/hello.do"})
    public ModelAndView hello(){
        ModelAndView mv = new ModelAndView();
        //向mv中添加数据  以下代码相当于request.setAttribute();
        mv.addObject("name", "zhangsan");
        //设置跳转的视图路径
        mv.setViewName("/WEB-INF/welcome.jsp");
        return mv;
    }
}

  1. @RequestParam(value="",defaultValue="b",required=true)
//@RequestParam 矫正形参和接受参数名不一致的问题  同时可以矫正对象类型如@RequestParam List<String> hobby
@RequestMapping("demo03")
    public String demo03(@RequestParam("name1")String name,@RequestParam(defaultValue="0",value="age2")int age,Demo people){
        System.out.println(name+":"+age);
        System.out.println(people);
        return "welcome";
        }
  1. @PathVariable(value=" ") restful风格传参
@RequestMapping("demo03/{name1}/{age}")
        // @PathVariable该注解可以矫正参数名,同时声明该变量为路径变量
        //@RequestMapping中的参数需要用{}括起来。
        //例如:@RequestMapping("demo03/{name1}/{age}")      不可以被*.do拦截,中央调度器的url-parttern需要为/
        //例如:@RequestMapping("/{name1}/{age}/demo03.do")  可以被*.do拦截(路径变量放到前面)
    public String demo03(@PathVariavle("name1") String name,@PathVariable int age){
        System.out.println(name+":"+age);
        return "welcome";
        }

5.@RequestBody(将json字符串,将其中的数据封装到对象,底层采用的是jackson)

      @RequestMapping("/register.do")
    public void demo01(@RequestBody Star star){
        System.out.println("star:"+star);
    }
    
//注意:[1] 前端页面发送的请求contentType需要为 application/json
             [2] data中的数据需要为json字符串,可以用 JSON.stringify(obj) 函数,将json对象转换成字符串

6.@ResponseBody

        //在方法上只有@RequestMapping时,如果返回值类型不为void,则视图解析器认为需要页面跳转
    //在方法上添加@ResponseBody时恒不跳转
    //1.如果返回值满足key-value形式(对象,数组,集合等)
    //  把响应头设置为application/json;charset=utf-8
    //  把返回的对象转换成json字符串以流的方式响应给客户端
    //2.如果返回值不满足key-value(基本数据类型和字符串等)
    //  把响应头设置为text/html
    //  把返回值以流的方式输出
    //  如果返回值包含乱码,(中文乱码)在RequsetMapping中设置produces="text/html;charset=utf-8"
    
        @RequestMapping  
        public People demo06(){
        return new People("李四",55);
    }

三.处理器方法(handlerMethod)中常用的参数

  1. HttpServletRequest
  2. HttpServletResponse
  3. HttpSession
  4. 用于承载数据的Model、Map、ModelMap
  5. 请求中所携带的请求参数

四.接受请求参数的方法

  1. 逐个接受
@RequestMapping("demo02")
    public String demo02(String name,int age){
        System.out.println(name+":"+age);
        return "welcome";
    }


  1. 对象形式接受
//JSP页面提交的name名称要和对象的属性名一直
@RequestMapping("demo02")
    public String demo02(People people){
        System.out.println(people);
        return "welcome";
    }

  1. 域属性接受
//Demo对象中有一个对象属性people
//此时jsp页面提交的name形式为people.age people.name
@RequestMapping("demo03")
    public String demo03(Demo demo){
        System.out.println(demo);
        return "welcome";
    }

  1. 集合域属性接受
//Demo对象中有一个对象属性List<People> peoples
//此时jsp页面提交的name形式为
//peoples[0].age    peoples[0].name
//peoples[1].age    peoples[1].name
@RequestMapping("demo03")
    public String demo03(Demo demo){
        System.out.println(demo);
        return "welcome";
    }

  1. 集合数组形式的接受
//数组
//jsp页面中的checkbox中的name为hobby,handlerMethod的接受的数据形参名也要为hobby
@RequestMapping("demo03")
    public String demo03(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "welcome";
    }


//集合(对集合需要配置@RequestParam注解矫正类型)
//读取checkbox的参数,封装成集合形式
    @RequestMapping("demo02")
    public String demo02(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "welcome";
    }

6.restfull风格传参(@PathVariable)

//url为  demo01/lisi/555
//需要在@RequestMapping中对要接受的参数配置demo01/{name}/{age} 
//{}表示路径为变量
//在@PathVariable中如果不配置value的值,则默认以形参列表对应的参数名到PathVariable中去找对应的值

    @RequestMapping("demo01/{name1}/{age}")
    public String demo02(@PathVariable("name1") String name,@PathVariable int age){
        System.out.println(name+":"+age);
        return "welcome";
    }

7.接受Json字符串(涉及注解@RequestBody,注册mvc注解驱动,导入jackson.jar包)

    @RequestMapping(value="/demo06",produces="application/json;charset=utf-8")
    @ResponseBody
    //在方法上只有@RequestMapping时,如果返回值类型不为void,则视图解析器认为需要页面跳转
    //在方法上添加@ResponseBody时恒不跳转
    //1.如果返回值满足key-value形式(对象,数组,集合等)
    //  把响应头设置为application/json;charset=utf-8
    //  把返回的对象转换成json字符串以流的方式响应给客户端
    //2.如果返回值不满足key-value(基本数据类型和字符串等)
    //  把响应头设置为text/html
    //  把返回值以流的方式输出
    //  如果返回值包含乱码,(中文乱码)在RequsetMapping中设置produces="text/html;charset=utf-8"
    
    public People demo06(){
        return new People("李四",55);
    }
    

8.解决中文乱码问题(CharacterEncodingFilter)

<filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
  </filter>
赞(0) 打赏
未经允许不得转载:IDEA激活码 » SpringMVC注解式开发

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区