Discuss / Java / 老师,关于FileServlet的使用有些疑惑

老师,关于FileServlet的使用有些疑惑

Topic source

老师,不太理解为什么要专门写一个“`FileServlet`”类来实现css、js等的加载?

为什么网页模板_base.html中引入“jquery.js”和“bootstrap.css”要用“/static”? 如下面代码所示

_base.html

<script src="/static/js/jquery.js"></script>
<link href="/static/css/bootstrap.css" rel="stylesheet">

js和css的目录不应该是“../../static”吗?```还有我删除“FileServlet”类,然后修改“/static”“../../static”`后,为什么网站加载时无法加载css和js文件?``

zzx_by2014

#2 Created at ... [Delete] [Delete and Lock User]

关于专门写一个“`FileServlet`”类来实现css、js等的加载

因为在这个框架里,DispatherServlet的路由映射是urlpatterns=“/”,它接管了发往这个应用的所有http请求,包括这些对于css,js等资源的请求,如果什么都不做,这些请求会发往DispatherServlet,而它的两个映射表中显然不会有处理这些请求的dispather,因为静态资源的请求处理,让框架的用户来管理也不合理,不应该由用户自己向映射表中添加;那交给框架处理,当然是再写一个专门的servlet处理比较好,就是这个“`FileServlet`”;另外,如果不实现这个专门的servlet,在web.xml中添加相关的映射也可以,比如:

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.html</url-pattern>
</servlet-mapping>

希望帮到有相同疑惑的同学

zzx_by2014

#3 Created at ... [Delete] [Delete and Lock User]

关于网页模板_base.html中引入“jquery.js”和“bootstrap.css”要用“/static”,而不是“../../static”

您应该是基于web应用的目录结构这么想的

        └── webapp
            ├── WEB-INF
            │   ├── templates
            │   │   ├── _base.html
            │   │   ├── hello.html
            │   │   ├── index.html
            │   │   ├── profile.html
            │   │   └── signin.html
            │   └── web.xml
            └── static
                ├── css
                │   └── bootstrap.css
                └── js
                    ├── bootstrap.js
                    └── jquery.js

首先,其实html页面中,这个地方的url,写什么都无所谓,因为它只是个虚目录,跟服务器上webapp中的真正目录结构,不必是相互对应的关系,

_base.html

<script src="/static/js/jquery.js"></script>
<link href="/static/css/bootstrap.css" rel="stylesheet">

它只是决定了请求的url,在这个框架中,url只是用来寻找dispather,定位到处理函数的“key”,真正决定这个url收到之后,响应什么资源的,是相应的处理函数,只要它知道去哪儿找相关资源就行了。比如static目录不放在根目录下,而是放在WEB-INF目录下,然后_base.html中还是用现在的url,完全没有问题,只要在FileServlet中,定位到正确的目录即可。

其次,单论“../../static”这个url。这是在用templates目录的资源,定位static目录的资源,虽然看起来是对的,但其实,_base.html的url不可能是"http://localhost:8080/WEB-INF/templates/_base.html",因为外部请求,不能直接访问WEB-INF下的资源,这个url是不可能合法的;另一方面,“/static/js/jquery.js”,这种写法一般是基于context path目录的,也就是webapp根目录,那用它是可以正确访问到资源的。


  • 1

Reply