Servlet3.0整合Springmvc(注解版)
在创建maven的web工程时候,如果报错缺少web.xml
则在pom添加如下配置 :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
web容器在启动的时候 会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainerInitializer
加载这个文件指定的启动类
Spring的应用一启动会加载感兴趣的WebApplicationInitializer接口下的所有组件
并且为WebApplicationInitializer 组件创建对象(组件不是接口,不是抽象类)
总结:
以注解方式来启动Spring MVC 继承 AbstractAnnotationConfigDispatcherServletInitializer
实现抽象方法指定 DispatchServlet的配置信息
将Spring mvc 通过注解形式整合
配置:
//web容器启动的时候就会创建对象 调用方法 初始化容器 以及前端控制器
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { //获取跟容器的配置类 (Spring配置文件) 父容器
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class<?>[] {RootConfig.class};
}
// 获取web容器的配置类 (Spring mvc配置文件) 创建子容器
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] {AppConfig.class};
}
//获取DispatcherServlet的映射信息
@Override
protected String[] getServletMappings() {
// /* 拦截所有亲求; 连*.jsp页面都拦截; jsp页面是Tomcat的jsp引擎解析的
return new String[] {"/"}; //拦截所有请求 包括静态资源 } }
AppConfig:
//Spring mvc 只扫描controller 子容器
@ComponentScan(value="com.toov5",
includeFilters= { @Filter(type=FilterType.ANNOTATION,classes= {Controller.class})},
useDefaultFilters = false) //禁用默认的过虑规则
public class AppConfig { }
RootConfig:
//Spring的容器不扫描controller 父容器
@ComponentScan(value="com.toov5", excludeFilters= {@Filter(type=FilterType.ANNOTATION,classes= {Controller.class})})
public class RootConfig { }
Controller:
@Controller
public class HelloController { @Autowired
HelloService HelloService; @ResponseBody
@RequestMapping("/hello")
public String hello() {
String sayHello = HelloService.sayHello("toov5");
return sayHello;
}
}
Service:
@Service
public class HelloService { public String sayHello(String name) {
return "Hello:"+name;
}
}
访问:

在xml配置的spring mvc开发中
<mvc: default-servlet-handler/> 将springmvc处理不了的请求交给tomcat 静态资源就可以访问
<mvc:annotation-driven /> springmvc高级功能开启
<mvc:interceptors> </mvc:interceptors>
<mvc:view-controller path="" />
下面我们定制 Spring mvc
1 @EnableWebMvc 开始Spring mvc 定制配置功能
<mvc:annotation-driven />
2 配置组件(视图解析器 视图映射 静态资源映射 拦截器)
//Spring mvc 只扫描controller 子容器
@SuppressWarnings("deprecation")
@ComponentScan(value="com.toov5",
includeFilters= { @Filter(type=FilterType.ANNOTATION,classes= {Controller.class})},
useDefaultFilters = false) //禁用默认的过虑规则
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter { //定制视图解析器
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/",".jsp"); }
//静态资源访问等等都可配置 }
Controller
@Controller
public class HelloController { @Autowired
HelloService HelloService; @ResponseBody
@RequestMapping("/hello")
public String hello() {
String sayHello = HelloService.sayHello("toov5");
return sayHello;
}
@RequestMapping("/su")
public String success() { //配置了解析器
return "success";
}
}
访问结果:

放入图片,加入jsp:

Jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<img alt="" src="aa.jpg">
</body>
</html>
此时:

没有找到 这个映射 这个请求是被spring mvc处理了 实际上这个是个静态资源 交给tomcat。
下面进行自定义配置 配置静态资源访问
//Spring mvc 只扫描controller 子容器
@SuppressWarnings("deprecation")
@ComponentScan(value="com.toov5",
includeFilters= { @Filter(type=FilterType.ANNOTATION,classes= {Controller.class})},
useDefaultFilters = false) //禁用默认的过虑规则
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter { //定制视图解析器
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/",".jsp"); }
//静态资源访问等等都可配置
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable(); //xml:<mvc: default-servlet-handler/> 将springmvc处理不了的请求交给tomcat 静态资源就可以访问
}
}
成功!

下面配置一个复杂一点的拦截器:
拦截器:
//需要实现spring mvc 的接口 之前: <mvc:interceptors> </mvc:interceptors>
public class MyFirstInterceptor implements HandlerInterceptor{
//目标方法运行之前执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("目标方法之前....执行了preHandle");
return true;
} public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("目标方之后....执行了postHandle"); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("响应到页面之后....执行了afterCompletion");
} }
配置:
//Spring mvc 只扫描controller 子容器
@SuppressWarnings("deprecation")
@ComponentScan(value="com.toov5",
includeFilters= { @Filter(type=FilterType.ANNOTATION,classes= {Controller.class})},
useDefaultFilters = false) //禁用默认的过虑规则
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter { //定制视图解析器
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/",".jsp"); }
//静态资源访问等等都可配置
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable(); //xml:<mvc: default-servlet-handler/> 将springmvc处理不了的请求交给tomcat 静态资源就可以访问
} @Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyFirstInterceptor()).addPathPatterns("/*"); //添加一个拦截器 也可以从容器中获取
} }
运行:

Servlet3.0整合Springmvc(注解版)的更多相关文章
- Spring注解驱动开发(七)-----servlet3.0、springmvc
ServletContainerInitializer Shared libraries(共享库) / runtimes pluggability(运行时插件能力) 1.Servlet容器启动会扫描, ...
- Servlet3.0与springmvc那些事
官方文档:https://docs.spring.io/spring/docs/5.0.2.RELEASE/spring-framework-reference/web.html#mvc-servle ...
- SpringBoot数据访问之整合mybatis注解版
SpringBoot数据访问之整合mybatis注解版 mybatis注解版: 贴心链接:Github 在网页下方,找到快速开始文档 上述链接方便读者查找. 通过快速开始文档,搭建环境: 创建数据库: ...
- springMVC(注解版笔记)
springMVC(注解版) 较之于非注解版本,发生一下变化: 1.配置文件需要配置的标签有: <!-- 包的扫描,此包下面的所有包都启用注解 --> <context:compon ...
- SpringBoot整合Mybatis注解版---update出现org.apache.ibatis.binding.BindingException: Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1, param2]
SpringBoot整合Mybatis注解版---update时出现的问题 问题描述: 1.sql建表语句 DROP TABLE IF EXISTS `department`; CREATE TABL ...
- SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)
SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...
- springMVC 注解版
http://blog.csdn.net/liuxiit/article/details/5756115 http://blog.csdn.net/hantiannan/article/categor ...
- Spring boot Mybatis 整合(注解版)
之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...
- 零基础学习java------40---------Maven(maven的概念,安装,maven在eclipse中使用),springboot(spring整合springmvc(注解),spring整合mybatis(常见的配置文件)),前端页面(bootstrap软件)
一 maven 1. Maven的相关概念 1.1 项目开发中遇到的问题 (1)都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? (2)为什么在我的机器上可以正常打包,而配置管理 ...
随机推荐
- Redis for Python开发手册
redis基本命令 String Set set(name, value, ex=None, px=None, nx=False, xx=False) 在Redis中设置值,默认,不存在则创建,存在则 ...
- 感知器python
感知器学习的目标是求得一个能够将训练集正实例点和负实例点·完全正确分开的分离超平面.即找到这超平面的参数w,b. 超平面定义 w*x+b=0 其中w是参数,x是数据.公式很好理解以二维平面为例,w有两 ...
- Zabbix server(离线版)安装手册
由于zabbix server需要依赖MySQL及PHP的相关依赖,因此需要先安装好MySQL及PHP的相关依赖后方可安装zabbixserver. 安装MySQL 目录mysql下的rpm 1.新建 ...
- TypeScript教程
汇智课堂 地址 http://www.hubwiz.com/course/55b724ab3ad79a1b05dcc26c/ TypeScript是一种由微软开发的自由和开源的编程语言.它是Java ...
- PAT 1049 Counting Ones [难]
1049 Counting Ones (30 分) The task is simple: given any positive integer N, you are supposed to coun ...
- MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)
悲观锁: 顾名思义,很悲观,就是每次拿数据的时候都认为别的线程会修改数据,所以在每次拿的时候都会给数据上锁.上锁之后,当别的线程想要拿数据时,就会阻塞,直到给数据上锁的线程将事务提交或者回滚.传统的关 ...
- Ubuntu下安装keras
0 系统版本Ubuntu16.04 1 系统更新 sudo apt update sudo apt upgrade 2 安装python基础开发包 sudo apt install -y python ...
- spring boot 使用属性加载顺序
1.命令行中传入的参数 2.SPRING_APPLICATION_JSON中的属性.SPRING_APPLICATION_JSON是以JSON格式配置再系统环境变量中的内容 3.java:comp/e ...
- Hbase Region Server整体架构
Region Server的整体架构 本文主要介绍Region的整体架构,后续再慢慢介绍region的各部分具体实现和源码 RegionServer逻辑架构图 RegionServer职责 1. ...
- Ubuntu安装samba实现文件夹共享
因工作需要,准备在Ubuntu服务器上共享文件夹,从Windows和Mac上都可以访问共享文件. 搜了一下,决定通过samba服务实现.安装过程如下: [step1]安装samba服务 sudo ap ...