spring基於java配置DispatcherServlet和view
本文基於java 的配置實現DispatcherServlet的配置。
1、建立初始化類
建立繼承AbstractAnnotationConfigDispatcherServletInitializer的初始化類,該類在容器初始化時會自動呼叫建立一個java類,該類繼承AbstractAnnotationConfigDispatcherServletInitializer,並實現其中必須實現的方法以及自己關心的方法,原始碼如下:
package cn.hifei.spring.demo.config;
import javax.servlet.Filter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import cn.hifei.spring.demo.base.BaseConfiguration;
import cn.hifei.spring.demo.web.DefaultWebConfiguration;
public class DefaultWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class<?>[] { BaseConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class<?>[] { DefaultWebConfiguration.class };
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[]{"/"};
}
@Override
protected Filter[] getServletFilters() {
HiddenHttpMethodFilter fl = new HiddenHttpMethodFilter();
return new Filter[]{fl};
}
}
2、建立用於配置web的配置類
建立一個繼承於WebMvcConfigurerAdapter的類用於配置servlet,一個工程中可以有多個servlet的配置。BaseConfiguration就是一個使用了@Configuration註解實現的類,裡面按照自己的需要新增bean的例項化即可,這裡就不給原始碼了。WebMvcConfigurerAdapter的原始碼如下:
package cn.hifei.spring.demo.web;
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.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
@ComponentScan("cn.hifei.spring.demo.web")
public class DefaultWebConfiguration extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/static/**","/css/**");
}
}
如果需要引用基於xml的配置,可以使用如下類似的註解:
@ImportResource("classpath:applicationContext-*.xml")
3、修改web.xml
完成上述兩個配置的步驟之後,需要修改web.xml檔案去除同樣的配置,否則可能會造成衝突,如本文去除如下幾個部分的配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring-servlet.xml</param-value>
</init-param>
<init-param>
<param-name>spring.profiles.default</param-name>
<param-value>dev</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>spring</servlet-name>
</filter-mapping>
4、建立測試的controller
建立一個用於測試的controller,用於測試配置是否生效。如本文使用的原始碼如下:
package cn.hifei.spring.demo.web.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping(value="hello",method=RequestMethod.GET)
public String test() {
return "hello,world";
}
}
4、部署測試
部署工程到web伺服器,然後開啟瀏覽器訪問如下連線即可看到"hello,world"的輸出:
http://127.0.0.1:8080/SpringTest1/hello
相關文章
- spring boot基於Java的容器配置Spring BootJava
- Spring MVC 解析之 DispatcherServletSpringMVCServlet
- Spring基於註解的IoC配置Spring
- Spring基於註解的aop配置Spring
- 基於Spring Cloud搭建分散式配置中心SpringCloud分散式
- spring上 -基於Xml配置bean筆記SpringXMLBean筆記
- Spring MVC之基於java config無xml配置的web應用構建SpringMVCJavaXMLWeb
- 基於Java11最小化Spring Boot 2 的Docker映象檔案配置JavaSpring BootDocker
- spring5.x版本 java配置和annotation配置說明SpringJava
- spring事物配置,宣告式事務管理和基於@Transactional註解的使用Spring
- spring基於註解配置實現事務控制Spring
- 基於Spring Integration和Apache Camel的SEDASpringApache
- 基於Spring Boot和Spring Cloud實現微服務架構Spring BootCloud微服務架構
- 如何基於 SAP CDS view 生成 object pageViewObject
- 說說在 Spring 中,如何基於 XML 來配置事務SpringXML
- 結合DDD和Spring Boot實現基於REST API的併發控制 -DZone JavaSpring BootRESTAPIJava
- 基於Vue-cli和Vux的webpack配置VueUXWeb
- Spring Boot 基於註解驅動原始碼分析--自動配置Spring Boot原始碼
- spring上 -基於註解配置bean,動態代理,AOP筆記SpringBean筆記
- Spring系列:基於Spring-AOP和Spring-Aspects實現AOP切面程式設計Spring程式設計
- View基礎View
- Spring boot學習(二) Spring boot基礎配置Spring Boot
- 基於原始碼分析 Android View 繪製機制原始碼AndroidView
- 基於Istio/gRPC/Redis/BigQuery/Spring Boot/Spring Cloud和Stackdriver的微服務案例RPCRedisSpring BootCloud微服務
- 構建基於Java Spring Boot和Uniapp的心理小程式:從零到一的完整指南JavaSpring BootAPP
- spring cloud 配置中心git和本地地址配置SpringCloudGit
- Java基礎7:關於Java類和包的那些事Java
- Spring之路(38)–基於PlatformTransactionMSpringPlatform
- SpringMVC 解析(二)DispatcherServletSpringMVCServlet
- 基於原始碼分析 Android View 事件分發機制原始碼AndroidView事件
- Spring Security 實戰乾貨:基於配置的介面角色訪問控制Spring
- Spring MVC 基於URL的攔截和對映規則SpringMVC
- 基於Spring Batch的Spring Boot的教程 - BaeldungBATSpring Boot
- 基於 Traefik 的 ForwardAuth 配置Forward
- 使用Spring Cloud Kubernetes基於Kubernetes、Spring Boot和Docker構建微服務架構 - MoriohCloudSpring BootDocker微服務架構
- Spring MVC原始碼(二) ----- DispatcherServlet 請求處理流程 面試必問SpringMVC原始碼Servlet面試
- 基於Spring Boot傳送 mailSpring BootAI
- 基於Maven的Spring整合CXFMavenSpring
- Spring基於XML方式的使用SpringXML