以往使用SpringMVC的时候都是通过在Resource目录下面新建一个web.xml文件用来完成Servlet的配置,往DispatcherServlet中添加一个WebApplication的配置文件,完成DispatcherServlet的配置,还可以配置一些请求的拦截,加载顺序等,其实外面也可以不使用web.xml,通过实现WebApplicationInitializer接口或者继承AbstractAnnotationConfigDispatcherServletInitializer 类(tomcat容器在启动的时候会自动搜索实现WebApplicationInitializer 接口或者继承AbstractAnnotationConfigDispatcherServletInitializer 类的类来初始化DispatcherServlet,相当于web.xml的功能也就是为什么能替换web.xml原因),这样的纯JAVA配置方式配置springmvc。
首先通过idea 新建一个maven项目,可以通过Module SDK 选择依赖的JDK版本,点击next下一步
接着填写项目的所属的组织,点击next下一步
接着点击finish完成整个项目的创建
项目创建号后在pom.xml文件中添加需要的依赖配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.terry</groupId>
<artifactId>SSM</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.5</version>
</dependency>
<!-- spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.5</version>
</dependency>
<!-- spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.5</version>
</dependency>
</dependencies>
</project>
注意除了上面的依赖外,还需要在项目中额外新增一个servlet-api.jar的依赖包,如下图点击右边的+,选择JARs or direction添加tomcat安装目录下的lib包里面的servlet-api.jar
添加依赖后如下图所示
在file-Project Structure -facets目录下点击+号选择Web 新建一个Web对象
新建Web对象后,在后边的name可以修改这个对象的名字,Deployment Descriptions下面可以配置web.xml的路径,但是我们是基于java配置的没有web.xml,所以我们把这个删除,点击右边的-符号删除这个配置,然后在下面的Web Resource Directions下面修改resource的路径,修改为指定我们项目下的resources包,路径配置为"/",最后点击下面的fix生成一个artifact对象。
新建号artifacts项目后在右边的Available Elements下面选择需要打包成artifacts的项目,点击右键选择put into output root,然后选择下面的apply和ok完成artifacts的配置
接下来配置tomcat,在下面选择 edit configurations 进入配置
点击+号,选择tomcat server->local 进入tomcat的配置页面
在配置页面中点击configure配置下载好的tomcat(下载tomcat这里就不赘述了),可以在Name上面修改这个tomcat的名字,在 Http port修改tomcat的端口号
tomcat的基本信息配置好后,点击Deployment添加artifacts项目,artifacts项目在上面已经配置好了,点击右边的+号选择Artifact然后选择配置好的artifacts项目。
选择好artifacts项目后会出现在如下图中,可以在Application context这里修改应用的访问目录,点击apply,Ok完成tomcat的配置。
完成上面的一些准备工作后,接着就是通过JAVA的配置来实现一个DispatcherServlet完成springmvc的功能,
通过实现 WebApplicationInitializer 接口,重写 onStartup 方法。
public class MyWebApplicationInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
// 加载Web application的配置
AnnotationConfigWebApplicationContext annotationConfigApplicationContext = new AnnotationConfigWebApplicationContext();
annotationConfigApplicationContext.register(WebMVCConfig.class);
// 配置servlet
DispatcherServlet dispatcherServlet = new DispatcherServlet(annotationConfigApplicationContext);
ServletRegistration.Dynamic app = servletContext.addServlet("app", dispatcherServlet);
app.addMapping("/");
app.setLoadOnStartup(1);
}
通过继承 AbstractAnnotationConfigDispatcherServletInitializer 类,重写需要的方法。
public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebMVCConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
基于注解的web.xml配置如下:
<web-app>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
WebMVCConfig类的配置信息,@EnableWebMvc启动mvc,@ComponenScan扫描指定包下面的类。
@Configuration
@EnableWebMvc
@ComponentScan(value = "com.terry.common")
public class WebMVCConfig {
}
最后就是新建一个controller类,用于测试整个springmvc是否搭建成功,如果中文出现乱码,可以使用produces = “application/json;charset=utf-8” 来解决乱码。
@RestController
public class TestController {
@GetMapping(value = "/ces", produces = "application/json;charset=utf-8")
public String hello() {
return "测试";
}
}
在页面输入 地址可以看到返回了controller类hello方法的字符串"测试"
感觉基于JAVA配置的方式比基于XML方式的配置要简便一些,没有那么多繁琐的约束,但是XML也有其独有的优势,没有绝对的那个好,那个坏的说法,主要看个人喜欢用那个。