非社区版idea搭建Maven+springmvc工程
非社区版idea搭建Maven+springmvc工程
以下均使用Maven骨架搭建springmvc工程。本文是在学习黑马视频中遇到的一些问题总结。
非社区版idea+Maven+springmvc+本地tomcat
在idea中配置Maven和Tomcat不再说明,很多博客中已经写的很详细。
1.新建Java空项目
2.导入Maven-webapp骨架
点击apply-》ok。最终生成的项目结构如下图所示:
3.完善项目
本测试项目使用配置类,因此先删除webapp/WEB-INF/web.xml。
本项目结构如下:
代码片pom.xml
.
<modelVersion>4.0.0</modelVersion>
<groupId>com.lwb</groupId>
<artifactId>springmvc-01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
代码片ServletContainersInitConfig.java
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
代码片SpringConfig .java
@Configuration
@ComponentScan(value = "com.lwb",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
)
)
public class SpringConfig {
}
代码片SpringMvcConfig .java
@Configuration
@ComponentScan("com.lwb.controller")
public class SpringMvcConfig {
}
代码片UserController.java
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println(this.getClass() + "-----save");
return "{'info' : 'success'}";
}
}
4.配置本地Tomcat
按照上述图片配置后就可以启动应用了。
5.遇到的问题
1、编译失败?保证本地Tomcat使用的jre版本正确。
2、无法访问controller层的接口?
参照3里面的pom.xml,需保证spring-webmvc和javax.servlet-api的<scope>provided</scope>。因为Tomcat本身提供了所需的依赖,在打包的时候不需要spring-webmvc和javax.servlet-api的依赖。
非社区版idea+Maven+springmvc+Tomcat插件
Tomcat插件和本地Tomca配置方式基本一致,有几个不同的地方,如下。
1.与本地Tomcat不同点
1、pom.xml不同。
插件需在xml文件中添加Tomcat插件坐标。port是端口,path就是上下文。另外,注意spring-webmvc的scope是全局的。javax.servlet-api是<scope>provided</scope>。
代码片pom.xml
.
<groupId>com.lwb</groupId>
<artifactId>springmvc-01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
<packaging>war</packaging>
2、添加application方式不同。
写在最后
1、pom.xml文件更改后,记得reload project。如果依赖还是红色,在保证Maven仓库中有对应依赖下,可以清下缓存并重启idea。
2、在启动Tomcat后,无法访问controller?
提供一种排查思路。先保证路径正确,包括端口、Tomcat配置的上下文、SpringMvcConfig扫描controller层、SpringConfig排除扫描controller等。
查看@Controller注解引入是否正确。正确的应该是org.springframework.stereotype.Controller。
查看编译后的target是否正确,重点关注打的包。正确的目录结构如下,根据经验,大部分情况是WEB-INF/lib不存在导致的。如果target目录缺失很多文件,先排查能否正常打包,maven-Lifecycle-package,参考图2。