Spring Boot2.0之注解方式启动Springmvc

回顾下springmvc原理图:

DispatcherServlet是Spring MVC的核心,每当应用接受一个HTTP请求,由DispatcherServlet负责将请求分发给应用的其他组件。

在旧版本中,DispatcherServlet之类的servlet一般在web.xml文件中配置,该文件一般会打包进最后的war包种;但是Spring 3引入了注解,我将要介绍,如何基于注解配置Spring MVC。

1、Spring mvc无配置文件夹,采用注解方式启动。

把配置的内容 转换为 Java代码

步骤:

1、加载Spring容器 加载dispatcherservlet

tomcat只要读到这几个类,就可以帮助初始化了

配置文件代码和pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5.springbootmvc</groupId>
  <artifactId>springbootmvc</artifactId>
  <version>0.0.1-SNAPSHOT</version>
 <dependencies>
		<!--Java语言操作tomcat -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-core</artifactId>
			<version>8.5.16</version>
		</dependency>
		<!-- spring-web -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>5.0.4.RELEASE</version>
			<scope>compile</scope>
		</dependency>
		<!-- spring-mvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.0.4.RELEASE</version>
			<scope>compile</scope>
		</dependency>
		<!-- tomcat对jsp支持 -->
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-jasper</artifactId>
			<version>8.5.16</version>
		</dependency>
	</dependencies>

</project>

  

加载SpringMVC容器

正如可以通过多种方式配置DispatcherServlet一样,也可以通过多种方式启动Spring MVC特性。原来我们一般在xml文件中使用<mvc:annotation-driven>元素启动注解驱动的Spring MVC特性。

package com.toov5.config;

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.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/*
 * spring mvc的配置信息
 *
 */
@Configuration   //表示配置
@EnableWebMvc   //开启springmvc功能 扫包 视图转换 拦截器
@ComponentScan("com.toov5.controller")  //扫controller包 类似与传统的配置中 开启扫包模式那段xml配置
public class WebConfig extends WebMvcConfigurerAdapter {

    //需要配置视图器
    // 创建SpringMVC视图解析器
        @Bean
        public ViewResolver viewResolver() {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setPrefix("/WEB-INF/views/");
            viewResolver.setSuffix(".jsp");
                //可以在JSP页面中通过${}访问beans
            viewResolver.setExposeContextBeansAsAttributes(true);
            return viewResolver;
        }

}

package com.toov5.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/*
 * 加载非Springmvc 的配置
 *
 */

@Configuration
@ComponentScan(basePackages = "com.toov5")  //扫整个项目的
public class RootConfig {

}

加载SpringMVCDispatcherServlet

AbstractAnnotationConfigDispatcherServletInitializer这个类负责配置DispatcherServlet、初始化Spring MVC容器和Spring容器。getRootConfigClasses()方法用于获取Spring应用容器的配置文件,这里我们给定预先定义的RootConfig.classgetServletConfigClasses负责获取Spring MVC应用容器,这里传入预先定义好的WebConfig.classgetServletMappings()方法负责指定需要由DispatcherServlet映射的路径,这里给定的是"/",意思是由DispatcherServlet处理所有向该应用发起的请求。

package com.toov5.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/*
 * 加载springmvc--dispatcherservlet
 * 下面的这个接口 初始化dispatcherservlet
 */
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    // 加载根容器 加载跟配置信息 spring核心
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return new Class[] { RootConfig.class };
    }

    // 加载SpringMVC容器 springmvc 加载配置信息
    protected Class<?>[] getServletConfigClasses() {

        return new Class[] { WebConfig.class };  //相当于一个数组里面放了一个Class
    }

    // SpringMVCDispatcherServlet 拦截的请求 /   拦截所有请求
    protected String[] getServletMappings() {

        return new String[] { "/" };
    }

}

controller层

package com.toov5.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController //Spring mvc 提供的哈
public class IndexController {

    @RequestMapping("/index")
    public String index(){
        return "successful";
    }

}
package com.toov5.controller;

import org.springframework.stereotype.Controller;
/*
 * 跳转页面
 *
 */
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {

    @RequestMapping("/pageIndex")
    public String pageIndex(){
        return "pageIndex";
    }

}

tomcat:

package com.toov5;

import java.io.File;

import javax.servlet.ServletException;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;

public class AppTomcat {
    public static void main(String[] args) {
        //使用Java内置tomcat运行spring mvc框架 原理:tomcat加载到spring mvc注解启动方式,就会创建spring mvc容器
        try {
            start();
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (LifecycleException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static void start() throws ServletException, LifecycleException {

        // 创建Tomcat容器
        Tomcat tomcatServer = new Tomcat();
        // 端口号设置
        tomcatServer.setPort(9090);
        // 读取项目路径    这样可以加载到静态资源
        StandardContext ctx = (StandardContext) tomcatServer.addWebapp("/", new File("src/main").getAbsolutePath());
        // 禁止重新载入
        ctx.setReloadable(false);
        // class文件读取地址    启动后 在target生成编译后的class文件
        File additionWebInfClasses = new File("target/classes");
        // 创建WebRoot
        WebResourceRoot resources = new StandardRoot(ctx);
        // tomcat内部读取Class执行
        resources.addPreResources(
                new DirResourceSet(resources, "/WEB-INF/classes", additionWebInfClasses.getAbsolutePath(), "/"));
        tomcatServer.start();
        // 异步等待请求执行
        tomcatServer.getServer().await();

    }
}

启动后:

右键点击项目刷新会出现:

这时候是虚拟创建一个tomcat目录,

点进去里面没有class文件,它的class文件全部在内存里面(也可以写到硬盘上)

最后的目录结构:

访问请求

下面继续完善service层

package com.toov5.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {

     public String index(){
         return "successful again";

     }    

}

controller的修改

package com.toov5.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.toov5.service.UserService;

@RestController //Spring mvc 提供的哈
public class IndexController {
   @Autowired
   private UserService userService;

    @RequestMapping("/index")
    public String index(){
//        return "successful";
       return    userService.index();
    }

}

SpittrWebAppInitializer需要修改:

要不扫描不到service的!

启动访问:

是不是很有趣呀~~~~

原文地址:https://www.cnblogs.com/toov5/p/9825063.html

时间: 2024-12-15 01:50:13

Spring Boot2.0之注解方式启动Springmvc的相关文章

纯手写SpringBoot框架之注解方式启动SpringMVC容器

使用Java语言创建Tomcat容器,并且通过Tomcat执行Servlet,接下来,将会使用Java语言在SpringBoot创建内置Tomcat,使用注解方式启动SpringMVC容器. 代码实现.1.pom.xml文件,需要依赖的jar包. <dependencies> <!--Java语言操作Tomcat--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <arti

使用注解方式搭建SpringMVC

1.以前搭建Spring MVC 框架一般都使用配置文件的方式进行,相对比较繁琐.spring 提供了使用注解方式搭建Spring MVC 框架的方式,方便简洁.使用Spring IOC 作为根容器管理service.dao.datasource,使用spring MVC 容器作为子容器管理controller.视图解析器 spring 官方文档中有相关示例 public class MyWebAppInitializer extends AbstractAnnotationConfigDisp

Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法

Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx":意思是返回到某个JSP页面上 如果想在此Action中跳转到另一个Action中怎样做呢? return "redirect://.do?" 例如: @RequestMapping(params = "action=delete") public String del

Spring Boot2.0自定义配置文件使用

声明: spring boot 1.5 以后,ConfigurationProperties取消locations属性,因此采用PropertySource注解配合使用 根据Spring Boot2.0官方文档,PropertySource注解,只支持properties文件,因此排除 YAML配置 针对二,可考虑新建配置类,自行搜索,不再此次讨论范围 具体使用: 1.根目录下新建自定义配置文件夹与properties配置文件 example.name=tom example.wife=jerr

Spring Boot2.0之 监控管理

Spring boot监控中心: 针对微服务的服务状态,服务器的内存变化(内存.线程.日志管理等)检测服务配置连接地址是否有用(有些懒加载的情况下,用的时候发现卧槽不能用)模拟访问,懒加载.统计有多少个bean(Spring 容器中的bean).统计Spring MVC 中@RequestMapping(统计接口数) Actuator监控应用(无界面,返回json格式) AdminUi底层使用Actuator监控应用,实现可视化界面 Actuator是spring boot的一个附加功能,可帮助

七 Spring的IOC的注解方式

Spring的IOC的注解方式入门 创建web项目,引入相应的jar包 除了IOC的6个包,还需要AOP的包 引入Spring配置文件 创建applicationContext.xml 引入约束:使用注解开发引入context约束 file:///D:/Hibernate/Spring/spring-framework-4.2.4.RELEASE/docs/spring-framework-reference/html/xsd-configuration.html 创建接口和实现类: 配置Spr

8.Spring【AOP】注解方式

1.引入jar包 sprig框架基础包+JUntil整合包+日志包+AOP包 spring的传统AOP的开发的包 spring-aop-4.2.4.RELEASE.jar com.springsource.org.aopalliance-1.0.0.jar aspectJ的开发包 com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar spring-aspects-4.2.4.RELEASE.jar 2.引入配置文件(AOP约束,注解约束) <

Spring中的AOP注解方式和XML方式

应掌握内容:1. AOP的全名2. AOP的实现原理[静态代理和动态代理]3. 注解方式的配置4. 通知类型     A. 每种通知的特点和使用方式    B. 获取各种数据,方便日后操作5. 执行表达式的方式6. XML方式的配置7. 如何加载属性文件和注意事项8. 如何引入资源文件,为什么只用引入资源文件 AOP的概念: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是

全注解方式配置SpringMVC

1.在J2EE三层的注解: 表现层:@Controller 业务层: @Service 持久层: @Repository 其他: @Component 注解起效需要几方: 1.需要一个注解 2.直接贴在什么地方 3.第三的扫描程序. 步骤: 1.开启注解扫描 <context:component-scan base-package="com._520it.springmvc.hello"/>  扫描哪个地方,这个是扫描一个包(如果扫描全部怎么配) 2.在对应的类上贴对应的注