1. 创建项目
- 打开
Idea
,并点击新建项目
注:使用的是2022.2
的商业版,该版本跟2021.2
的商业版创建Maven
项目不一样
- 点击右侧的新建项目 -> 取名 -> 创建
![Snipaste_2023-03-10_19-13-23.png](https://img-blog.csdnimg.cn/img_convert/a3d23cfb620b522c22760ac7d9262611.png#averageHue=#f1ead7&clientId=u4f24e921-30dd-4&from=drop&id=u6487e148&name=Snipaste_2023-03-10_19-13-23.png&originHeight=1065&originWidth=1441&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=80372&status=done&style=none&taskId=ufe84ca8b-9e87-406e-af9e-c4b0135a8bc&title=)
- 这样我们就创建了一个空依赖的
Maven
项目 - 打开项目 -> 右键项目名 -> 点击添加框架支持
有时会找不到,重复这个过程即可
![Snipaste_2023-03-10_19-16-30.png](https://img-blog.csdnimg.cn/img_convert/ebd38d9466ecbcc641a6020e39844ca5.png#averageHue=#b9c8bb&clientId=u4f24e921-30dd-4&from=drop&id=u2f381bd1&name=Snipaste_2023-03-10_19-16-30.png&originHeight=82&originWidth=549&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=6873&status=done&style=none&taskId=u04e2e52d-3f9e-4ba1-8c80-b2d0948b4e8&title=)
- 勾选
Web
应用程序,然后点击确定,若出现Web
目录,则加载完毕
这创建的是传统的Java Web
项目:带Web
目录的,该目录下存在WEB-INF
目录
![Snipaste_2023-03-10_19-17-37.png](https://img-blog.csdnimg.cn/img_convert/ae8e6846548f444c7c20bd0863206823.png#averageHue=#f0e9d6&clientId=u4f24e921-30dd-4&from=drop&id=u58e839ac&name=Snipaste_2023-03-10_19-17-37.png&originHeight=156&originWidth=903&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=14474&status=done&style=none&taskId=u3fd4be28-0314-40f0-939a-f157b96f6ce&title=)
- 补全目录
- 创建完的目录结构如下, 缺失了一些目录,需要自己在
test
目录下创建resource
目录
![Snipaste_2023-03-10_20-21-42.png](https://img-blog.csdnimg.cn/img_convert/39d7ec92a7a3fa8aed9a1edbf1869151.png#averageHue=#faf4dd&clientId=ud1ac01b0-dfb5-4&from=drop&id=jh0XQ&name=Snipaste_2023-03-10_20-21-42.png&originHeight=469&originWidth=488&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=18081&status=done&style=none&taskId=u6024dd5b-f5d2-4ad2-8c39-4c4f09b5c0e&title=)
web
目录:该目录的文件能被外界访问WEB-INF
目录:该目录的文件不对外展示web.xml
:主要用来配置Filter
、Listener
、Servlet
等
- 在
pom.xml
文件里加入如下代码,然后刷新Maven
,这样会在target
里生成war
文件
不这样做的话,工件中就没有我们通过Maven
引入的Jar
包,会导致项目中用到引入Jar
包的地方出错,如下所示
如: 使用@Controller
注解设置请求时,会报404
![Snipaste_2023-03-21_18-25-14.png](https://img-blog.csdnimg.cn/img_convert/d484212c86a4cd75d377d364a0b8221c.png#averageHue=#f7f5f4&clientId=u28656f79-5fca-4&from=drop&id=ub8a3f9a7&name=Snipaste_2023-03-21_18-25-14.png&originHeight=996&originWidth=1606&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=117555&status=done&style=none&taskId=u19ef51e6-2433-45c3-81e6-f857eca5940&title=)
<packaging>war</packaging>
- 或者项目结构->工件->创建
lib
目录->添加Jar
包
2. 配置Tomcat
![Snipaste_2023-03-10_20-32-32.png](https://img-blog.csdnimg.cn/img_convert/f26fb875a0527a3fd6acfb9615203ec8.png#averageHue=#ece6d0&clientId=ue8062e33-cc27-4&from=drop&id=u1e69ba89&name=Snipaste_2023-03-10_20-32-32.png&originHeight=88&originWidth=658&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8970&status=done&style=none&taskId=u824380ce-4ad8-4505-810a-8c12c076825&title=)
![Snipaste_2023-03-10_20-33-12.png](https://img-blog.csdnimg.cn/img_convert/c72cbe9f2bcb5272b04598374a202fe2.png#averageHue=#f3edd9&clientId=ue8062e33-cc27-4&from=drop&id=u4fc4ad1e&name=Snipaste_2023-03-10_20-33-12.png&originHeight=182&originWidth=357&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=10888&status=done&style=none&taskId=uacf97e6d-2c1c-451a-a990-369de515ab3&title=)
![Snipaste_2023-03-10_20-33-49.png](https://img-blog.csdnimg.cn/img_convert/0b6a73442846157fef857fe9536cff39.png#averageHue=#ede7d4&clientId=ue8062e33-cc27-4&from=drop&id=ueda9310e&name=Snipaste_2023-03-10_20-33-49.png&originHeight=86&originWidth=1300&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=6960&status=done&style=none&taskId=u9267f858-06ff-4ff1-bb75-0ede1533c0c&title=)
![Snipaste_2023-03-10_20-33-58.png](https://img-blog.csdnimg.cn/img_convert/8c25aef61b4abdd9d3e8dd0cf4807d3c.png#averageHue=#f9f2de&clientId=ue8062e33-cc27-4&from=drop&id=ue5714281&name=Snipaste_2023-03-10_20-33-58.png&originHeight=73&originWidth=388&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=5886&status=done&style=none&taskId=u2382e8ff-0095-4567-838b-cadb2e29d10&title=)
![Snipaste_2023-03-10_20-36-17.png](https://img-blog.csdnimg.cn/img_convert/e86cf0ca573dd689f0370debc3cde1b2.png#averageHue=#f2ebd8&clientId=ue8062e33-cc27-4&from=drop&id=ue324d75e&name=Snipaste_2023-03-10_20-36-17.png&originHeight=74&originWidth=849&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=7280&status=done&style=none&taskId=u77017fe6-ed89-4fb2-b0b2-9718b551f59&title=)
- 点击
Tomcat
主目录旁的文件图标,选择你Tomcat
安装到的文件夹所对应的路径,点击确定
如果是正确的话,idea
会自动帮你填写Tomcat
基目录
![Snipaste_2023-03-10_20-36-26.png](https://img-blog.csdnimg.cn/img_convert/0c7250596250ec9d3796765cef0a1860.png#averageHue=#efe9d6&clientId=ue8062e33-cc27-4&from=drop&id=u91917410&name=Snipaste_2023-03-10_20-36-26.png&originHeight=376&originWidth=566&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=29891&status=done&style=none&taskId=ucb9519b8-2f7e-42b7-8255-3339034d700&title=)
- 配置工件:点击修复 -> 会进入一个新页面 -> 修改应用程序上下文,保留一个
/
即可
![Snipaste_2023-03-10_20-45-47.png](https://img-blog.csdnimg.cn/img_convert/cc5bf3134118bd75fd42be2c5bcd5ccf.png#averageHue=#f2ecd9&clientId=ue8062e33-cc27-4&from=drop&id=u6ebee78c&name=Snipaste_2023-03-10_20-45-47.png&originHeight=124&originWidth=869&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=4978&status=done&style=none&taskId=u77237b40-66b8-4555-bd53-de9ba40403e&title=)
![Snipaste_2023-03-10_20-43-55.png](https://img-blog.csdnimg.cn/img_convert/e19d3cfef0c6783ced632e63f8128eeb.png#averageHue=#f5efdc&clientId=ue8062e33-cc27-4&from=drop&id=u1d6b5458&name=Snipaste_2023-03-10_20-43-55.png&originHeight=915&originWidth=896&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=33452&status=done&style=none&taskId=u66a68357-90d3-4085-b97a-524fda34abb&title=)
我们添加框架支持的时候就会创建一个相关的工件
3. 示例
- 在
pom.xml
文件中引入相关依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.18</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
- 创建
Controller
包 - 在
Controller
包下创建UserController.java
文件, 复制下面代码到该文件中
package org.example.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String index() {
return "index";
}
}
- 创建
Config
包 - 在
Config
包下创建一个专用于SpringMVC
的配置类-----SpringMvcConfig
- 该配置类将
@ComponentScan
注解只用于扫描Controller
包
为什么要有SpringMVC
专门的配置类, 就是为了bean
管理起来更清晰
就是将controller
层放在springmvc
容器中管理, 其他如service
层放在父容器Spring
中管理
@Configuration
@ComponentScan("org.example.Controller")
public class SpringMvcConfig {
}
-
在Config
包下创建Tomcat
启动类SpringMvcInit
类
- 该类要继承
AbstractDispatcherServletInitializer
类
AbstractDispatcherServletInitializer
类:用于Tomcat
启动
package org.example.Config;
import org.example.Config.SpringMvcConfig;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public class SpringMvcInit extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
2. 该类要继承`AbstractAnnotationConfigDispatcherServletInitializer`类, 用于简化开发
public class SpringMvcInit extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)