spring in action 第五章基于注解搭建SpringMvc环境
request的生命历程
aaarticlea/png;base64,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" alt="" />
When the request leaves the browser ❶, it carries information about what the user is asking for. At the least, the request will be carrying the requested URL. But it may also carry additional data, such as the information submitted in a form by the user.
The first stop in the request’s travels is at Spring’s DispatcherServlet. Like most Javabased web frameworks, Spring MVC funnels requests through a single front controller servlet. A front controller is a common web application pattern where a single servlet delegates responsibility for a request to other components of an application to perform actual processing. In the case of Spring MVC, DispatcherServlet is the front controller.
The DispatcherServlet’s job is to send the request on to a Spring MVC controller. A controller is a Spring component that processes the request. But a typical application may have several controllers, and DispatcherServlet needs some help deciding which controller to send the request to. So the DispatcherServlet consults one or more handler mappings ❷ to figure out where the request’s next stop will be. The handler mapping pays particular attention to the URL carried by the request when making its decision.
Once an appropriate controller has been chosen, DispatcherServlet sends the request on its merry way to the chosen controller ❸. At the controller, the request drops off its payload (the information submitted by the user) and patiently waits while the controller processes that information. (Actually, a well-designed controller performs little or no processing itself and instead delegates responsibility for the business Wlogic to one or more service objects.)
The logic performed by a controller often results in some information that needs to be carried back to the user and displayed in the browser. This information is referred to as the model. But sending raw information back to the user isn’t sufficient—it needs to be formatted in a user-friendly format, typically HTML. For that, the information needs to be given to a view, typically a JavaServer Page (JSP).
One of the last things a controller does is package up the model data and identify the name of a view that should render the output. It then sends the request, along with the model and view name, back to the DispatcherServlet ❹.
So that the controller doesn’t get coupled to a particular view, the view name passed back to DispatcherServlet doesn’t directly identify a specific JSP. It doesn’t even necessarily suggest that the view is a JSP. Instead, it only carries a logical name that will be used to look up the actual view that will produce the result. The DispatcherServlet consults a view resolver ❺ to map the logical view name to a specific view implementation, which may or may not be a JSP.
Now that DispatcherServlet knows which view will render the result, the request’s job is almost over. Its final stop is at the view implementation ❻, typically a JSP, where it delivers the model data. The request’s job is finally done. The view will use the model data to render output that will be carried back to the client by the (notso-hardworking) response object ❼.
搭建Spring MVC
配置DISPATCHERSERVLET
getServletMappings() :identifies one or more paths that DispatcherServlet will be mapped to. In this case, it’s mapped to /, indicating that it will be the application’s default servlet. It will handle all requests coming into the application。
getRootConfigClasses() :will be used to configure the application context created by ContextLoaderListener.
getRootConfigClasses() :will define beans for DispatcherServlet’s application context 。
package spittr.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; import spittr.web.WebConfig; public class SpitterWebInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer{ @Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class };
} @Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class };
} @Override
protected String[] getServletMappings() {
return new String[] { "/" }; //Map DispatcherServlet to /
} }
附上AbstractAnnotationConfigDispatcherServletInitializer源码:
package org.springframework.web.servlet.support; import org.springframework.util.ObjectUtils;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; /**
* Base class for {@link org.springframework.web.WebApplicationInitializer}
* implementations that register a
* {@link org.springframework.web.servlet.DispatcherServlet DispatcherServlet}
* configured with annotated classes, e.g. Spring's
* {@link org.springframework.context.annotation.Configuration @Configuration} classes.
*
* <p>Concrete implementations are required to implement {@link #getRootConfigClasses()}
* and {@link #getServletConfigClasses()} as well as {@link #getServletMappings()}.
* Further template and customization methods are provided by
* {@link AbstractDispatcherServletInitializer}.
*
* <p>This is the preferred approach for applications that use Java-based
* Spring configuration.
*
* @author Arjen Poutsma
* @author Chris Beams
* @since 3.2
*/
public abstract class AbstractAnnotationConfigDispatcherServletInitializer
extends AbstractDispatcherServletInitializer { /**
* {@inheritDoc}
* <p>This implementation creates an {@link AnnotationConfigWebApplicationContext},
* providing it the annotated classes returned by {@link #getRootConfigClasses()}.
* Returns {@code null} if {@link #getRootConfigClasses()} returns {@code null}.
*/
@Override
protected WebApplicationContext createRootApplicationContext() {
Class<?>[] configClasses = getRootConfigClasses();
if (!ObjectUtils.isEmpty(configClasses)) {
AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext();
rootAppContext.register(configClasses);
return rootAppContext;
}
else {
return null;
}
} /**
* {@inheritDoc}
* <p>This implementation creates an {@link AnnotationConfigWebApplicationContext},
* providing it the annotated classes returned by {@link #getServletConfigClasses()}.
*/
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext servletAppContext = new AnnotationConfigWebApplicationContext();
Class<?>[] configClasses = getServletConfigClasses();
if (!ObjectUtils.isEmpty(configClasses)) {
servletAppContext.register(configClasses);
}
return servletAppContext;
} /**
* Specify {@link org.springframework.context.annotation.Configuration @Configuration}
* and/or {@link org.springframework.stereotype.Component @Component} classes to be
* provided to the {@linkplain #createRootApplicationContext() root application context}.
* @return the configuration classes for the root application context, or {@code null}
* if creation and registration of a root context is not desired
*/
protected abstract Class<?>[] getRootConfigClasses(); /**
* Specify {@link org.springframework.context.annotation.Configuration @Configuration}
* and/or {@link org.springframework.stereotype.Component @Component} classes to be
* provided to the {@linkplain #createServletApplicationContext() dispatcher servlet
* application context}.
* @return the configuration classes for the dispatcher servlet application context or
* {@code null} if all configuration is specified through root config classes.
*/
protected abstract Class<?>[] getServletConfigClasses(); }
- ENABLING SPRING MVC
package spittr.web; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration
@EnableWebMvc
@ComponentScan("spittr.web")
public class WebConfig extends WebMvcConfigurerAdapter { @Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
} @Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
注解 @EnableWebMvc 使得Spring MVC生效
注解@ComponentScan("spittr.web") Enable component-scanning
方法 ViewResolver viewResolver():配置了一个viewResolver
方法configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer):Configure static content handling 。By calling enable() on the given DefaultServletHandlerConfigurer, you’re asking DispatcherServlet to forward requests for static resources to the servlet container’s default servlet and not to try to handle them itself。
rootConfig:
@Configuration
@ComponentScan(basePackages={"spittr"},
excludeFilters={
@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)
})
public class RootConfig {
}
- Writing a simple controller
@RequestMapping("/home","/homePage"):能够映射到对"/home","/homePage"的get请求
package spittr.web; import static org.springframework.web.bind.annotation.RequestMethod.GET; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
@RequestMapping("/home","/homePage")
public class HomeController { @RequestMapping(method = GET)
public String home() {
return "home";
} }
views/home.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Spitter</title>
<link rel="stylesheet"
type="text/css"
href="<c:url value="/resources/style.css" />" >
</head>
<body>
<h1>Welcome to Spitter</h1> <a href="<c:url value="/spittles" />">Spittles</a> |
<a href="<c:url value="/spitter/register" />">Register</a>
</body>
</html>
- 运行结果
aaarticlea/png;base64,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" alt="" />
实验过程中遇到的问题:
注解配置spring mvc的前提之一就是servlet 3 以及使用高版本的tomcat(tomcat 7或以上)以及JDK的版本问题。
实验所用的tomcat版本为tomcat8,编译版本jdk为1.8,servlet版本为3.0.1版本。
spring in action 第五章基于注解搭建SpringMvc环境的更多相关文章
- Spring声明式事务管理(基于注解方式实现)
----------------------siwuxie095 Spring 声明式事务管理(基于注解方式实现) 以转 ...
- SpringMVC札集(03)——基于注解的SpringMVC入门完整详细示例
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- 基于注解的springmvc开发
原理简析 1. 背景知识:org.springframework.web.ServletContainerInitializer接口 在基于注解的servlet开发中,ServletContainer ...
- spring boot / cloud (十八) 使用docker快速搭建本地环境
spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...
- Spring基于注解及SpringMVC
1.使用注解 (1)组件扫描 指定一个包路径,Spring会自动扫描该包 及其子包所有组件类,当发现组件类定义前有 特定的注解标记时,就将该组件纳入到Spring 容器.等价于原有XML配置中的< ...
- spring和ehcache整合,实现基于注解的缓存实现
要实现基于注解的缓存实现,要求Spring的版本在3.1或以上版本. 首先需要在spring的配置文件中添加对缓存注解的实现: <?xml version="1.0" enc ...
- 基于Spring注解搭建SpringMVC项目
在2018寒冬,我下岗了,因为我的左脚先迈进了公司的大门.这不是重点,重点是我扑到了老板小姨子的怀里. 网上好多教程都是基于XML的SpringMVC,想找一篇注解的,但是写的很模糊,我刚好学到这里, ...
- 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式
8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...
- Spring事务的介绍,以及基于注解@Transactional的声明式事务
前言 事务是一个非常重要的知识点,前面的文章已经有介绍了关于SpringAOP代理的实现过程:事务管理也是AOP的一个重要的功能. 事务的基本介绍 数据库事务特性: 原子性 一致性 隔离性 持久性 事 ...
随机推荐
- IOS--UIAlertView造成屏幕闪烁
在异步操作中,如果直接Show一个UIAlertView可能会造成屏幕闪烁(目前在iPhone5上发现),解决办法如下: UIAlertView *alert = [[UIAlertView allo ...
- [转载]Js小技巧||给input type=“password”的输入框赋默认值
http://www.cnblogs.com/Raywang80s/archive/2012/12/06/2804459.html [转载]Js小技巧||给input type="passw ...
- Python爬虫个人梳理(代码有空写)
这里多是摘抄的,只是用于个人理解. 1.urlopen().read()是爬取网页的内容,出来可能是一堆的源代码.和我们右击网页查看是一样的. 2.当用到http请求的时候,我们可以使用Request ...
- Spring bean 实现初始化、销毁方法的方式及顺序
Spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作,常用方法有三种: 使用注解,在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是 ...
- C3属性的轮播图(持续更新)
天气好冷,都不想写代码.就先写个没有焦点的轮播图,过两天在补全. 用的是CSS3的属性 过渡transition 和 转换 transfrom:translateX() 只做了轮播和 鼠标进入停止轮播 ...
- eclipse- Web-app verson=2.5 调整将Dynamic Web Module3.0降为2.5
如果提示cannot change version of project facet Dynamic Web Module to 2.5 1.把Dynamic Web Module复选框,勾选去掉,点 ...
- c#.net全站防止SQL注入类的代码
using System;using System.Collections.Generic;using System.Linq;using System.Web; /// <summary> ...
- iOS 9/10强制使用https访问网络,使用了第三方SDK的应用需要配置的信息
2017年01月01日起苹果将全面禁止使用http来访问网络. 网上扒了一些资源,解决方法还是有的,但是都不确定是否可以通过审核,毕竟实践才是检验真理的唯一标准. 后续如果上线成功,再来分享. 如果应 ...
- JQUERY 保存成功后又下角动态提示
$.messager.show({ // show error message title : '操作结果', msg : '操作成功!' });
- export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
如题,临时修改程序运行时动态库的搜索路径,平时经常会用到,记录之!