对Java Web中WEB-INF目录的理解以及访问方法
事情发生
在上个暑假第一次写Java web大项目的时候,对于目录管理及分配没有任何经验,就想着清晰明了。
后端servlet是用maven进行构建的,所以在目录上没有碰到什么大问题。
用idea进行Java Web项目构建的时候,会自动生成这样一个前端目录

当时对拦截器以及安全目录什么的完全没有概念,于是就把页面,还有css和js以及resource全部放进WEB-INF。
于是乎灾难来了吗,最直观的体现就是,css样式不生效,怎样都不生效,因为没有安全目录以及拦截器概念,完全找不到解决方法,这个bug真的是找的天昏地暗。
问题原因
原来WEB-INF是安全目录。
WEB-INF下面的内容只能由服务器级别才能访问,客户端并不能访问。
服务器级别指:经过服务器内的Controller渲染。
客户端级别指:通过浏览器直接访问。
所以作为安全目录,将jsp文件放到里面是对的,避免客户端直接访问,保证了安全性。
用户想要访问就要访问服务器的Controller,经过它的渲染,才能呈现文件,这就是为什么index.jsp不在WEB-INF目录下的原因。
因为我把css和js以及资源文件放在了WEB-INF目录底下,页面自然访问不到安全目录,自然css不生效。
问题解决
页面可以放在它下面可以用Contriller渲染然后进行访问,但是其他资源不可以呀。
把css等静态文件放在WEB-INF目录外面。就可以解决无法访问以至于css样式不生效等问题。
但是
我当时不知道呀,不知道还有安全目录一说,不会把他们放在外面,但是问题不能不解决。
爬了半天的搜索引擎,看遍了各种博客以及分享,试了各种方式之后。
从铺天盖地的信息中看出来了两个字:
路径,要读取WEB-INF下面的文件要用这个路径:getServletContext().getRealPath("/WEB-INF/");
但是那是后端访问方法,我是要在前端引用那些css
于是我的前端页面出现了这个东西
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
在申明之后,引入css的时候,就用的
<link rel="stylesheet" href="<%=basePath%>css/login_style.css" type="text/css">
之后就能正常显示了。

只能说确实好看。
项目地址为 https://gitee.com/zxeao/Study_Station.git
可以点个star嘛?
是学生,正在学习,自己遇到的问题写点博客,如有错误,请谅解,如果发现了错误可以评论一下。
对Java Web中WEB-INF目录的理解以及访问方法的更多相关文章
- paip.java 开发中web server的选择jboss resin tomcat比较..
paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- 关于Java Webproject中web.xml文件
提及Java Webproject中web.xml文件无人不知,无人不识,呵呵呵:系统首页.servlet.filter.listener和设置session过期时限.张口就来,但是你见过该文件里的e ...
- java web中servlet、jsp、html 互相访问的路径问题
java web中servlet.jsp.html 互相访问的路径问题 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可 ...
- 深入剖析Java编程中的中文问题及建议最优解决方法
摘录自:http://fafeng.blogbus.com/logs/3062998.html http://www.blogbus.com/fafeng-logs/3063006.html 深入剖析 ...
- python基础:os模块中关于文件/目录常用的函数使用方法
Python是跨平台的语言,也即是说同样的源代码在不同的操作系统不需要修改就可以同样实现 因此Python的作者就倒腾了OS模块这么一个玩意儿出来,有了OS模块,我们不需要关心什么操作系统下使用什么模 ...
- os模块中关于文件/目录常用的函数使用方法
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('. ...
- 18 os/os.path模块中关于文件/目录常用的函数使用方法 (转)
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('. ...
- java线程中的sleep/wait/notify/yield/interrupt方法 整理
java线程中的sleep/wait/notify/yield/interrupt方法 sleep 该方法能够使当前线程休眠一段时间 休眠期间,不释放锁 休眠时间结束之后,进入可执行状态,加入到线程就 ...
- js中的回调函数的理解和使用方法
js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
随机推荐
- 使用mbr2gpt将MBR磁盘转换为GPT磁盘
随着越来越多的新PC的到来,UEFI启动渐渐的取代了BIOS启动方式.不过UEFI需要从GPT磁盘启动,原来的MBR磁盘不行.如果你更换了硬件,只想把磁盘拿到新平台上用又不想重装系统的话就麻烦了.以前 ...
- shell下cat EOF中变量$处理
在使用cat EOF中出现$变量通常会直接被执行,显示执行的结果.若想保持$变量不变需要使用 \ 符进行注释 [root@localhost ~]# cat >> aa.txt <& ...
- logstash安装插件修改使用的gem源
gem source -l # 查看当前使用的gem源 gem source --remove https://rubygems.org/ # 移除gem源 gem source -a https:/ ...
- 单台主机MySQL多实例部署
二进制安装mysql-5.7.26 [root@mysql ~]# cd /server/tools/ [root@mysql tools]# ll total 629756 -rw-r--r-- 1 ...
- netstat -lnp |grep XXX后不显示进程
netstat -lnp |grep XXX后不显示进程,不一定是没有进程,可能是这个命令不好使,换成 ps -ef | grep XXX
- 工厂里懂得mes和erp有发展吗?
在工厂里懂得MES.ERP肯定有发展啊,现在数字化转型.智能制造正当时,ERP.MES之类的系统是刚需,只是不同工厂启动的早晚有别,使用的系统不相同而已,但知识体系.逻辑.理念等大都是相通的.比如你熟 ...
- 监控 HTTP 服务器的状态(测试返回码)shell脚本
#!/bin/bash # 监控 HTTP 服务器的状态(测试返回码) # 设置变量,url为你需要检测的目标网站的网址(IP 或域名),比如百度 url=http://http://183.232. ...
- Centos7使用sendEmail-v1.56发送邮件
Centos7使用sendEmail-v1.56发送邮件 注意:Centos7默认使用perl5.16,而sendEmail-v.1.56要求使用perl5.10.否则会报以下错误.所以需要下载并安装 ...
- JSTL组件的下载链接地址
配置JSTL和下载jar包 JSTL的安装包 下载地址:http://tomcat.apache.org/download-taglibs.cgi 在下载页面找到JSTL的规范和实现的两个jar包,如 ...
- Error creating bean with name ‘com.ai.ecs.ecop.pointExchange.service.NewGoodsService‘
Error creating bean with name 'com.ai.ecs.ecop.pointExchange.service.NewGoodsService' 查看服务注册中心的格式是否正 ...