天天看點

idea中原生Servlet3.0開發之---使用配置類和注解的方式整合SpringMVC======以下于你或許是個好消息======

以注解方式來啟動SpringMVC前需了解的基礎知識:

1、web容器在啟動的時候,會掃描每個jar包下的META-INF/services/javax.servlet.ServletContainerInitializer

idea中原生Servlet3.0開發之---使用配置類和注解的方式整合SpringMVC======以下于你或許是個好消息======

2、加載這個檔案指定的類SpringServletContainerInitializer

idea中原生Servlet3.0開發之---使用配置類和注解的方式整合SpringMVC======以下于你或許是個好消息======

3、spring的應用一啟動會加載感興趣的WebApplicationInitializer接口的下的所有元件;

idea中原生Servlet3.0開發之---使用配置類和注解的方式整合SpringMVC======以下于你或許是個好消息======

4、并且為WebApplicationInitializer元件建立對象(元件不是接口,不是抽象類)

    1)、AbstractContextLoaderInitializer:建立根容器;createRootApplicationContext();

    2)、AbstractDispatcherServletInitializer:

            建立一個web的ioc容器;createServletApplicationContext();

            建立了DispatcherServlet;createDispatcherServlet();

            将建立的DispatcherServlet添加到ServletContext中;

                getServletMappings();

    3)、AbstractAnnotationConfigDispatcherServletInitializer:注解方式配置的DispatcherServlet初始化器

            建立根容器:createRootApplicationContext()

                    getRootConfigClasses();傳入一個配置類

            建立web的ioc容器: createServletApplicationContext();

                    擷取配置類;getServletConfigClasses();

===========================    

總結:

    以注解方式來啟動SpringMVC;繼承AbstractAnnotationConfigDispatcherServletInitializer;

實作抽象方法指定DispatcherServlet的配置資訊;

===========================

定制SpringMVC;

1)、@EnableWebMvc:開啟SpringMVC定制配置功能;相當于web.xml中配置的 <mvc:annotation-driven/>;

2)、配置元件(視圖解析器、視圖映射、靜态資源映射、攔截器。。。)

    extends WebMvcConfigurerAdapter

===========================

springmvc父子容器:

各自負責一些掃描的包

父容器:功能類的包,如:Controller,前端控制器,視圖解析器

子容器:業務子產品的包,如:service,repositories,資料庫事物

idea中原生Servlet3.0開發之---使用配置類和注解的方式整合SpringMVC======以下于你或許是個好消息======

使用配置類和注解的方式整合SpringMVC的執行個體步驟:

一、導入servlet和springmvc的jar包

<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.atguigu</groupId>
  <artifactId>springmvc-annotation</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <dependencies>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-webmvc</artifactId>
  		<version>4.3.11.RELEASE</version>
  	</dependency>
  	
  	<dependency>
  		<groupId>javax.servlet</groupId>
  		<artifactId>servlet-api</artifactId>
  		<version>3.0-alpha-1</version>
  		<scope>provided</scope>
  	</dependency>
  </dependencies>

  <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>
</project>
           

二、建立MyWebAppInitializer .java相當于web.xml檔案

并繼承抽象類AbstractAnnotationConfigDispatcherServletInitializer(具體可看博文開始時描述)

此類相當于web.xml;加載spring和springmvc,并設定攔截

package com.atguigu;

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

import com.atguigu.config.AppConfig;
import com.atguigu.config.RootConfig;

//web容器啟動的時候建立對象;調用方法來初始化容器以前前端控制器
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	//擷取根容器的配置類;(Spring的配置檔案)   父容器;
	@Override
	protected Class<?>[] getRootConfigClasses() {
		// TODO Auto-generated method stub
		return new Class<?>[]{RootConfig.class};
	}

	//擷取web容器的配置類(SpringMVC配置檔案)  子容器;
	@Override
	protected Class<?>[] getServletConfigClasses() {
		// TODO Auto-generated method stub
		return new Class<?>[]{AppConfig.class};
	}

	//擷取DispatcherServlet的映射資訊
	//  /:攔截所有請求(包括靜态資源(xx.js,xx.png)),但是不包括*.jsp;
	//  /*:攔截所有請求;連*.jsp頁面都攔截;jsp頁面是tomcat的jsp引擎解析的;
	@Override
	protected String[] getServletMappings() {
		// TODO Auto-generated method stub
		return new String[]{"/"};
	}

}
           

 三、建立spring的配置檔案RootConfig.java,即父容器

package com.atguigu.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;

//Spring的容器不掃描controller;父容器
@ComponentScan(value="com.atguigu",excludeFilters={
		@Filter(type=FilterType.ANNOTATION,classes={Controller.class})
})
public class RootConfig {

}
           

四、建立springmvc的配置檔案AppConfig.java,即子容器

package com.atguigu.config;


import java.util.List;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;


//SpringMVC隻掃描Controller;子容器
//useDefaultFilters=false 禁用預設的過濾規則;
@ComponentScan(value="com.atguigu",includeFilters={
		@Filter(type=FilterType.ANNOTATION,classes={Controller.class})
},useDefaultFilters=false)
public class AppConfig {


}
           

五、 架構搭建好後,建立controller和service等業務代碼,進行測試

HelloController.java

package com.atguigu.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.atguigu.service.HelloService;

@Controller
public class HelloController {
	
	@Autowired
	HelloService helloService;
	
	
	@ResponseBody
	@RequestMapping("/hello")
	public String hello(){
		String hello = helloService.sayHello("tomcat..");
		return hello;
	}

}
           

HelloService.java

package com.atguigu.service;

import org.springframework.stereotype.Service;

@Service
public class HelloService {
	
	public String sayHello(String name){
		
		return "Hello "+name;
	}

}
           

 六、運作tomcat測試

idea中原生Servlet3.0開發之---使用配置類和注解的方式整合SpringMVC======以下于你或許是個好消息======

說明:controller能通路到,并且能調用service,說明springmvc配置成功

======以下于你或許是個好消息======

好消息就是:歡迎通路下面的部落格網站哈哈哈......

網站名稱:Java學習筆記網 (點選進入)

url:https://www.javaxxbj.com/ (點選進入)

網站特點:

  1. java主要網站的導航目錄
  2. 你可以記錄自己的部落格,并可以控制顯示和隐藏,可利于管理啦!!!
  3. 可以添加收藏各個網站的連結!!!
  4. 甚至也可以文章收藏,點贊,關注,檢視我的消息等功能哦!!1

看一小點點的截圖:

idea中原生Servlet3.0開發之---使用配置類和注解的方式整合SpringMVC======以下于你或許是個好消息======
idea中原生Servlet3.0開發之---使用配置類和注解的方式整合SpringMVC======以下于你或許是個好消息======

或可一試哦!

繼續閱讀