spring从头开始(五)---spring web开发
来源:互联网 发布:制作单片机最小系统 编辑:程序博客网 时间:2024/06/14 18:29
spring web
MVC
在web应用中,贯穿全局的一个关键角色就是request。
1. 一个request离开浏览器到达服务端。首先到DispatcherServlet。由DispatcherServlet分发给某个spring controller。
2. 一般一个应用会有很多controller。具体应该分发给哪个controller呢?DispatcherServlet会根据handler mapping判断。
3. controller处理具体业务请求,组装返回的响应。
4. 响应一般是以model和view的形式返回。
5. DispatcherServlet调用view resolver对view进行渲染。
构建spring mvc工程
从上面可以看出DispatcherServlet是核心。
那么从配置DispatcherServlet入手。
一般我们在web.xml中配置DispatcherServlet。从spring 3.1之后我们可以使用java config配置。
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] { RootConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebConfig.class }; }}
pom中的依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.2.6.RELEASE</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency>
请注意javaee-api是为了在编译时引入Servlet api。
任何实现AbstractAnnotationConfigDispatcherServletInitializer接口的类,都会被发现并用于配置servlet context。
我们会覆写其中的方法,getServletMappings()做的是url的映射。这里非常简单,全部都映射到“/”。
当DispatcherServlet启动的时候,会创建Spring application context,然后开始加载bean。这个getServletConfigClasses()方法,就是从WebConfig类的配置中加载bean(这里使用java config)。
DispatcherServlet创建的这种application context,主要用于加载controllers, view resolvers, 和 handler mappings等。
还有一种application context,由ContextLoaderListener创建,主要用于加载中间件,数据库操作等基础组件。
AbstractAnnotationConfigDispatcherServletInitializer
可以创建 DispatcherServlet
和ContextLoaderListener
. 从getServletConfigClasses() 返回的被 @Configuration
注解的类是用于 DispatcherServlet的application context. 从getRootConfigClasses() 返回的被 @Configuration
注解的类是用于 ContextLoaderListener的application context.
这种java config是web.xml配置的一种可替代,但是要注意这个只能部署在支持Servlet 3.0以上的server中,
如tomcat7及以上。
import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration@EnableWebMvcpublic class WebConfig {}
这是最简单的一个WebConfig。注意@EnableWebMvc
用于使能spring mvc组件。
这个webConfig是空的,啥也干不了,完善一下代码:
@Configuration@EnableWebMvc@ComponentScan("yunsheng")public class WebConfig extends WebMvcConfigurerAdapter { @Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); resolver.setExposeContextBeansAsAttributes(true); return resolver; } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); }}
- 增加了自动扫描ComponentScan
- 增加了一个viewResolver。并声明为一个bean。作用是,如一个名为home的view,会被解析指定为/WEB_INF/views/home.jsp。
- 继承WebMvcConfigurerAdapter,并重写了configureDefaultServletHandling方法。在其中设置configurer.enable()的作用是告诉DispatcherServlet对静态资源的请求不要处理,直接交给容器默认的servlet。
controller
在spring mvc中controller是指这样的类:他们的方法被@RequestMapping注解,以表明自己处理什么类型的请求。
如:
package yunsheng.web;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import static org.springframework.web.bind.annotation.RequestMethod.*;@Controllerpublic class HomeController { @RequestMapping(value = "/", method = GET) public String home() { return "home"; }}
当有一个对根目录的GET请求到达,这个home方法会执行,返回的就是view的名字。然后DispatcherServlet会调用上面的viewResolver方法,执行解析,得到最终view路径:/WEB_INF/views/home.jsp
随便写一下这个jsp。
这个controller也得requestmapping也可以写成类级别的。
@Controller@RequestMapping("/")public class HomeController { @RequestMapping(method = GET) public String home() { return "home"; }}
- spring从头开始(五)---spring web开发
- spring从头开始(一)
- 从头开始学习JAVA 5--Spring MVC
- spring从头开始(四)---AOP
- spring从头开始(二)---bean织入
- spring从头开始(三)----bean织入进阶
- spring mvc+ELK从头开始搭建日志平台
- Spring Web Flow2开始状态
- 从头开始学java<五>
- Spring Web开发
- JFreeChart spring web开发
- 从头学习Spring MVC
- 从头认识Spring-目录
- 从头认识Spring Cache
- 从头开始,学习Java Web
- Spring学习-14:Spring整合web开发
- 开始spring
- 开始spring
- 第1章 分布式操作系统概念
- iOS Xcode编程常用快捷键 —— HERO博客
- python sqlite3的使用及sql语句
- cmd命令提示符大全(1)
- makefile(二)变量
- spring从头开始(五)---spring web开发
- 【pandas】[1] Series 入门(创建和增删改查)
- JVM内存默认情况
- Java虚拟机1:什么是Java
- 训练3 习题5
- CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
- string的使用(初始化、比较、子串、转换、替换、删除、拼接等)
- 《剑指offer》:[2]O(1)时间删除链表结点
- 使用snmp4j实现get、set、trap