在创建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(注解版)的更多相关文章

  1. Spring注解驱动开发(七)-----servlet3.0、springmvc

    ServletContainerInitializer Shared libraries(共享库) / runtimes pluggability(运行时插件能力) 1.Servlet容器启动会扫描, ...

  2. Servlet3.0与springmvc那些事

    官方文档:https://docs.spring.io/spring/docs/5.0.2.RELEASE/spring-framework-reference/web.html#mvc-servle ...

  3. SpringBoot数据访问之整合mybatis注解版

    SpringBoot数据访问之整合mybatis注解版 mybatis注解版: 贴心链接:Github 在网页下方,找到快速开始文档 上述链接方便读者查找. 通过快速开始文档,搭建环境: 创建数据库: ...

  4. springMVC(注解版笔记)

    springMVC(注解版) 较之于非注解版本,发生一下变化: 1.配置文件需要配置的标签有: <!-- 包的扫描,此包下面的所有包都启用注解 --> <context:compon ...

  5. 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 ...

  6. SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)

    SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...

  7. springMVC 注解版

    http://blog.csdn.net/liuxiit/article/details/5756115 http://blog.csdn.net/hantiannan/article/categor ...

  8. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  9. 零基础学习java------40---------Maven(maven的概念,安装,maven在eclipse中使用),springboot(spring整合springmvc(注解),spring整合mybatis(常见的配置文件)),前端页面(bootstrap软件)

    一 maven 1. Maven的相关概念 1.1 项目开发中遇到的问题 (1)都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? (2)为什么在我的机器上可以正常打包,而配置管理 ...

随机推荐

  1. Python 之RabbitMQ使用

    1. IO 多路复用 # select 模拟socket server # server 端 import select import socket import sys import queue s ...

  2. node.js + mongodb 做项目的详解(二)

    这次内容是结合bootstrap把登陆注册做好,还有就是express的中间件等问题. 看这篇博客之前建议先看我上篇写的那篇博客http://www.cnblogs.com/hubwiz/p/4118 ...

  3. MapReduce的核心编程思想

    1.MapReduce的核心编程思想 2.yarn集群工作机制 3.maptask并行度与决定机制 4.maptask工作机制 5.MapReduce整体流程 6.shuffle机制 7.yarn架构

  4. 《从零開始搭建游戏server》项目公布到Linux环境

    前言: 之前我们提及了怎样使用Maven来创建.管理和打包项目,也简单过了一遍Linux中搭建Java开发环境的步骤,如今我们就開始将我们之前开发的项目demo公布到Linux环境下.并让它正常执行起 ...

  5. 日期格式私人定制——SimpleDateFormat

    [前言] 最近项目需要特殊的日期格式,又恰好是String类型的,以前都没怎么用到SimpleDateFormat这个类去格式化日期,脑子里蹦出来的思路就是先把Date给toString了,然后慢慢切 ...

  6. HDU 1950 Bridging signals(LIS)

    最长上升子序列(LIS)的典型变形,O(n^2)的动归会超时.LIS问题可以优化为nlogn的算法. 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则记录最小的那个最末元 ...

  7. Oracle Union Union All 对查询结果集操作

    在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union Al ...

  8. Array类拓展方法

    var arr=[ {name:'one',sex:'girl',handsome:true}, {name:'two',sex:'girl',handsome:false}, {name:'thr' ...

  9. 关于http响应状态码

    http状态返回代码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. http状态返回代码 代码   说明 100   (继续) 请求者应当继续提出请求. 服务器返回此代码表示已 ...

  10. mycat实战之性能测试

    1.安装性能监控工具 1.1 nmon 安装nmon de >#下载地址 http://nmon.sourceforge.net/pmwiki.php?n=Site.Download nmon1 ...