SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请求给相应的Handler,Handler处理以后再返回相应的视图(View)和模型(Model),返回的视图和模型都可以不指定,即可以只返回Model或只返回View或都不返回。
DispatcherServlet是继承自HttpServlet的,既然SpringMVC是基于DispatcherServlet的,那么我们先来配置一下DispatcherServlet,好让它能够管理我们希望它管理的内容。HttpServlet是在web.xml文件中声明的。
- <servlet>
- <servlet-name>blog</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>blog</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
上面声明了一个名为blog的DispatcherServlet,该Servlet将处理所有以“.do”结尾的请求。在初始化DispatcherServlet的时候,SpringMVC默认会到/WEB-INF目录下寻找一个叫[servlet-name]-servlet.xml的配置文件,来初始化里面的bean对象,该文件中对应的bean对象会覆盖spring配置文件中声明的同名的bean对象。如上面的就会在/WEB-INF目录下寻找一个叫blog-servlet.xml的文件;当然也可以在Servlet中声明配置文件的位置。
- <servlet>
- <servlet-name>blog</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/blog-servlet.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>blog</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
DispatcherServlet会利用一些特殊的bean来处理Request请求和生成相应的视图返回。
关于视图的返回,Controller只负责传回来一个值,然后到底返回的是什么视图,是由视图解析器控制的,在jsp中常用的视图解析器是InternalResourceViewResovler,它会要求一个前缀和一个后缀
- <bean
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/" />
- <property name="suffix" value=".jsp" />
- </bean>
在上述视图解析器中,如果Controller返回的是blog/index,那么通过视图解析器解析之后的视图就是/WEB-INF/blog/index.jsp。
要使用注解的SpringMVC需要在SpringMVC的配置文件中进行声明,具体方式为先引入mvc命名空间,然后利用<mvc:annotation-driven />进行声明。
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
- <SPAN style="BACKGROUND-COLOR: #00ff00"><SPAN style="COLOR: #ff0000">xmlns:mvc="http://www.springframework.org/schema/mvc"</SPAN></SPAN>
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- <SPAN style="COLOR: #ff0000; BACKGROUND-COLOR: #00ff00"> http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"</SPAN>>
- <mvc:annotation-driven />
- </beans>
主要是说说Controller.
一个类使用了@Controller进行标记的都是Controller
- @Controller
- public class BlogController {
- }
有了Controller之后,那么到底是怎样请求一个Controller具体的方法的呢,那是通过@RequestMapping来标记的,@RequestMapping可以标记在类上面,也可以标记在方法上,当方法上和类上都标记了@RequestMapping的时候,那么对应的方法对应的Url就是类上的加方法上的,如下面的index方法,其对应的URL应为类上的/blog加上index方法上的/index,所以应为/blog/index,所以当请求/blog/index.do的时候就会访问BlogController的index方法。
- @Controller
- @RequestMapping("/blog")
- public class BlogController {
- @RequestMapping("/index")
- public String index(Map<String, Object> map) {
- return "blog/index";
- }
- }
在上面的代码中,如果index方法上没有RequestMapping注解,而只有BlogController类上有,且该类只有一个方法的时候,直接请求类上的URL就会调用里面的方法,即直接请求/blog.do的时候就会调用index方法。
在RequestMapping中还可以指定一个属性method,其主要对应的值有RequestMethod.GET和RequestMethod.POST,利用该属性可以严格的控制某一方法只能被标记的请求路径对应的请求方法才能访问,如指定method的值为GET,则表示只有通过GET方式才能访问该方法,默认是都可以访问。
在SpringMVC中常用的注解还有@PathVariable,@RequestParam,@PathVariable标记在方法的参数上,利用它标记的参数可以利用请求路径传值,看下面一个例子
- @RequestMapping(value="/comment/{blogId}", method=RequestMethod.POST)
- public void comment(Comment comment,@PathVariable int blogId, HttpSession session, HttpServletResponse response) throws IOException {
- }
在该例子中,blogId是被@PathVariable标记为请求路径变量的,如果请求的是/blog/comment/1.do的时候就表示blogId的值为1. 同样@RequestParam也是用来给参数传值的,但是它是从头request的参数里面取值,相当于request.getParameter("参数名")方法。
在Controller的方法中,如果需要WEB元素HttpServletRequest,HttpServletResponse和HttpSession,只需要在给方法一个对应的参数,那么在访问的时候SpringMVC就会自动给其传值,但是需要注意的是在传入Session的时候如果是第一次访问系统的时候就调用session会报错,因为这个时候session还没有生成。
接下来讨论一下方法的返回值,主要有一下情况:
返回一个ModelAndView,其中Model是一个Map,里面存放的是一对对的键值对,其可以直接在页面上使用,View是一个字符串,表示的是某一个View的名称
返回一个View,也就是一个字符串,这个时候如果需要给页面传值,可以给方法一个Map参数,该Map就相当于一个Model,往该Model里面存入键值对就可以在页面上进行访问了
返回一个Model也就是一个Map,这个时候将解析默认的生成的view name。
什么也不返回,这个时候可以利用HttpServletResponse进行返回,也可以直接使用printStream进行返回
下面是一个简单的实例
- @RequestMapping("/{owner}/index")
- public String userIndex(Map<String, Object> map,@PathVariable String owner, HttpServletRequest request) throws ParserException {
- List<DefCategory> categories = categoryService.find(owner);
- int offset = Util.getOffset(request);
- Pager<Blog> pager = blogService.find(owner, 0, offset, maxResults);
- int totalRecords = pager.getTotalRecords();
- List<Blog> blogs = pager.getData();
- Util.shortBlog(blogs);
- List<Message> messages = messageService.find(owner, 0, 5).getData();
- Util.shortMessage(messages, 20);
- map.put("messages", messages);
- map.put("totalRecords", totalRecords);
- List<BlogStore> stores = storeService.find(owner, 0, 5).getData();
- map.put("maxResults", maxResults);
- map.put("blogs", blogs);
- map.put("totalRecords", totalRecords);
- map.put("owner", userService.find(owner));
- map.put("defCategories", categories);
- map.put("stores", stores);
- return "blog/userIndex";
- }
相关推荐
以下是一个简单的SpringMVC Controller示例,用于返回Tree的数据: ```java @Controller @RequestMapping("/tree") public class TreeController { @RequestMapping(value = "/getData", method = RequestMethod....
在纯注解配置中,`web.xml` 可以非常简单,甚至可以省略。 以上是 Spring MVC 注解配置的一些核心概念,通过这种方式,我们可以实现灵活、简洁的 Web 应用开发。在解压后的 "springmvc-demo02-注解方式" 示例项目中...
Model对象可以是简单的Java类,也可以是Spring的ModelMap或者ModelAndView。在Controller处理请求后,将Model对象添加到ModelAndView中,然后返回给视图进行渲染。 总之,这个项目展示了如何集成Spring MVC、Spring...
- **Spring Boot**:是基于 Spring 框架的快速开发工具,它简化了 Spring MVC 的配置,通过自动配置和“起步依赖”使得创建 Web 应用更加简单。 7. **实战演练:** - 创建一个新的 Spring MVC 项目,配置 web.xml...
它允许开发者通过简单的注解,如`@Api`,`@ApiOperation`,`@ApiParam`等,将API文档与实际的Spring MVC控制器方法关联起来。 3. **版本1.0.2**:这个版本可能包含了对之前版本的错误修复,性能提升,以及新功能的...
SpringMVC 是 Spring 框架的一个模块,专为构建基于 Java 的 Web 应用程序提供模型-视图-控制器(MVC)架构。它简化了开发过程,提供了强大的依赖注入、数据验证、国际化等功能。本教程将通过 "springmvc-helloworld...
"springMVC-3.0-file-upload.rar" 包含了一个示例,展示了如何在Spring MVC应用中集成文件上传功能,这个例子的描述表明它是基于注解驱动的,这意味着我们将使用如`@Controller`、`@RequestMapping`等注解来定义控制...
3. 注册拦截器:将自定义的拦截器类添加到Spring容器,可以通过`@Component`注解实现,然后使用`@Autowired`和`@Order`注解注入到`HandlerMapping`的bean中,`@Order`用于设置拦截器的执行顺序。 4. 实现业务逻辑:...
它是一个轻量级的、基于注解的模型-视图-控制器(MVC)架构,为开发Java Web应用提供了强大的支持。"SpringMVC-Helloworld"示例是入门SpringMVC的常见起点,它帮助开发者理解如何配置和运行一个基本的Spring MVC应用...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录,使得开发者可以专注于编写业务逻辑,而不是繁琐的数据库操作。 【Junit】...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本示例 "springmvc-demo.zip" 中,我们可以看到一个基本的 ...
【描述】"spring-springmvc-mybatis" 描述的是基于Spring框架的两个重要模块——Spring MVC和MyBatis的集成应用。Spring MVC是Spring框架中的Web MVC框架,负责处理HTTP请求和响应,提供模型-视图-控制器(MVC)架构...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis-3.4.5版本在此基础上可能修复了一些已知问题,增强了性能和稳定性...
本示例"java-springmvc-swagger"提供了一个基于Spring MVC框架集成Swagger的简单Demo,旨在帮助开发者快速理解和掌握Swagger的基本配置和使用。 首先,让我们了解一下Swagger的核心功能。Swagger是一个用于设计、...
如果你使用的是基于注解的配置,可以在`WebMvcConfigurer`的实现类中进行配置: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors...
SpringMVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于处理 HTTP 请求和响应。下面将详细讲解 SpringMVC 的核心概念、配置以及控制器的使用。 首先,SpringMVC 的核心组件包括 ...
现在我们已经准备好处理JSON响应,接下来创建一个简单的Controller来返回JSON数据。例如,我们创建一个`UserController`,并定义一个`getUser`方法: ```java import org.springframework.http.ResponseEntity; ...
在"springmvc--1.zip"这个视频教程中,第一部分可能会涵盖 Spring MVC 的基础概念、配置、Controller 的编写、视图解析、以及简单的请求处理。后续部分可能涉及更高级的主题,如拦截器、数据绑定、事务管理和 ...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本入门案例 "springmvc-demo01-start.zip" 中,我们将探索如何...
【标题】"springmvc-maven-webapp-helloworld源码"是一个基于Spring MVC、Maven、MyBatis等技术构建的简单 HelloWorld 示例应用。这个项目旨在为初学者提供一个基础的Web应用程序开发框架,帮助理解这些关键技术如何...