老师,关于FileServlet的使用有些疑惑
Topic source关于专门写一个“`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>
希望帮到有相同疑惑的同学
关于网页模板_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
格格巫92190
老师,不太理解为什么要专门写一个“`FileServlet`”类来实现css、js等的加载?
为什么网页模板_base.html中引入“jquery.js”和“bootstrap.css”要用“/static”? 如下面代码所示
js和css的目录不应该是“../../static”吗?```还有我删除“
FileServlet”类,然后修改
“/static”为
“../../static”`后,为什么网站加载时无法加载css和js文件?``