原创生活

国内 商业 滚动

基金 金融 股票

期货金融

科技 行业 房产

银行 公司 消费

生活滚动

保险 海外 观察

财经 生活 期货

当前位置:滚动 >

springmvc请求过程分析 SpringBoot框架之注解方式启动

文章来源:财金网  发布时间: 2019-04-11 09:57:15  责任编辑:cfenews.com
+|-

【原标题:springmvc请求过程分析 SpringBoot框架之注解方式启动】上一篇,使用Java语言创建Tomcat容器,并且通过Tomcat执行Servlet,接下来,将会使用Java语言在SpringBoot创建内置Tomcat,使用注解方式启动SpringMVC容器。

代码实现。

1.pom.xml文件,需要依赖的jar包。

org.apache.tomcat.embed

tomcat-embed-core

8.5.23

org.apache.tomcat

tomcat-jasper

7.0.47

org.springframework

spring-web

5.0.8.RELEASE

org.springframework

spring-webmvc

5.0.8.RELEASE

2.配置SpringMVC、Spring、DispatcherServlet的初始化类:

/**

*加载springmvc====dispatcherservlet

*/

publicclassSpringWebAppInitializerextendsAbstractAnnotationConfigDispatcherServletInitializer{

//加载根配置信息spring核心

protectedClass[]getRootConfigClasses(){

returnnewClass[0];

}

//springmvc加载配置信息

protectedClass[]getServletConfigClasses(){

returnnewClass[]{WebConfig.class};

}

//springmvc拦截的url映射,拦截所有请求

protectedString[]getServletMappings(){

returnnewString[]{"/"};//拦截所有请求

}

}

AbstractAnnotationConfigDispatcherServletInitializer这个类负责"初始化Spring容器、SpringMVC容器、配置DispatcherServlet"。

getRootConfigClasses()方法用于获取Spring应用容器的配置文件,这里我们给定预先定义的RootConfig.class;

getServletConfigClasses负责获取Spring MVC应用容器,这里传入预先定义好的WebConfig.class;

getServletMappings()方法负责指定需要由DispatcherServlet映射的路径,这里给定的是"/",意思是由DispatcherServlet处理所有向该应用发起的请求。

SpringMVC配置,加载SpringMVC容器。这里的@Configuration相当于springmvc.xml配置文件;@ComponentScan(basePackages = "com.jiuyue.controller")相当于配置文件sringmvc.xml的扫描controler应该还有印象吧;@EnableWebMvc则是开启SpringMVC功能。

/**

*SpringMVC配置信息

*/

@Configuration//相当于配置文件springmvc.xml

@EnableWebMvc//开启SpringMVC功能

@ComponentScan(basePackages="com.jiuyue.controller")//扫springMVC的

publicclassWebConfigextendsWebMvcConfigurerAdapter{

//配置视图转换器

}

根配置,加载Spring容器。

/**

*根配置

*/

@Configuration

@ComponentScan(basePackages="com.jiuyue")//扫整个spring项目的

publicclassRootConfig{

}

3.启动类

publicclassAPP{

publicstaticvoidmain(String[]args)throwsServletException,LifecycleException{

//使用Java内置tomcat运行SpringMVC框架

//原理:tomcat加载到SpringMVC注解启动方式,就会创建SpringMVC容器

start();

}

publicstaticvoidstart()throwsLifecycleException,ServletException{

//创建tomcat服务器

TomcattomcatServer=newTomcat();

//设置port

tomcatServer.setPort(8085);

//读取项目路径,'/'可以加载静态资源

StandardContextctx=(StandardContext)tomcatServer.addWebapp("/",newFile("src/main").getAbsolutePath());

//禁止重新载入

ctx.setReloadable(false);

//class文件读取地址

FileaddtionWebInfoClasses=newFile("target/classes");

//创建WebRoot

WebResourceRootresources=newStandardRoot(ctx);

//tomcat内部读取class文件进行执行

//内部虚拟Tomcat空间

resources.addPreResources(newDirResourceSet(resources,"/WEB-INF/classes",addtionWebInfoClasses.getAbsolutePath(),"/"));

tomcatServer.start();

System.out.println("Java语言创建Tomcat启动成功");

//异步进行接收请求

tomcatServer.getServer().await();

}

}

controller类

@Controller

publicclassIndexController{

@RequestMapping(value="/index",produces="text/html;charset=UTF-8")

@ResponseBody

publicStringindex(){

return"纯手写Java语言实现SpringBoot注解启动SpringMVC容器";

}

}

访问效果图

配置视图解析器

直接下WebConfig配置类中配置就可以,WebConfig就相当于springmvc.xml配置文件,前面我们在里面配置了扫包与开启springMVC功能,接下来就在下面继续配置视图解析器。

@Configuration//相当与配置文件

@EnableWebMvc//开启SpringMVC功能

@ComponentScan(basePackages="com.jiuyue.controller")//扫springMVC的

publicclassWebConfigextendsWebMvcConfigurerAdapter{

//配置视图转换器

//SpringMVC视图解析器

@Bean

publicViewResolverviewResolver(){

InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();

viewResolver.setPrefix("/WEB-INF/jsp/");

viewResolver.setSuffix(".jsp");

//可以在JSP页面中通过${}访问bean

viewResolver.setExposeContextBeansAsAttributes(true);

returnviewResolver;

}

}

JspController控制器类

@Controller

publicclassJspController{

@RequestMapping(value="/jspIndex")

publicStringjspIndex(){

return"jspIndex";

}

}

WEB-INF/jsp目录

访问jspIndex返回jsp页面

业务逻辑层

将根配置,配置到初始化类

/**

*根配置

*/

@Configuration

@ComponentScan(basePackages="com.jiuyue")//扫整个spring项目的

publicclassRootConfig{

}

publicclassSpringWebAppInitializerextendsAbstractAnnotationConfigDispatcherServletInitializer{

//加载根配置信息spring核心

protectedClass[]getRootConfigClasses(){

returnnewClass[]{RootConfig.class};

}

//springmvc加载配置信息

protectedClass[]getServletConfigClasses(){

returnnewClass[]{WebConfig.class};

}

//springmvc拦截的url映射,拦截所有请求

protectedString[]getServletMappings(){

returnnewString[]{"/"};//拦截所有请求

}

}

Service类

@Service

publicclassIndexService{

publicStringindex(){

return"纯手写Java语言实现SpringBoot注解启动SpringMVC容器";

}

}

控制器类

@ResponseBody

@RequestMapping(value="/index2",produces="text/html;charset=UTF-8")

publicStringindex2(){

returnindexService.index();

}

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章的同学,可以关注微信公众号:SeptemberNotes

专题首页|财金网首页

原创
新闻

精彩
互动

独家
观察

京ICP备2021034106号-38   营业执照公示信息  财金网  版权所有  cfenews.com  投稿邮箱:362293157@qq.com  业务QQ:362293157立即发帖