鱼C论坛

 找回密码
 立即注册
查看: 691|回复: 13

[已解决]IDEA写Servlet的一些问题

[复制链接]
发表于 2023-4-14 10:54:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.之前没有用集成开发工具写Webapp时环境变量配置时把javac编译过后的class文件放到了WEB-INF的class目录下,集成开发环境为什么没有clsses这个目录?,src下的源文件就可以?
2.IDEA中的External Libraries 和lib有什么不一样?源文件中写了JDBC的代码为什么External Libraries可以不导入mysql-connector-java-8.0.30这个jar包也行,
只需在lib中导入
最佳答案
2023-4-14 11:24:15
她与晚风 发表于 2023-4-14 11:17
我看内个视频里面,他只把JDBC需要的jar包放入了lib中,之前dos窗口编译的时候不是需要设置环境变量吗,
如 ...

我理解了你的问题。在IntelliJ IDEA中,当你将JDBC需要的jar包放入lib文件夹时,IDE会自动将这个jar包添加到项目的类路径(classpath)中,这样在编译和运行时都可以找到这个jar包。所以,只要jar包在类路径中,即使没有将它添加到"External Libraries"中,项目也可以正常编译和运行。

你的理解基本是正确的,但需要注意的是,将jar包放入lib文件夹后,IDE会同时将它添加到编译时和运行时的类路径中。换句话说,lib文件夹中的jar包既会在编译时被使用,也会在运行时被使用。而"External Libraries"通常是项目范围内的共享库,包含编译时和运行时都需要的依赖库。无论将jar包放在哪个位置,关键是确保它在类路径中,这样项目才能正常编译和运行。

所以,实际上,把JDBC需要的jar包放入lib文件夹和将其添加到"External Libraries"中在功能上没有太大区别。通常,将第三方库添加到"External Libraries"中更为推荐,因为这样可以更好地组织项目结构。然而,在某些情况下,特别是对于Java Web应用程序,将运行时需要的库放入lib文件夹是比较常见的做法,因为这样可以确保部署应用程序时所有必要的库都包含在其中。
1.png
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-14 11:02:15 | 显示全部楼层


1. IDE 环境有种概念叫 “类路径”,都是配置好的,在编译打包等过程中都会自动将规定路径下的内容按它所配置打包,例如编译到:target/classes 路径下

2. External Libraries 用于显示当前项目所依赖的所有第三方库和框架,而 lib 目录是项目自己维护的一些 jar 包文件夹,

也能包含一些第三方库和框架的 jar 包,这些 jar 包不是 Maven 等构建工具自动导入的,而是我们自己手动添加到项目的。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-14 11:04:21 | 显示全部楼层
首先,我想澄清一下概念,你提到的"clsses"可能是一个拼写错误,我猜你是指"classes"目录。接下来我将回答你的问题:

1、在IntelliJ IDEA中,项目的结构与传统的Java Web应用程序略有不同。通常,源代码存放在"src"文件夹下,编译后的class文件会被放置在"out"或"target"文件夹下的子目录中,如"out/production/项目名/WEB-INF/classes"。这样的结构有助于更好地组织项目和简化构建过程。当然,你可以手动创建一个"WEB-INF/classes"目录,然后将编译后的class文件放在里面,但是这种做法可能导致项目结构变得复杂,不易维护。

2、IntelliJ IDEA中的"External Libraries"和"lib"有一些区别:

  • "External Libraries"是项目依赖的外部库,这些库在项目之外,一般是系统范围内的共享库。当你将某个库添加到项目的"External Libraries"时,实际上是添加了对该库的引用,而不是将库的副本放入项目文件夹。这样可以避免多个项目间出现重复的库文件,节省存储空间。
  • "lib"文件夹通常位于项目的"WEB-INF"目录下,用于存放项目专用的库文件。与"External Libraries"不同,这些库文件是项目文件夹的一部分,可以随项目一起分发。



关于JDBC的问题,从技术上讲,只要mysql-connector-java-8.0.30.jar包在项目的类路径(classpath)中,项目就可以正常运行。你可能已经在其他地方配置了类路径,或者IDEA自动为你配置了类路径,所以将jar包放在"lib"中而不是"External Libraries"中也能正常工作。但通常情况下,为了保持项目的清晰和规范,建议将依赖库放入"External Libraries"中,或者使用项目管理工具如Maven或Gradle来管理依赖。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-14 11:06:40 | 显示全部楼层
你的意思是说IDEA会自动将编译过后的字节码文件放到WEB-INF/classes目录下,不用我们创建是吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-14 11:12:49 | 显示全部楼层
她与晚风 发表于 2023-4-14 11:06
你的意思是说IDEA会自动将编译过后的字节码文件放到WEB-INF/classes目录下,不用我们创建是吗




是的,不需要我们创建,我们只需要专注代码内容

但是一定要记住 “约定大于配置,配置大于代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-14 11:17:55 | 显示全部楼层
isdkz 发表于 2023-4-14 11:04
首先,我想澄清一下概念,你提到的"clsses"可能是一个拼写错误,我猜你是指"classes"目录。接下来我将回答 ...

我看内个视频里面,他只把JDBC需要的jar包放入了lib中,之前dos窗口编译的时候不是需要设置环境变量吗,
如果External Libraries不也设置该jar包,难道不就编译不过去了吗?

我的理解是:External Libraries是编译需要的jar包,运行的话需要的jar包放lib里面

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-14 11:19:04 | 显示全部楼层
她与晚风 发表于 2023-4-14 11:06
你的意思是说IDEA会自动将编译过后的字节码文件放到WEB-INF/classes目录下,不用我们创建是吗

Ex....... 和lib的jar可以共享吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-14 11:24:14 | 显示全部楼层
她与晚风 发表于 2023-4-14 11:19
Ex....... 和lib的jar可以共享吗?



可以这么简单理解:

External Libraries: 是当前项目下已经导入的依赖

lib 目录下的 jar :只是依赖的安装包



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-14 11:24:15 | 显示全部楼层    本楼为最佳答案   
她与晚风 发表于 2023-4-14 11:17
我看内个视频里面,他只把JDBC需要的jar包放入了lib中,之前dos窗口编译的时候不是需要设置环境变量吗,
如 ...

我理解了你的问题。在IntelliJ IDEA中,当你将JDBC需要的jar包放入lib文件夹时,IDE会自动将这个jar包添加到项目的类路径(classpath)中,这样在编译和运行时都可以找到这个jar包。所以,只要jar包在类路径中,即使没有将它添加到"External Libraries"中,项目也可以正常编译和运行。

你的理解基本是正确的,但需要注意的是,将jar包放入lib文件夹后,IDE会同时将它添加到编译时和运行时的类路径中。换句话说,lib文件夹中的jar包既会在编译时被使用,也会在运行时被使用。而"External Libraries"通常是项目范围内的共享库,包含编译时和运行时都需要的依赖库。无论将jar包放在哪个位置,关键是确保它在类路径中,这样项目才能正常编译和运行。

所以,实际上,把JDBC需要的jar包放入lib文件夹和将其添加到"External Libraries"中在功能上没有太大区别。通常,将第三方库添加到"External Libraries"中更为推荐,因为这样可以更好地组织项目结构。然而,在某些情况下,特别是对于Java Web应用程序,将运行时需要的库放入lib文件夹是比较常见的做法,因为这样可以确保部署应用程序时所有必要的库都包含在其中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-14 11:34:46 | 显示全部楼层
isdkz 发表于 2023-4-14 11:24
我理解了你的问题。在IntelliJ IDEA中,当你将JDBC需要的jar包放入lib文件夹时,IDE会自动将这个jar包添 ...


哦哦,懂了.最后一个问题?我为什么没有看到项目生成的字节码文件
4.png
6.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-14 11:36:52 | 显示全部楼层
isdkz 发表于 2023-4-14 11:24
我理解了你的问题。在IntelliJ IDEA中,当你将JDBC需要的jar包放入lib文件夹时,IDE会自动将这个jar包添 ...

是因为我没写主方法所以没永久生成吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-14 11:38:42 | 显示全部楼层
Twilight6 发表于 2023-4-14 11:02
1. IDE 环境有种概念叫 “类路径”,都是配置好的,在编译打包等过程中都会自动将规定路径下的内容按它 ...

谢谢兄弟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-14 11:47:18 | 显示全部楼层
她与晚风 发表于 2023-4-14 11:34
哦哦,懂了.最后一个问题?我为什么没有看到项目生成的字节码文件

在IntelliJ IDEA中,编译后的字节码文件(即.class文件)通常存储在"out"或"target"文件夹下,而不是传统的"WEB-INF/classes"目录下。这是因为IntelliJ IDEA采用了一种不同于传统Java Web项目的项目结构。

要查看项目中生成的字节码文件,请按照以下步骤操作:

  • 在项目的文件夹树中找到"out"或"target"文件夹。这个文件夹通常位于项目根目录下。如果你无法看到这个文件夹,请确保在项目视图的设置中启用了"Show Excluded Folders"选项。
  • 展开"out"或"target"文件夹,然后继续展开其子目录。你应该能找到一个名为"production"(或类似名称)的文件夹,其中包含一个与你的项目同名的子文件夹。
  • 在这个项目名的子文件夹中,你将找到编译后的.class文件。对于Java Web应用程序,它们可能在"WEB-INF/classes"子目录中。


请注意,要查看字节码文件,你首先需要确保项目已经成功编译。你可以通过IntelliJ IDEA的"Build"菜单手动编译项目,或者启用自动编译选项,以便在文件发生更改时自动编译。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-14 11:49:07 | 显示全部楼层
她与晚风 发表于 2023-4-14 11:36
是因为我没写主方法所以没永久生成吗

不一定是因为缺少主方法。IntelliJ IDEA会根据你的项目配置和源代码自动编译生成字节码文件,即使你的类没有包含主方法。缺少主方法只会影响你是否可以直接运行这个类,但不会影响字节码文件的生成。

如果你找不到生成的字节码文件,请尝试以下操作:

  • 确保项目已经编译。在IntelliJ IDEA的"Build"菜单中,选择"Build Project"或"Rebuild Project"。如果编译失败,请解决编译错误,然后重新尝试编译。
  • 检查项目设置。确保你的项目设置正确配置了源代码目录、输出目录等。在IntelliJ IDEA中,打开"File" > "Project Structure",然后在左侧导航栏中选择"Modules"。检查"Sources"选项卡中的源代码目录和"Paths"选项卡中的输出目录是否设置正确。
  • 如果你仍然找不到字节码文件,请尝试清理并重新生成项目。在IntelliJ IDEA的"Build"菜单中,选择"Clean Project",然后重新编译项目。


如果你已经编译了项目并按照上述步骤操作仍无法找到字节码文件,那么可能是其他问题导致的。这种情况下,建议检查项目配置和IDEA设置,确保一切都已正确配置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 20:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表