配置 Facets 和 Aritfact
Facets 用于配置 Module
Facets 内点击 “+”,Add -> Web,选择 Module:自动在根目录下创建 web 文件
及 web\WEB-INF\web.xml
Artifact : Module 打包的方式,打包后的文件,在 Output directory 下生成
- Web Application Exploded:以文件夹形式(War Exploded)发布项目
- Web Application Archive,以 war 包的形式发布项目,每次编译会重新打包
配置 Tomcat
Application context:决定访问路径,可以为空(即 url 中不加项目名称)
注意 Deplyment 下的 Application context 是否和 Server 中的 Url 匹配,否则要输入如 /untitled1_Web_exploded 之类的,很麻烦
测试
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
@WebServlet(urlPatterns = "/qwe")
public class A extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().println("A run ......");
}
}
WEB-INF 下的 classes
classpath 是 JVM 使用到的一个环境变量,执行 JVM 如何搜索 class 文件
Web 项目编译打包后,会将 classes
放入 WEB-INF 目录下
,很多时候出现 404 的情况,检查下 WEB-INF 目录下是否存在 classes 文件
classes 内也就是 src/main/java 和 src/main/resources 下的文件
解决 out 下无 WEB-INF/classes 问题
IDEA创建Maven项目做Java Web时无WEB-INF/classes的问题
问题根源:IDE没有做Servlet的编译和复制,将IDEA项目的.iml文件中的下面一段删除:
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
Idea lib 下的 jar包明明存在,却报jar包不存在
我的解决方式:删除iml文件、重启 idea
lib 包不存在
手动添加
原生启动 Tomcat 方式
如果实现找不出来是哪里出现错误,可以试试这种方式,也算是提供一种新的思路吧~
手动编译 servlet
javac -cp javax.servlet-api-3.1.0.jar A.java
-cp:指定 jar 包路径
当前路径下一定要有 jar 包(这里是 javax.servlet-api-3.1.0.jar),不然会提示 error: package javax.servlet does not exist
,当然,毕竟 jar 包不存在
另外,编译的 java 代码(这里为 A.java)内的 package 要删去,否则会提示找不到 A.class 这个类