学习JavaWeb编程最初是从学习servlet开始的,在学过了N多个框架之后,逐渐觉得框架自带的功能是的,不加思考就在上面码砖,这样码久了就有种“一切尽在掌控之中”的错觉。
然而,闲下来的时候回忆旧知识,想自己搭一个纯servlet的架子,瞬间懵逼。今天就记录下遇到的问题:
1.在IDEA中对构建得到的 Artifacts 组织其结构时,不符合 servlet 的约定,导致
- 报 internal compiler error (编译器内部错误,因为设置output的路径不对,或者没有及时refresh maven 依赖,导致编译时没找到jar包)
- 启动成功了访问不到首页index.jsp(因为没有把它放置到正确的位置,它应该是与WEB-INF和META-INF在同一目录层级的)
- 在能访问到index.jsp的情况下,访问不到匹配特定URL的servlet方法(原因是编译出来的class字节码文件根本就不在上面说的WEB-INF目录里面,这样tomcat拿着你传给它的URL就找不到对应的处理者了)
截图中 output directory 最好指定一个明确的路径,这里给定路径名称为 war-exploded 。它是 Artifacts 输出到的路径的根路径,
这个根路径可能还有其它同级路径,存放IDEA自己构建出的产物。
而output layout则是 对class,jsp,xml等文件/文件夹的组织,IDEA给了你极大的灵活性能够自己组织编译产物的层级结构(什么文件输出到什么位置),这样做之后,得到的产物不做额外的处理就可以放到容器里直接运行。