一个基于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 } }
相关文章推荐
- [Web]Servlet中使用Quartz【二】基于配置文件和jobs.xml触发任务执行
- 内置对象config的使用,使用web.xml配置一个servlet对象,并为它取一个名字。
- Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea
- 谷歌验证码非web.xml非servlet拦截 使用配置文件自定义加载,防止多次点击(防js攻击)
- Servlet的配置(建立项目的时候每写一个servlet都要在web.xml中声明servlet)
- servlet 3.0无需配置web.xml,使用注入方式配置servlet实现登陆功能(服务器需要支持servlet3.0)
- web.xml 文件中一般包括 servlet, spring, filter, listenr的配置。那么他们是按照一个什么顺序加载呢?
- spring与servlet3.0无web.xml文件时的配置方式
- 基于Proguard软件基础上,针对Web项目xml配置文件修改的java项目。
- 基于S2SH框架的项目—web.xml文件配置
- eclipse项目web.xml文件配置servlet映射
- Servlet教程____一个简单的Servlet(基于web.xml配置servelt)
- 快速创建一个servlet并且在web.xml配置和使用它
- web.xml文件加载顺序 一、 1 、启动一个 WEB 项目的时候, WEB 容器会去读取它的配置文件 web.xml ,读取 <listener> 和 <context-param>
- log4j无日志生成? 我将一个web项目部署在tomcat server.xml配置文件中,当我启动tomcat是无日志输出。
- 一个web项目web.xml的配置中<context-param>配置作用
- 修改web.xml 去掉jetty锁定静态文件的问题 的配置(正点-使用maven,jetty配合)
- 使用Maven创建Web项目后,jsp引入静态文件提示报错。JSP 报错:javax.servlet.ServletException cannot be resolved to a type
- 使用Maven创建Web项目后,jsp引入静态文件提示报错。JSP 报错:javax.servlet.ServletException cannot be resolved to a type
- 使用DOS命令创建一个基于Maven的Web项目