Spring MVC 知识点归纳

    科技2026-09-29  11

    1、Spring Controller方法返回值类型

    1)、返回String类型

    @RequestMapping("/returnString") public String returnString(){ //返回/WEB-INF/jsp/returnDemo/returnString.jsp页面 return "returnDemo/returnString"; }

    2)、返回ModelAndView类型(可以携带参数)

    @RequestMapping("/returnModelAndView") public ModelAndView returnModelAndView(){ //解析到/WEB-INF/jsp/retrunDemo/returnModelAndView.jsp页面 ModelAndView mv=new ModelAndView("/returnDemo/returnModelAndView"); //携带参数传递到页面 mv.addObject("username","小明"); return mv; }

    3)、返回void类型 (返回void类型一般配合PrintWriter使用,和Servlet用法类似)

    @RequestMapping("/returnVoid") public void returnVoid(PrintWriter pw){ pw.write("Hello World.returnVoid") }

    4)、返回Json类型 //返回json需要添加@ResponseBody 注解

    注意:SpringMVC返回json需要使用jackson ,添加相关的架包 ezmorph-1.0.6.jar 、 jackson-core-asl-1.9.13.jar 、jackson-mapper-asl-1.9.13.jar 、 json-lib-2.4-jdk15.jar ;其中@ResponseBody和produces=“application/json” 必不可少

    @ResponseBody //返回json需要添加@ResponseBody注解 @RequestMapping(value="/returnJson",produces="application/json")//需要指定produces="application/json" public Object returnJson(User user){ user.setUserName(user.getUserName()+"Json数据"); return JSONSerializer.toJSON(user); } }

    2、传递参数到页面

    1)、通过request方式

    @RequestMapping("byRequest") public String byRequest(HttpServletRequest request,HttpServletResponse response,HttpSession session){ //Spring mvc中可以方便获取到request、response、session System.out.println("request="+request); System.out.println("response="+response); System.out.println("session="+session); //设置需要传递到页面的数据 request.setAttribute("username","小明同学"); return "/parametersToPageDemo"; }

    2)、model方式

    @RequestMapping("/byModel") public String byModel(Model model){ //设置需要传递到页面的数据 model.addAttribute("userName","小明同学"); return "/parametersToPageDemo"; }

    3)、ModelAndView方式

    @RequestMapping("/returnModelAndView") public ModelAndView returnModelAndView(){ //解析到/WEB-INF/jsp/retrunDemo/returnModelAndView.jsp页面 ModelAndView mv=new ModelAndView("/returnDemo/returnModelAndView"); //携带参数传递到页面 mv.addObject("username","小明"); return mv; }

    4、获取参数值

    1)、自动类型匹配 (针对少量的参数)

    @RequestMapping("/autoParameter") public ModelAndView autoParameter(String username,String password){ System.out.println("username=“+username); System.out.println("password=“+password); ModelAndView mv=new ModelAndView ("/getParameterDemo/autoParameter"); mv.addObject("username",usename); mv.addObject("password",password); return mv; }

    2)、自动封装pojo (针对大量参数的提交)

    // 编写po User public calss User implements Serializable{ private String username; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

    编写Controller方法

    @RequestMapping("/autoMaticBoxing") public ModelAndView autoMaticBoxing(User user){ System.out.println("username=“+user.getUserName()); System.out.println("password=“+user.getPassword()); ModelAndView mv=new ModelAndView ("/getParameterDemo/autoMaticBoxing"); mv.addObject("user",user); return mv; }

    3)、使用request获取请求参数

    @RequestMapping("/getParamByRequest") public ModelAndView getParamByRequest(HttpServletRequest request ){ String username=request.getParameter("username"); String password=request.getParameter("password"); ModelAndView mv=new ModelAndView("/getParameterDemo/getParamByRequest"); mv.addObject("username",username); mv.addObject("password",password); return mv; }

    4)、使用@RequestParam获取参数

    @RequestMapping("/getByRequestParam") public ModelAndView getByRequestParam(@RequestParam(value="userName",required=true)String username,@RequestParam(value="password",required=true)String password){ //Value参数表示:从页面传递过来的参数名称,相当于request.getParameter("username"); //equired=true 表示必填,fase表示非必填,如果必填但是没值就抛出异常 //注意:这里第一个username要和表单的name对应,后面的String是自己从新定义的属性值 System.out.println("username=“+username); System.out.println("password=“+password); ModelAndView mv=new ModelAndView("/getParameterDemo/getByRequestParam"); mv.addObject("username",username); mv.addObject("password",password); return mv; }

    4、Spring MVC重定向

    1)、无参重定向

    // 1、使用String方式,在返回String类型的方法上使用这个方式 @RequestMapping("/redirectNoParaString") public String redirectNoParaString(){ return "redirect:/redirectDemo/targetNoPara.do"; } //2、使用ModelAndView方式,在返回ModelAndView类型的方法上使用这个方式 public ModelAndView redirectNoParaMv(){ ModelAndView mv=new ModelAndView("redirect:/redirectDemo/targetNoPara.do"); return mv; }

    2)、有参重定向 1、拼接URL:这种方式就是在无参重定向的url上拼接参数的方式传递值。

    //有参重定向String形式拼接URL @RequestMapping("/redirectWithParaString1") public String redirectWithParaString1(){ String name="小明"; int age=21; return "redirect:/redirectDemo/targetWithPara.do?name="+name+"&age="+age; } //有参重定向ModelAndView形式拼接 @RequestMapping("/redirectWithParaMv1") public ModelAndView redirectWithParaMv1(){ String name="小明"; int age=21; ModelAndView mv=new ModelAndView("redirect:/redirectDemo/targetWithPara.do?name="+name+"&age="+age); return mv; }

    2、使用SpringMVC提供的RedirectAttributes传递参数

    //有参重定向String形式RedirectAttributes @RequestMapping("/redirectWithParaString2") public String redirectWithParaString2(RedirectAttributes attributes){ String name="小明"; int age=21; //设置重定向参数 attributes.addAttribute("name",name); attributes.addAttribute("age",age); return "redirect:/redirectDemo/targetWithPara.do"; } //有参重定向ModelAndView形式拼接URL @RequestMapping("/redirectWithParaMv2") public ModelAndView redirectWithParaMv2(RedirectAttributes attributes){ String name="小明"; int age=21; //设置重定向参数 attributes.addAttribute("name",name); attributes.addAttribute("age",age); ModelAndView mv=new ModelAndView("redirect:/redirectDemo/targetWithPara.do?"); return mv; }

    5、什么是SpringMVC?

       Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过吧Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰 的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 优点: 1、可以支持各种视图技术,而不仅仅局限于JSP. 2、与Spring框架集成(如IOC容器,AOP等)。 3、清晰的角色分配:前端控制器(dispatcherServlet),请求到处理映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。 4、支持各种请求资源的映射策略。

    6、SpringMVC的工作原理

    1、用户发起请求到前端控制器(DispatcherServlet) 2、前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle),通过xml配置或者注解进行查找。 3、找到以后处理器映射器(HandlerMapping)像前端控制器返回执行链(HeandlerExecutionChain)。 4、前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler) 5、处理器适配器去执行Handler。 6、Handler执行完给处理器适配器返回ModelAndView。 7、处理器适配器向前端控制器返回ModelAndView。 8、前端控制器请求视图解析器(ViewResolver)去进行视图解析。 9、视图解析器像前端控制器返回view。 10、前端控制器对视图进行渲染。 11、前端控制器向用户响应结果。 SpringMVC中的几个组件: 1、前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 2、处理器映射器(HandlerMapping):根据URL去查找处理器。 3、处理器(Handler):需要程序员去写代码处理逻辑的 4、处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类笔记本的适配器(适配器模式的应用) 5、视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对的页面

    7、常用注解

    1)、@Controller : 负责注册一个bean到spring上下文中。 2)、@RequestMapping : 注解为控制器指定可以处理那些URL请求 3)、@RequestBody : 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上,再把HttpMessageConverter返回的对象数据绑定到controller中方法的参数上。 4)、@ResponseBody : 该注解用于将Controller的方法返回的对象,通过适应的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。 5)、@ModelAttribute : 在方法定义上使用@ModelAttribute 注解:spring mvc 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法,在方法的入参前使用@ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,在将请求参数-绑定到对象中,再传入入参对象添加到模型中。 6)、@RequestParam : 在处理方法入参处理使用@RequestParam可以把参数传递给请求方法。 7)、@PathVariable : 绑定URL占位符到入参 8)、@ExceptionHandler : 注解到方法上,出现异常是会执行该方法 9)、@ControllerAdvice : 使用一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常。

    Processed: 0.008, SQL: 9