• home > java > jsp >

    WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件

    Author:[email protected] Date:

    1、资源文件只能放在WebContent下面,如 CSS,JS,image等 放在WEB-INF下引用不了 2、页面放在WEB-INF目录下面,这样可以限制访问,提高安全性

     

    1、资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了.

     

    2、页面放在WEB-INF目录下面,这样可以限制访问,提高安全性.如JSP,html

     

    3、只能用转向方式来访问WEB-INF目录下的JSP,不用采用重定向的方式请求该目录里面的任何资源.如图:index.jsp >>  main.jsp

     

    4、WEB-INF目录下文件访问资源文件时,可以忽略WEB-INF这一层目录.如main.jsp 要用css目录里的一个css文件.

        <link rel="stylesheet" type="text/css" href="css/comm201005faa3.css" />这样就行了,从客户端的地址可以看出来

        服务器转向main.jsp就是在webroot下面.所以main.jsp和css目录可以讲是同一级目录.

    5、WEB-INF/oa目录下访问images目录.怎么办呢.<img alt="" src="images/instpage.gif"></body>还是这这样.

    6、WEB-INF目录下的文件之间如何访问呢.如在main.jsp用<a href="oa.do">测试OA的路径</a>访问
       像main.jsp有10处链接到WEB-INF目录下的其它页面.那就得有10个转向Action.这个可以用DispatchAction类加参数专门处理转向工作.

      注:

    转向方式: forward

          如struts-config文件中配置<forward name="success" path="/WEB-INF/main.jsp" /> 或 在Action中写request.getRequestDispatcher("/WEB-INF/main.jsp").forward(request, response);都是服务器读取了该页面内容,并发送到客户端.客户端的地址不变.内容跳转了

    重定向方式: Redirect

         如struts-config文件中配置<forward name="success" path="/WEB-INF/main.jsp" redirect="true"/>

    或在action中response.sendRedirect("/error.jsp");重定向的含义就是服务器把地址发给客户端,让客户端去访问.这种办法显然针对WEB-INF目录是无用功.

     


     


     

     


    在部署的Java EE环境中,我们一般把jsp页面写在WebRoot\WEB-INF\content 目录下,这样使得jsp页面一定需要struts的控制转发才可访问,提高页面安全性。

    但是今天在jsp页面中应用WebRoot目录中的css,js文件发现十分困难,先看看我的文件结构:

    目标是在index.jsp中访问default.css。

    defautl.css是在index.jsp目录的父目录的父目录的CSS目录下。所以我这样写:

    ps:空格为故意添加,不知为何会自动变成博客园的网址

            <link href="../ ../css/default.css" rel="stylesheet" type="text/css"/>        <link href="../ ../css/uploadify.css" rel="stylesheet" type="text/css"/>

    在Eclipes中也出现超链接提示,说明目录正确,但是结果失败。

    查询资料后,在百度百科中看到:

    http://baike.baidu.com/view/1745468.htm

     TomCat 服务器下的WEB-INF文件夹是一个非常安全的文件,在页面中不能直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。

    从上面的实验可以看出,不但是直接访问,使用" ../ ../ "之类的间接访问也不能成功

    在此多方查询资料之后,尝试使用如下方法访问:

    1         <!-- 输出为项目根目录,即WebRoot -->2         <%String path = request.getContextPath(); %>3         <link href="${path}/css/default.css" rel="stylesheet" type="text/css"/>4         <link href="${path}/css/uploadify.css" rel="stylesheet" type="text/css"/>

    原理很简单,变量path值为项目根目录,而css就是此目录的子目录,自然可以访问。

    可惜结果还是错,思考之,el表达式的${}是以page,request,session,application的顺序寻找匹配的项,而path并不在这个范围之内,也许在java脚本中直接定义的对象是局部作用域,而不是page作用域?可惜百度之后难以找到相关资料,不过结论应该是没错的。

    既然EL表达式无法取出,那么java脚本应该可以达到目的吧?尝试如下:

    1         <%String path = request.getContextPath(); %>2         <link href="<%=path %>/css/default.css" rel="stylesheet" type="text/css"/>3         <link href="<%=path %>/css/uploadify.css" rel="stylesheet" type="text/css"/>

    果不其然,页面成功读出了css文件中的样式,达到目的。不过此页面中存在java脚本,不够规范,查询资料后,用以下纯EL表达式实现:

    1         <c:set value="${pageContext.request.contextPath}" var="path" scope="page"/>2         <link href="${path}/css/default.css" rel="stylesheet" type="text/css"/>3         <link href="${path}/css/uploadify.css" rel="stylesheet" type="text/css"/>

    先将ContextPath放如page中,再使用el表达式取出,问题得以解决。

     

    在查询资料的过程中,发现如下问题:

    WEB-INF目录下加载CSS和JS问题?????

    http://topic.csdn.net/u/20100420/14/c4efb68c-ca03-46b9-8277-126bd1290ebe.html 

    此问题中,CSS和JS也在WEB-INF下,多方试验后我还是没能解决,望高手解答。

     这个是变态的解决办法:

    实际上:

    你要始终保持他们在平级目录下
    你在开发的时候由于目录不在同级导致你在开发页面css显示不出来
    但是在项目发布之后又能正常显示的

    参考资料:

    百度百科

    http://baike.baidu.com/view/1745468.htm

    EL表达式 (详解)

    http://blog.csdn.net/qwerasdf123/article/details/4189889

    ITEYE问答

    http://www.iteye.com/problems/37087

    百度知道

    http://zhidao.baidu.com/question/277894936.html

    参考文章:

    http://www.cnblogs.com/coolhwm/archive/2011/11/27/2265272.html

    http://a-bin.iteye.com/blog/1114960


    转载本站文章《WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件》,
    请注明出处:https://www.zhoulujun.cn/html/java/jsp/2016_0303_7666.html