文档章节

一个基于servlet 3.0的不使用web.xml配置文件的建议web项目demo

竹竿先生
 竹竿先生
发布于 2017/05/10 22:13
字数 675
阅读 202
收藏 1

 项目jar包:

package spittr.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

// 声明为配置类bean
@Configuration
// 扫描spitter下的所有声明了的bean
@ComponentScan(basePackages = { "spitter" }, excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })
public class RootConfig {

}
package spittr.config;

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

/**
 * 在Servlet 3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer
 * 接口的类,如果能发现的话,就会用来配置Servlet容器
 * Spring提供了这个接口的实现SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer
 * 的类,并将配置的任务交给他们来完成,Spring3.2 引入了一个遍历的WebApplicationInitializer基础实现也就是
 * AbstractAnnotationConfigDispatcherServletInitializer
 * 因为本类扩展了AbstractAnnotationConfigDispatcherServletInitializer,因此当部署到Servlet3.0容器中的时候,容器就会自动
 * 发现本类,并用本类来配置Servlet上下文
 * @author CCC
 *
 */
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
	
	
	/**
	 * 将DispatcherServlet映射到 "/"
	 * 这表示该方法会是应用默认的Servlet,
	 * 他会处理进入应用的所有请求
	 */
	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}
	
	/**
	 * 该方法返回的带有@Configuration注解的的类将会用来配置
	 * ContextLoaderListener创建的bean(通常是驱动应用后端的中间层和数据层组件)
	 */
	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class<?>[]{RootConfig.class};
	}

	/**
	 * 指定配置类
	 * 该方法中要求DispatcherServlet加载应用上下文时,
	 * 使用定义在WebConfig配置类中的bean
	 * 包括 控制器,视图解析器,处理器映射等bean
	 */
	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[]{WebConfig.class};
	}
	
}
package spittr.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.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration // 声明本类为配置类组件
@EnableWebMvc // 启用SpringMVC
/*
 * 启用组件扫描,扫描spitter.web包下的所有带有Component注解的类
 * 如果不启用spring将只能找到显式声明在配置类中的控制器
 */
@ComponentScan("spittr.web") 
public class WebConfig extends WebMvcConfigurerAdapter {
	
	/**
	 * 配置视图解析器
	 * @return
	 */
	@Bean
	public ViewResolver viewResolver(){
		InternalResourceViewResolver resolver = new InternalResourceViewResolver();
		resolver.setPrefix("/WEB-INF/views/");// 视图前缀
		resolver.setSuffix(".jsp");// 视图后缀,文件类型
		resolver.setExposeContextBeansAsAttributes(true);
		return resolver;
	}
	
	/**
	 * 配置静态资源的处理
	 */
	@Override
	public void configureDefaultServletHandling(
			DefaultServletHandlerConfigurer configurer) {
		/*
		 *  调用enable方法来要求DispatcherServlet将对静态资源的请求
		 *  转发到Servlet容器中默认的servlet上,而不是使用DispatcherServlet本身来
		 *  处理此类请求
		 */
		configurer.enable();
	}
	
	
	
}
package spittr.web;

import static org.springframework.web.bind.annotation.RequestMethod.*;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller // 声明为一个控制器 实际效果和@Component注解一样,只是表达的形式不同
public class HomeController {
	
	// 处理对"/" 的GET请求
	@RequestMapping(value = "/home", method = GET)
	public String home() {
		return "home"; // 视图名为 home.jsp
	}
	
	

}
package test;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*;

import org.junit.Test;
import org.springframework.test.web.servlet.MockMvc;

import spittr.web.HomeController;

public class Test01 {

	@Test
	public void testHomePage() throws Exception {
		HomeController controller = new HomeController();
		MockMvc mockMvc = standaloneSetup(controller).build();
		mockMvc.perform(get("/homepage")) // 对"/" 路径发起GET请求
				.andExpect(view().name("home")); // 断言视图结果的名称为home
	}

}

 

© 著作权归作者所有

竹竿先生
粉丝 3
博文 92
码字总数 25526
作品 0
杭州
程序员
私信 提问
Servlet3.0新特性剖析

Servlet3.0规范的新特性主要是为了3个目的: 1.简化开发 2.便于布署 3.支持Web2.0原则 为了简化开发流程,Servlet3.0引入了注解(annotation),这使得web布署描述符web.xml不在是必须的选择...

长平狐
2012/09/03
195
0
springboot 是如何帮我们省去web.xml配置的

概述 最开始使用原生的springmvc时,总是免不了有如下xml配置 但是,切换到springboot之后,web.xml之类的繁琐的配置基本上都不见了。出于好奇研究了下springboot究竟帮我们做了什么,我们可...

端吉
2018/06/23
0
0
SpringBoot使用Jsp

本文是简单总结一下SpringBoot使用Jsp的Demo。 前言 在早期做项目的时候,JSP是我们经常使用的java服务器页面,其实就是一个简化servlet的设计,在本文开始之前,回顾一下jsp的几大对象,如图...

dalaoyang
2018/08/13
0
0
ServletConfig对象和ServletContext对象

三、ServletConfig对象 1.ServletConfig,顾名思义,Servlet配置。ServletConfig本质是一个接口,里面包含4个方法。 (1) String getServletName();获取servlet的名字 (2) ServletContext get...

Wakeeee_
2018/07/01
0
0
走进JavaWeb技术世界4:Servlet 工作原理详解

本文出自我的公众号:程序员江湖。 满满干货,关注就送。 从本篇开始,正式进入Java核心技术内容的学习,首先介绍的就是Java web应用的核心规范servlet 转自:https://www.ibm.com/developer...

你的猫大哥
2017/09/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
27分钟前
3
0
Spring系列教程六:AOP详细讲解

AOP 概述 什么是 AOP AOP:全称是 Aspect Oriented Programming 即:面向切面编程。 AOP技术是对OOP技术的一种延伸,AOP是面向纵向,OOP是面向横向。简单的说它就是把我们程序重复的代码抽取...

我叫小糖主
40分钟前
12
0
Qt编写数据可视化大屏界面电子看板9-曲线效果

一、前言 为了编写数据可视化大屏界面电子看板系统,为了能够兼容Qt4和嵌入式linux系统,尤其是那种主频很低的,但是老板又需要在这种硬件上(比如树莓派、香橙派、全志H3、imx6)展示这么华...

飞扬青云
今天
3
0
责任链模式

//这篇博客的博主真的不错,解析的都很清晰明了, https://blog.csdn.net/jason0539/article/details/45091639

南桥北木
今天
3
0
Flutter -------- dio网络请求

dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等... 1.添加依赖# dependencies: dio: 2.1.x #...

切切歆语
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部