`
wangke0611
  • 浏览: 169378 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

[转]关于页面文件放在/WEB-INF目录下面

阅读更多
 

 

     本人在看《J2EE核心模式》(“Core J2ee Patterns”,刘天北、熊节译),里面提到了一种实现资源保护的方法,那就是把那些限制访问的资源(比如说jsp源代码)放到Web应用的WEB-INF目录下,对于/web-INF/及其子目录,不允许直接的公共访问,所以就可以起到保护这些代码未经授权的访问和窥视,更好的保护了源代码(19页)。

      这么书只是对这种方法进行了简单的介绍,没有描述详细处理方法,我测试了一下,没有办法对放到/WEB-INF的文件进行访问,所以我就上网搜索了一下,才明白了具体的处理方法,感觉非常适合用在STRUTS结构上的系统。下面请听我详细说明。

通常JSP开发人员会把他们的页面文件存放在Web应用相应的子目录下。一个典型的商店应用程序的目录结构如图2所示。跟catalog (商品目录)相关的JSP被保存在catalog子目录下。跟customer相关的JSP,跟订单相关的JSP等都按照这种方法存放。

2.基于不同的功能 JSP 被放置在不同的目录下

 

 

这种方法的问题是这些页面文件容易被偷看到源代码,或被直接调用。某些场合下这可能不是个大问题,可是在特定情形中却可能构成安全隐患。用户可以绕过Strutscontroller直接调用JSP同样也是个问题。

为了减少风险,可以把这些页面文件移到WEB-INF 目录下。基于Servlet的声明,WEB-INF不作为Web应用的公共文档树的一部分。因此,WEB-INF 目录下的资源不是为客户直接服务的。我们仍然可以使用WEB-INF目录下的JSP页面来提供视图给客户,客户却不能直接请求访问JSP

采用前面的例子,图3显示将JSP页面移到WEB-INF 目录下后的目录结构

3. JSP存放在 WEB-INF 目录下更为安全

 

    如果把这些JSP页面文件移到WEB-INF 目录下,在调用页面的时候就必须把"WEB-INF"添加到URL中。

    我们知道,实现页面的跳转有两种方式,一种是通过redirect的方式,一种是通过forward的方式。redirect方式的跳转,系统会在一个新的页面打开要跳转的网页;而forward方式跳转,系统会在原来的页面上打开一个要跳转的网页。所以放到WEB-INF目录下的文件是不允许采用redirect方式的跳转来访问的,如下

1/test/test1.jsp文件

 

 

 

<html>

<body>

    <form name="testform" action="/WEB-INF/jsp/test/test.jsp">

      <input type = "submit" value="test">

    </form>

</body>

</html>

    上面这段语句只有一个名为test的按钮,如果单击这个按钮是,系统就会跳转到/WEB-INF/jsp/test/test.jsp,它的代码如下:

2/WEB-INF/jsp/test/test.jsp文件

<html>

<body>

跳转成功!

</body>

</html>

事实上,这个跳转是无法成功的,点击按钮后,IE会报“403 Forbidden”的错误。

 

 

 

 

forward方式的跳转则可以成功,如下代码:

3/test/test2.jsp文件

<html>

<body>

<form name="testform">

<jsp:forward page = "/WEB-INF/jsp/test/test.jsp" />

 

 

 

</form>

</body>

</html>

    请注意上面红色的语句,这段就是通过forward的形式来访问/WEB-INF/jsp/test/test.jsp文件,在IE输入地址http://localhost/test1/test2.jsp,网页上就显示“跳转成功!”的信息了,这表示放到了WEB-INF可以通过forward的方式来访问。

 

    个人认为,像这种方式的可能不大时候采用一般jsp进行编程的系统,因为很多页面上都有采用submit这样的方式来进行跳转,但这种方式却非常适合采用struts结构的系统。因为采用这个结果大多是先跳转到一个Action类,然后在Action类进行相关处理后(比如说获取相关的信息保存到session中,进行有效性的判断),然后再forward到另外一个页面,这样放到WEB-INF中的jsp代码可以被正常访问,也防止了对这些页面的直接访问,下面我来举例说明。

    下面我们先对配置文件struts-config.xml进行配置,如下:

4WEB-INF/struts-config.xml文件

 

 

 

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

<!-- ========== Action Mapping Definitions ============================== -->

<action-mappings>

<action path="/test"

 

 

 

            type=" test.TestAction"

 

 

 

            scope="request">

 

 

 

            <forward name="test" path="/WEB-INF/jsp/test/test.jsp"/>

 

 

 

    </action>

 

 

 

</action-mappings>

</struts-config>

    上面这个配置非常简单,请看红色部分,这里定义了一个action类,它的路径为/test,所对应的类为test.TestAction.java,它都一个跳转页面,别名为test,对应的页面为/WEB-INF/jsp/test/test.jsp

    下面我们对例1的内容进行修改,使其跳转到/test去。

5:修改后的/test/test1.jsp文件

 

 

 

<html>

<body>

    <form name="testform" action="/test">

      <input type = "submit" value="test">

    </form>

</body>

</html>

    这样我们在IE中访问http://localhost/test/test1.jsp,然后点击test按钮,页面就会跳转到test.TestAction.java这个类来,下面是这个类的内容。

package test;

 

 

 

 

import javax.servlet.http.*;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

 

 

 

 

 

 

 

 

public class TestAction extends Action

{

public ActionForward perform(ActionMapping mapping,

                                 ActionForm form, HttpServletRequest req,

                                 HttpServletResponse res)

    {

      return mapping.findForward("test");

    }

 

 

 

 

}

    可以看到,这个类是继承Action类的,所有的控制类都必须继承Action类,这个类里面有一个perform方法,跳转到这个类都是从这个方法进行访问的(新版本可以是execute方法),现在这个方法里面只有一条语句,这句话的意思就是跳转到一个别名为test的页面,也就是/WEB-INF/jsp/test/test.jsp页面,这样我们点击test按钮后,IE就会显示“跳转成功!”这条信息,这表示系统允许这样的跳转。

注意:CSS文件要存放在根目录,此时引用要用绝对路径!!!引用格式如:/项目名/css文件夹/*.css

分享到:
评论

相关推荐

    WEB-INF目录下的jsp页面如何访问

    从给定的信息来看,似乎存在一定的误解,因为提供的内容与标题和描述中提及的主题“WEB-INF目录下的jsp页面如何访问”并不相符。然而,基于题目要求,我将围绕“WEB-INF目录下的jsp页面如何访问”这一主题进行详细的...

    springmvc无法访问/WEB-INF/views下的jsp的解决方法

    在Spring MVC框架中,开发人员通常将JSP页面放置在`/WEB-INF/views`目录下,以增加安全性,因为直接通过URL无法访问这个路径。然而,有时会出现Spring MVC无法正确解析并显示这些JSP页面的问题,导致404错误。本篇...

    JSP文件是否有必要放在WEB-INF下

    JSP文件存放在WEB-INF目录下更为安全。 JSP文件是否需要放在WEB-INF目录下是一个需要根据项目需求和结构来决定的问题。从安全性、可维护性、可读性等多方面考虑,放在WEB-INF目录下可以提高安全性和可维护性,但...

    Eclipse中web-inf和meta-inf文件夹的信息

    总之,在 Eclipse 中开发 Web 应用时,正确理解和使用 `WEB-INF` 和 `META-INF` 文件夹及其内部文件对于项目的构建和部署至关重要。它们不仅帮助开发者更好地组织代码和配置文件,还能够确保应用程序能够正常运行。

    Spring MVC注解与数据绑定(含源码及结果图)

    1、有如下一个订单信息页面order.jsp(置于/WEB-INF/jsp目录下),按以下步骤实现一个使用POJO类型完成表单数据传输的SpringMVC数据绑定项目。 (1) 创建一个Order类来封装上述订单信息,其中各个属性的名称和数据类型...

    请求重定向无法访问web-inf下的资源1

    在Java Web应用程序中,WEB-INF目录是一个非常重要的组成部分,它包含了一些对用户不可见的敏感资源,如Web应用的配置文件(web.xml)、类文件(通过编译的Java源代码)以及库(JAR文件)。这个目录的设计目的是为了...

    jsoup jar包

    4.在WebContent/WEB-INF目录下建sitemesh.xml文件,内容如下: &lt;property name="decorators-file" value="/WEB-INF/decorators.xml" /&gt; ${decorators-file}" /&gt; &lt;page-parsers&gt; &lt;parser content-type="text/...

    详解直接访问WEB-INF目录下的JSP页面的方法

    通过这种方式,即使JSP文件放置在WEB-INF目录下,用户依然可以通过前端的链接访问到这些页面。但是他们不能直接在地址栏输入JSP文件的路径,必须通过后端控制器逻辑间接请求,从而确保了应用程序的安全。 需要注意...

    多个struts配置文件使用

    - **Load-on-Startup**:`&lt;load-on-startup&gt;`标签用于指定`ActionServlet`在Web应用程序启动时加载的顺序。数字越小,加载优先级越高。 - **Debug模式**:通过`&lt;init-param&gt;`中的`debug`参数设置调试级别。值为2...

    Java Web项目集成开源报表工具BIRT

    INF/下的tlds、viewer.properties文件拷贝到report-engine文件夹下,然后将birt-runtime-4_4_2/WebViewerExample/WEB-INF/下的server-config.wsdd文件拷贝到Java Web项目的WebRoot/WEB-INF/目录下。 步骤6:修改web...

    jsp大学教程代码

    在`itstudy/WEB-INF`目录下创建`web.xml`文件,并配置以下内容: ```xml &lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; &lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" ...

    JSP Display标签

    然后,需要将displaytag-1.0-b3.jar、lib目录下的所有jar文件拷贝到WEBAPP_HOME/WEB-INF/lib目录下面,并将displaytag-11.tld、displaytag-12.tld和displaytag-el-12.tld拷贝到WEBAPP_HOME/WEB-INF目录下面。...

    jsp-config标签使用详解

    此时,我们可以在web.xml文件中添加如下配置: ```xml &lt;jsp-config&gt; &lt;jsp-property-group&gt; &lt;url-pattern&gt;/CH2/*.jsp&lt;/url-pattern&gt; &lt;el-ignored&gt;false&lt;/el-ignored&gt; &lt;scripting-invalid&gt;true&lt;/scripting-...

    java程序调试错误收集

    在Web应用开发过程中,经常会遇到一些典型的问题,这些问题往往与类版本不匹配、JSP标签库配置不当等有关。下面将详细介绍几种常见的问题及其解决办法。 ###### (1). 类版本不匹配问题 **异常表现:** 当运行时...

    struts2详解

    DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"&gt; &lt;web-app&gt; &lt;display-name&gt;MyApplication&lt;/display-name&gt; &lt;filter-name&gt;...

    jsp网上购物WEB-INF里lib下的jar文件

    在Java服务器页面(JSP)技术中,"jsp网上购物WEB-INF里lib下的jar文件"这一主题涉及到的是Web应用程序的架构以及如何支持电子商务系统运行的关键组件。`WEB-INF`是每个标准Java Web应用中的一个特殊目录,它包含了...

    JSTL详细配置

    ### JSTL(JavaServer Pages Standard Tag Library)详细配置知识点 #### 一、JSTL简介及作用 ...通过以上详细的步骤和示例,我们可以看到如何在Web应用中配置和使用JSTL,从而简化代码,提高开发效率。

    WEB-INF.zip_.inf ocx

    5. WEB-INF目录:在Web应用程序中,`WEB-INF`目录是一个特殊目录,它包含了web.xml(Web应用的部署描述符)、类文件和其他资源。在JSP中,如果需要访问服务器端的Java代码,这些代码通常会放在`WEB-INF/classes`或`...

    Java项目中如何访问WEB-INF下jsp页面

    在Java Web开发中,将JSP页面放置在`WEB-INF`目录下是一种常见的做法,主要目的是为了增强应用程序的安全性。因为Tomcat等Servlet容器默认不允许直接通过URL访问`WEB-INF`目录下的资源,这可以防止未经身份验证的...

    无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl

    `tld`文件夹可能包含了JSTL的TLD文件,这些文件需要被放置在`WEB-INF`目录下,这样Web容器在解析JSP页面时就能找到对应的标签库定义。 具体步骤如下: 1. **解压文件**:首先,下载提供的压缩包,并将其解压。 2. ...

Global site tag (gtag.js) - Google Analytics