原理:
用户发送请求(user.do)给服务器,服务器收到请求后,发现DispatchServlet可以处理,于是调用DispatchServlet,DispatchServlet内部通过HandleMapping检查这个请求有没有对应的Controller,如果有,则调用Controller。Controller开始执行,执行完后,如果返回字符串,则ViewResolver将字符串转化成相应的视图对象,如果返回ModelAndView对象,该对象本身就包含了视图对象信息,DispatchServlet将视图对象中的数据输出给服务器,服务器将数据输出给客户端。
注解:
1.@Controller
和struts1一样,spring的Controller也是Singleton的。这就意味着会被多个请求线程共享。因此,我们将控制器设计成无状态类。在spring 3.0中,通过@controller标注即可将class定义为一个controller类。为使spring能找到定义为controller的bean,需要在spring配置文件中增加组件扫描标签:<context:component-scan base-package="xxx.yyy.zzz"/>,实际上,使用@component,也可以起到@Controller同样的作用。
2.@RequestMapping
在类前面定义则将url和类绑定。在方法前面定义则将url和类的方法绑定,示例代码:
package com.test.controller; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.test.service.EmployeeService; @Controller @RequestMapping("/employee") public class EmployeeController { private EmployeeService employeeService; public EmployeeService getEmployeeService() { return employeeService; } @Resource(name = "employeeService") public void setEmployeeService(EmployeeService employeeService) { this.employeeService = employeeService; } //http://localhost:8080/springmvc/employee?method=request&name=xxx @RequestMapping(params = "method=request") public String request(String name) { try { employeeService.add(new String(name.getBytes("iso8859-1"), "GBK")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return "result"; } }
3.@RequestParam
一般用于将指定的请求参数付给方法中形参。示例代码:
@RequestMapping("/hello") public String helloWorld(@RequestParam("id") int userId) { System.out.println("userId=" + userId); return "helloWorld"; }
这样就会将id参数的值付给userId。当然,如果请求参数名称和形参名称保持一致,则不需要这个注解。
4.@SessionAttributes
将Model中指定的属性放到session中。示例代码:
package com.test.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Controller @RequestMapping("/user") // 表示loginUser是session属性 @SessionAttributes("loginUser") public class UserController { @RequestMapping(value = "/loginUser", method = RequestMethod.POST) public String loginUser(String username, Model model) { // 把登录用户名的信息保存到session的loginUser中,注意loginUser和上面@SessionAttributes中的参数保持一致 model.addAttribute("loginUser", username); return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "/user/userList"; } }
5.@ModelAttribute
这个注解可以跟@SessionAttributes配合在一起用。可以将Model中属性的值通过该注解自动赋给指定变量。示例代码:
package com.test.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Controller @RequestMapping("/user") // 表示loginUser是session属性 @SessionAttributes("loginUser") public class UserController { @RequestMapping(value = "/loginUser", method = RequestMethod.POST) public String loginUser(String username, Model model) { // 把登录用户名的信息保存到session的loginUser中,注意loginUser和上面@SessionAttributes中的参数保持一致 model.addAttribute("loginUser", username); return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "/user/userList"; } @RequestMapping(value = "/loginUser2") public String loginUser2(@ModelAttribute("loginUser") String username) { // 先访问/user/loginUser,在访问/user/loginUser2 System.out.println(username); return "xxx"; } }
6.Controller类中方法返回值的处理
根据返回值找对应的显示页面。路径规则为:prefix前缀+返回值+suffix后缀组成,也可以返回ModelMap、ModelAndView、map、List、Set、Object、无返回值。一般建议返回字符串。
7.ModelAndView模型视图类
ModelAndView中的Model代表模型,View代表视图。即,这个类把要显示的数据存储到了Model属性中,要跳转的视图信息存储到了view属性。示例代码:
package com.test.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; import com.test.model.User; @Controller public class UserController extends MultiActionController { @RequestMapping("/test") public ModelAndView test(String uname) { ModelAndView mv = new ModelAndView(); mv.setViewName("index"); User u = new User(); u.setUsername("张三"); mv.addObject(u); // 属性名为首字母小写的类名,建议手动增加属性名称 mv.addObject("a", "aaaa"); return mv; } }
相关推荐
### SpringMVC详解及注解说明 #### 一、引言 随着软件开发技术的不断发展,基于注解(Annotation)的配置方式越来越受到开发者们的青睐。Spring框架自2.5版本开始,便提供了完全基于注解配置Bean的能力,极大地简化...
这一次深入理解SpringMVC原理,将帮助我们更好地掌握这个强大的Web框架在处理HTTP请求时的工作流程。SpringMVC是Spring框架的重要组成部分,主要用于构建Web应用的Model-View-Controller架构。在本文中,我们将探讨...
本资源包包含了Spring MVC的源码和相关阅读文档,对于深入理解框架的工作原理和进行二次开发非常有帮助。 首先,Spring MVC的核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、ModelAndView以及...
为了更好地理解和实践SpringMVC,下面以一个简单的商品列表查询为例进行说明: 1. **环境准备**:搭建MySQL数据库环境,配置Java开发环境,选用Eclipse IDE,确定SpringMVC版本等。 2. **配置前端控制器**:在`web....
5. **视图解析**:探讨视图解析器如InternalResourceViewResolver的工作原理,以及如何使用JSP、FreeMarker或其他模板引擎来展示结果。 6. **数据绑定与验证**:介绍如何自动将请求参数绑定到模型对象,以及使用@...
关于SpringMVC配置文件的说明,教程中会给出一些常见的配置项及其作用,帮助初学者理解配置文件中各部分的含义。 SpringMVC中获取Spring管理的bean是一个常见需求。本教程将演示如何在控制器中注入并使用由Spring...
在项目中,"jdk1.7的"说明这个项目基于Java 7开发,这意味着代码可能使用了Java 7特有的特性,如try-with-resources语句,但要注意Java 7已相对较旧,对于新项目,建议升级到更高版本的JDK,以利用更现代的语法特性...
它通常与`@ModelAttribute`配合使用,`@ModelAttribute`注解用于将方法的返回值或参数绑定到模型(Model)中,以便在视图解析时可用。 ### `@ModelAttribute` 的作用 `@ModelAttribute` 有以下两个主要用途: 1. **...
300M资源,微服务架构面试专题系列(MySQL,JVM,并发编程,RabbitMQ消息中间件,Spring)。 囊括的知识点非常多 ...springMVC的原理 Spring MVC工作原理 及注解说明 SpringMVC框架介绍 SpringMVC原理
- **类型转换与格式化**:说明如何通过SpringMVC提供的默认类型转换器和自定义类型转换器来处理不同类型的数据。 - **数据验证**:讲解了如何使用SpringMVC的校验框架来对输入数据进行验证。 #### 四、SpringMVC...
10G的Java面试题视频课 囊括了JAVA基础,MySQL,Spring框架,微服务,网络等等Java程序员需要掌握的各个知识领域 ...springMVC的原理 Spring MVC工作原理 及注解说明 SpringMVC框架介绍 SpringMVC原理
Java程序员大厂面试(进大厂必看) 囊括了JAVA基础,MySQL,Spring框架,微服务,网络等等Java程序员需要掌握的各个知识领域 ...springMVC的原理 Spring MVC工作原理 及注解说明 SpringMVC框架介绍 SpringMVC原理
在提供的文件列表中,`.classpath`、`.project`、`.settings`文件是Eclipse项目相关配置,`pom.xml`是Maven项目的配置文件,`src`目录下存放源代码,`LICENSE`和`README.md`通常包含项目许可信息和说明。`target`...
以下是对SpringMVC及其相关JAR包的详细说明: 1. **SpringMVC架构**: - SpringMVC通过DispatcherServlet作为前端控制器,处理HTTP请求。 - HandlerMapping负责映射请求到相应的Controller。 - Controller处理...
开发者可以查看这个文件来了解如何使用Swagger-SpringMVC库,包括类、方法和注解的详细说明。 5. **Sources jar**:`swagger-springmvc-1.0.2-sources.jar`则包含了源代码,这对于开发者调试和学习库的内部实现非常...
`springMvc说明.txt` 文件可能包含了关于这些配置的详细说明,而 `SpringTest` 可能是一个包含测试代码或示例应用的文件。通过阅读这些资源,你可以更深入地理解 Spring MVC 的工作原理,并动手实践。 总之,Spring...
SpringMVC笔记涉及了SpringMVC框架的全面知识,从基础入门到高级应用,内容丰富涵盖了架构原理、组件配置、处理器映射器和适配器的配置、视图解析、源码分析、整合MyBatis、参数绑定与校验、异常处理、RESTful支持...