`

springmvc原理及注解说明

 
阅读更多

原理:

用户发送请求(user.do)给服务器,服务器收到请求后,发现DispatchServlet可以处理,于是调用DispatchServletDispatchServlet内部通过HandleMapping检查这个请求有没有对应的Controller,如果有,则调用ControllerController开始执行,执行完后,如果返回字符串,则ViewResolver将字符串转化成相应的视图对象,如果返回ModelAndView对象,该对象本身就包含了视图对象信息,DispatchServlet将视图对象中的数据输出给服务器,服务器将数据输出给客户端。

注解:

1.@Controller

struts1一样,springController也是Singleton的。这就意味着会被多个请求线程共享。因此,我们将控制器设计成无状态类。在spring 3.0中,通过@controller标注即可将class定义为一个controller类。为使spring能找到定义为controllerbean,需要在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后缀组成,也可以返回ModelMapModelAndViewmapListSetObject、无返回值。一般建议返回字符串。

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详解以及注解说明

    ### SpringMVC详解及注解说明 #### 一、引言 随着软件开发技术的不断发展,基于注解(Annotation)的配置方式越来越受到开发者们的青睐。Spring框架自2.5版本开始,便提供了完全基于注解配置Bean的能力,极大地简化...

    这一次搞懂SpringMVC原理说明

    这一次深入理解SpringMVC原理,将帮助我们更好地掌握这个强大的Web框架在处理HTTP请求时的工作流程。SpringMVC是Spring框架的重要组成部分,主要用于构建Web应用的Model-View-Controller架构。在本文中,我们将探讨...

    springmvc源码及帮助文档

    本资源包包含了Spring MVC的源码和相关阅读文档,对于深入理解框架的工作原理和进行二次开发非常有帮助。 首先,Spring MVC的核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、ModelAndView以及...

    springmvc学习第一天

    为了更好地理解和实践SpringMVC,下面以一个简单的商品列表查询为例进行说明: 1. **环境准备**:搭建MySQL数据库环境,配置Java开发环境,选用Eclipse IDE,确定SpringMVC版本等。 2. **配置前端控制器**:在`web....

    传智播客 springmvc 视频 源代码 文档

    5. **视图解析**:探讨视图解析器如InternalResourceViewResolver的工作原理,以及如何使用JSP、FreeMarker或其他模板引擎来展示结果。 6. **数据绑定与验证**:介绍如何自动将请求参数绑定到模型对象,以及使用@...

    springMVC 教程

    关于SpringMVC配置文件的说明,教程中会给出一些常见的配置项及其作用,帮助初学者理解配置文件中各部分的含义。 SpringMVC中获取Spring管理的bean是一个常见需求。本教程将演示如何在控制器中注入并使用由Spring...

    springMVC整合MyBatis+sql文件

    在项目中,"jdk1.7的"说明这个项目基于Java 7开发,这意味着代码可能使用了Java 7特有的特性,如try-with-resources语句,但要注意Java 7已相对较旧,对于新项目,建议升级到更高版本的JDK,以利用更现代的语法特性...

    SpringMVC SessionAttribute 使用说明.docx

    它通常与`@ModelAttribute`配合使用,`@ModelAttribute`注解用于将方法的返回值或参数绑定到模型(Model)中,以便在视图解析时可用。 ### `@ModelAttribute` 的作用 `@ModelAttribute` 有以下两个主要用途: 1. **...

    微服务架构面试专题系列(MySQL,JVM,并发编程,RabbitMQ消息中间件,Spring)

    300M资源,微服务架构面试专题系列(MySQL,JVM,并发编程,RabbitMQ消息中间件,Spring)。 囊括的知识点非常多 ...springMVC的原理 Spring MVC工作原理 及注解说明 SpringMVC框架介绍 SpringMVC原理

    跟我学SpringMVC

    - **类型转换与格式化**:说明如何通过SpringMVC提供的默认类型转换器和自定义类型转换器来处理不同类型的数据。 - **数据验证**:讲解了如何使用SpringMVC的校验框架来对输入数据进行验证。 #### 四、SpringMVC...

    10G的Java面试题视频课

    10G的Java面试题视频课 囊括了JAVA基础,MySQL,Spring框架,微服务,网络等等Java程序员需要掌握的各个知识领域 ...springMVC的原理 Spring MVC工作原理 及注解说明 SpringMVC框架介绍 SpringMVC原理

    Java程序员大厂面试(进大厂必看)

    Java程序员大厂面试(进大厂必看) 囊括了JAVA基础,MySQL,Spring框架,微服务,网络等等Java程序员需要掌握的各个知识领域 ...springMVC的原理 Spring MVC工作原理 及注解说明 SpringMVC框架介绍 SpringMVC原理

    搭建spring、springMVC、myBaits框架

    在提供的文件列表中,`.classpath`、`.project`、`.settings`文件是Eclipse项目相关配置,`pom.xml`是Maven项目的配置文件,`src`目录下存放源代码,`LICENSE`和`README.md`通常包含项目许可信息和说明。`target`...

    SpringMVC JAR包

    以下是对SpringMVC及其相关JAR包的详细说明: 1. **SpringMVC架构**: - SpringMVC通过DispatcherServlet作为前端控制器,处理HTTP请求。 - HandlerMapping负责映射请求到相应的Controller。 - Controller处理...

    swagger-springmvc-1.0.2

    开发者可以查看这个文件来了解如何使用Swagger-SpringMVC库,包括类、方法和注解的详细说明。 5. **Sources jar**:`swagger-springmvc-1.0.2-sources.jar`则包含了源代码,这对于开发者调试和学习库的内部实现非常...

    SpringMvc配置及简单例子

    `springMvc说明.txt` 文件可能包含了关于这些配置的详细说明,而 `SpringTest` 可能是一个包含测试代码或示例应用的文件。通过阅读这些资源,你可以更深入地理解 Spring MVC 的工作原理,并动手实践。 总之,Spring...

    springMVC笔记.pdf

    SpringMVC笔记涉及了SpringMVC框架的全面知识,从基础入门到高级应用,内容丰富涵盖了架构原理、组件配置、处理器映射器和适配器的配置、视图解析、源码分析、整合MyBatis、参数绑定与校验、异常处理、RESTful支持...

Global site tag (gtag.js) - Google Analytics