系统环境:
- Jdk 1.8
- IntelliJ IDEA 2016.3.7
- Maven 3.3.9
使用IDEA创建mvc-annotation-demo模块(点击+)
1.png填写groupId,artifactId。接下来就是Next--Next,到这里 不需要在手动配置了
2.JPG点击Finish,然后等待Maven编译好后,目录结构如图所示:
3.JPG- 添加web-mvc依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
和 servlet-api依赖(AbstractAnnotationConfigDispatcherServletInitializer会依赖这个jar包)
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
- 添加plugins(和xml中的一样)
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<warName>mvc-annotation</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<finalName>mvc-annotation</finalName>
</build>
编写基于注解的配置文件
com.twx.config.SpringWebInitializer.java
package com.twx.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* /**
* 扩展了AbstractAnnotationConfigDispatcherServletInitializer的类会自动配置DispatcherServlet和Spring应用上下文
* @author c00284934
*
*/
public class SpringWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 返回带有@Configuration注解的类将会用来配置ContextLoaderListener创建的应用上下文中的bean
* ContextLoaderListener加载的bean通常是驱动应用后端的中间层和数据层组件
* 对应于 xml 配置中的 applicationContext.xml
*/
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}
/**
* 带有@Configuration注解的类会用来定义为DispatcherServlet应用上下文中的bean,
* 对应于xml配置中的 dispacther-servlet.xml
*/
protected Class<?>[] getServletConfigClasses() {
/**
* 当DispatcherServlet启动的时候,它会创建Spring应用上下文,并加载配置文件中所声明的bean
*/
return new Class<?>[]{WebConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"}; //将DispatcherServlet映射到“/”
}
}
注意:现在还没创建RootConfig.java 和 WebConfig.java。这两个文件的作用相当与xml配置中的 applicationContext.xml 和 dispacther-servlet.xml。而 SpringWebInitializerSpringWebInitializer.java则相当于 web.xml。
我在代码中的注解也有说明。
OK,接下来创建WebConfig.java(dispacther-servlet.xml)
WebConfig.java
/**
* 对应于xml配置中的 dispacther-servlet.xml
*/
@Configuration
@EnableWebMvc //启用SpringMVC <mvc:annotation-driven />
@ComponentScan(basePackages="com.twx") //启用组件扫描 <context:component-scan base-package="com.twx"/>
public class WebConfig extends WebMvcConfigurerAdapter{
/**
* 对应于 <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
* @return
*/
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver(); //配置视图解析器
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
// resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
/**
* 对应于 <mvc:default-servlet-handler/>
* @param configurer
*/
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) { //配置静态资源的处理
//我们要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上,而不是使用DispatcherServlet本身来处理此类请求
configurer.enable();
}
}
注解已经写的很明白了。
- RootConfig.java
package com.twx.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
/**
* 排除扫描 使用@EnableWebMvc 和 @Controller 注解的类
*/
@Configuration
@ComponentScan(basePackages={"com.twx"},
excludeFilters={
@ComponentScan.Filter(type= FilterType.ANNOTATION,value=EnableWebMvc.class),
@ComponentScan.Filter(type= FilterType.ANNOTATION,value=Controller.class)})
public class RootConfig {
}
OK。到现在我们完成了全部的配置文件的创建(web.xml dispacther-servlet.xml applicationContext.xml)
接下来,创建真正的可访问的Controller
- com.twx.controller.HelloWorldController.java
package com.twx.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Created by twx on 2017/8/30.
*/
@Controller
@RequestMapping("/")
public class HelloWorldController {
@RequestMapping(method = RequestMethod.GET)
public String index() {
System.out.println("index");
return "index";
}
@RequestMapping(value = "/home",method = RequestMethod.GET)
public String home() {
System.out.println("hello");
return "home";
}
}
因为我们在WebConfig中配置的是/WEB-INF/views/ 和 .html
所以我们需要在 WEB-INF/views下创建index.html home.html
最后的目录结构如图所示:
4.JPG部署运行
- 使用maven编译
-
删除 webapp/index.jsp文件
-
部署到tomcat
网友评论