您的位置:首页 > 其它

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

2017-05-10 00:00 781 查看
项目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
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet 3.0 无xml
相关文章推荐