一、Edit Configurations时,出现Application server libraries not found错误:
(上图是我解决问题后的,可以看到成功配置Tomcat 10.0.12)
(上图为出现的问题)
解决方法:上网查询发现是Tomcat版本过高(或者IDEA版本过低),有两种解决途径,第一种是重新下载低版本Tomcat,第二种是将IDEA更新到高版本。由于我不知道假如下载低版本Tomcat是否还需要重新配置Tomcat到电脑上(如环境配置等),以及是否会发生冲突等问题,过于麻烦。故此处我采用第二种方法,即重新下载高版本IDEA(2021.1),我原来旧版本IDEA是2020.1.
注意:下载高版本IDEA安装时,会提示是否删除旧版本(有上下两个选项,第一个是是否删除旧版本,第二个貌似是要不要删除原来的配置),我两个都没有✔。
安装完毕后,重新进行配置,配置成功!
二、:Edit Configuration时,在Deployment配置时有一个Application context:
我们知道Servlet规范中,Tomcat文件目录遵循如下规则:一个项目文件作为根目录(项目名自起);根目录下有一个WEB-INF目录(名字必须为WEB-INF),WEB-INF目录下必须有一个名为classes的目录用于存放程序的字节码文件(.class文件或者包含.class文件的目录)以及一个(不必须)的lib目录,用于存放程序运行所需外部类库。
当我们使用了IDEA提供的模板后,IDEA自动为我们创造了一个规范的目录结构,可以看到根为web,然而当程序运行后,在apache-tomcat-10.0.12(我下载的)目录下的webapps下没有出现web项目,但是依然成功运行,说明IDEA通过某种方式代管了项目。
注意:这导致我们在浏览器中想要访问资源时,项目的根不是web!而是Application context!
比如在本机中访问上图中的student.html,则浏览器中应该输入 http://localhost:8080/javaweb/student.html,而不是http://localhost:8080/web/student/html.
可以把Application context理解成虚拟的项目根!
三、当我们利用JDBC连接数据库时,需要将mysql驱动JAR包放到WEB-INF目录的lib目录下,同时也要放在External Libraries中:
否则,在运行如下代码(注册驱动)时:
Class.forName("com.mysql.cj.jdbc.Driver");
可能发生ClassNotFoundException!