WebRoot到底是什么鬼?我改它的名可以吗?

关于web项目的一些总结:

  1. WebRoot下的WEB-INF的内容是无法直接访问的,必须通过服务器的转发操作才可以访问。

    request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(req, resp);
    

    通过测试发现WebRoot下的其他路径(包括子文件夹)是可以随意访问的。

  2. WebRoot到底是个什么东西?为什么我们放入资源就可以访问了呢?也没有配置servlet啊?

    这都是编译器的功劳,首先呢,右键web项目点击Properties,接着找到Deployment Assembly,如下图:

    在这里插入图片描述

    我们可以很清楚的看到,WebRoot的资源默认是放入根路径的,这个根路径在哪呢?就是Tomcat路径下的webapps/当前web应用,因为我们的web程序不就是发布到Tomcat上吗?所以这个也很好理解。同时再解释一下,为什么 静态资源就可以打开了?因为 Tomcat 匹配一个路径,是先扫描是否存在该文件,如果存在,则返回,如果不存在,则匹配Servlet路径,如果没有匹配到Servlet-url,那么则返回404页面

    还可以看到,我自己创的resources文件夹,默认会被部署到web应用下的/WEB-INF/classes,大家都知道WEB-INF下的资源是无法被直接访问的,所以我的Resources下的静态资源并不能被访问到,但是我们可以把他的部署目录修改 成部署到 项目的根目录即可。

    其实WebRoot并不特殊,我完全可以把他改成任意的名字,只要发布的路径是 web项目的根路径就行了。

    还有一些小伙伴使用maven的方式创建web工程,为什么本地不报错,但是部署到Tomcat运行就报错了呢?,提示找不到jar包,最大的可能就是,检查一下Web Deployment Assembly,看看是否里面包含了maven的库。我们需要把maven的库也一起部署到应用下面啊,不然当然会提示Class Not Found…

  3. java Build PathWeb Deployment Assembly的区别 是 什么?

​ 首先呢?我们从字面意思理解,java Build Path当然就是 java的编译路径,那么就很好理解了,这个选项是设置,java程序的编译生成的classes,jar包啊,资源们的输出目录,编译器给我们编译,总得需要个目录吧。所以这个选项的作用就是 设置编译后的文件的位置。

​ 而Web Deployment Assembly就是 当编译器替我们把 web 项目部署到Tomacat上面,放到web应用下的哪个目录呢?于是乎,就有了Web Deployment Assembly两个的本质区别就是一个是设置输出本地编译的位置,一个是设置存放在web应用下的位置

发布了63 篇原创文章 · 获赞 149 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/huijiaaa1/article/details/89739606
今日推荐