把JSP放到WEB-INF后以保护JSP源代码

TeXstudio完整安装配置教程(2025最新版) 至此,你已经完成了TeXstudio的完整安装和配置!现在你可以:✅ 使用TeXstudio编写LaTeX文档✅ 正确编译中英文混排的文档✅ 掌握基本的编辑和配置技巧LaTeX的学习曲线较陡,但一旦掌握,你会发现它在学术写作中的强大之处。建议从简单的文档开始练习,逐步掌握更高级的功能。祝你LaTeX写作顺利!如果有任何问题,欢迎在评论区留言交流。关键词:TeXstudio安装、LaTeX环境配置、中文LaTeX、TeX Live、学术论文写作更新日期:2025年10月。 阅读详情
  本人在看《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就会显示“跳转成功!”这条信息,这表示系统允许这样的跳转。

    上面只是我对将jsp代码放到WEB-INF里面的好处的一点理解,如果大家有什么更好的想法或者有什么异议,欢迎告知。  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

【项目实战】YOLOV5 +实时吸烟目标检测+手把手教学+开源全部 本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~ 文章目录本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~一、项目展示二、项目资源共享1:训练图片:香烟图片+吸烟手势+烟雾三、 阅读详情

相关推荐

TPAMI 2025 | 从缺失碎片到杰作:基于上下文自适应扩散的图像修复

图像修复是一项具有挑战性的任务,尤其是要确保生成的内容与图像的现有部分无缝融合。尽管最近的扩散模型展现出了潜力,但它们在保持已知区域和未知(缺失)区域之间的连贯性方面常常遇到困难。这个问题源于扩散过程中缺乏明确的空间和语义对齐,导致生成的内容无法与原始图像平滑融合。此外,扩散模型通常依赖全局学习分布,而非局部特征,这使得生成的图像部分与现有图像部分之间存在不一致。在这项工作中,作者提出了ConFill,这是一个新颖的框架,引入了上下文自适应差异(CAD)模型,以确保在整个扩散过程中,已知区域和未知区域的中间

小白学视觉 214

SpringMVC访问WEB-INF下的jsp解决方案

一. 问题 最近基于公司的新框架进行开发,该框架将项目中用到的jsp等文件放在WEB-INF目录下。实际开发过程中,需要在框架页面通过iframe嵌入对应的具体页面,此处如果直接调用对应页面所在的url地址,则会提示404错误。 WEB-INF目录下的文件不能直接访问,需要映射,jsp放在那里也不能访问,应该是servlet或javabean才行。 二.解决...

fighting_DW 5406

YOLOv11改进策略【卷积层】| ICCV-2023 引入Dynamic Snake Convolution动态蛇形卷积,改进C3k2

基于拓扑几何约束的动态蛇卷积用于管状结构分割DSConv(Dynamic Snake Convolution,动态蛇形卷积)模块的设计主要是为了更好地处理管状结构的分割任务,解决传统卷积在处理细管状结构时的不足。

Limiiiing的博客 1560

Java:WEB-INF目录下JSP页面的访问方法

Web项目中WEB-INF目录下JSP页面的访问方法

chenyouchang的博客 3113

如何访问WEB-INF文件夹下的jsp文件

web项目中,为了安全,可能需要把jsp文件放在WEB-INF目录下,这样如果我们的页面中出现超链接a标签或者js的location.href去直接转向到WEB-INF下的某一个jsp页面,那么就会引用不到,因为这样的请求方式是客户端的请求,而WEB-INF页面只对服务端开放,对客户端是不可见的,那么该如何访问呢? 原先如果放在WebContent下的页面index.jsp,我们直接在w...

念念不忘,必有回响 1万+

WEB-INF下的jsp不能访问的问题

放在Tomcat WEB-INF目录下的文件 image.png 当浏览器访问Result.jsp时,无法正常显示,通过了解才得知,原来Tomcat WEB-INF目录下的文件,浏览器一般无法直接方法,只能通过重定向后才可以访问,如果需要直接访问,可以放在和WEB-INF同级目录下。 通过网上查阅资料得出 WEB-INF目录下的文件不能直接访问,需要映射,jsp放在那里也不能访问...

w522301629的博客 2万+

JspJsp放到WEB-INF后以保护Jsp源代码

把那些限制访问的资源(比如说jsp源代码放到Web应用的WEB-INF目录下,对于/web-INF/及其子目录,不允许直接的公共访问,所以就可以起到保护这些代码未经授权的访问和窥视,更好的保护源代码。     通常JSP开发人员会把他们的页面文件存放在Web应用相应的子目录下。这种方法的问题是这些页面文件容易被偷看到源代码,或被直接调用。某些场合下这可能不是个大问题,可是在特定情形中却可能构

每天进步一点点 时间会让你成为巨人 1775

WEB-INF目录下JSP页面的访问方法

WEB-INF目录下的JSP页面是不能直接通过浏览器访问到的,必须通过控制的转发才能访问到页面。浏览器访问http://localhost:8080/index.jsp,不能访问到。浏览器访问http://localhost:8080/index,可以访问到。访问WEB-INF目录下的JSP页面。2.1 创建一个控制器。2.2 通过控制器访问。1. 浏览器直接访问。2. 通过控制器访问。

atarik@163.com 1782

如何访问WEB-INF目录中的JSP文件

如何访问WEB-INF目录中的JSP文件 出于安全的目的,在WEB-INF下面的文件是受保护的,如果我们直接在浏览器上输入地址去打开文件那是打开不了的。所以正常情况下img、css、js文件夹通常都不会放在WEB-INF下面的。 ** 不过可以通过一些方法来进入WEB-INF下的JSP文件. 方法1: 要访问WEB-INF下的JSP文件,需要在项目的web.xml文件中去配置一个和servlet格...

weixin_43992042的博客 5151

访问WEB-INF目录中的JSP文件

转自:http://blog.csdn.net/eidolon8/article/details/7050114 方法1: 本来WEB-INF中的jsp就是无法通过地址栏访问的.所以安全.如果说你要访问这个文件夹中的jsp文件需要在项目的web.xml文件中去配置servlet格式差不多的配置就ok了。如下: runtain /WEB-INF/INF.jsp runtain /XXX

海涛的博客 5万+

JAVAEE项目里,WEB-INF下的jsp文件不能直接访问

在javaee项目里,我们有时不会将jsp直接放在webapps下,而是在web-inf下创建一个文件夹专门放置jsp文件,而我们如果在调试jsp文件时,直接访问了jsp文件就会出现404的错误找不到资源。这是因为web-inf下的jsp是不能直接访问的,这样也能保障安全。 所以访问web-inf下的jsp文件时最好使用跳转访问。比如在index.html文件里添加一句<jsp:forward page="/***"></jsp:forward> 这样运行了项目,就可以通过跳转,访问

weixin_48184289的博客 1399

为什么在WEB-INF目录中的jsp不能直接访问

将所有jsp文件拷贝到WEB-INF目录下,不能直接通过路径访问 因为WEB-INF目录中的内容不能直接访问,但能转发过来。 WEB-INF目录下的JSP页面不能通过地址栏直接访问,WEB-INF目录下的文件不能直接被访问主要是出于安全考虑,当然如果不用考虑安全性的话,你可以直接把JSP页面放到WEB-INF外的webapp目录下,这样也可以直接访问。 ...

qq_44332021的博客 1338

WEB-INF安全目录下资源不能直接访问的问题

转载一: 因为web-inf下,应用服务器把它指为禁访目录,即直接在浏览器里是不能访问到的. 但是可以让servlet进行访问,如web-inf下有a.jsp则可以用request.getrequestdispatcher("/web-inf/a.jsp").forward(request,response);   补充一下,如果你想访问web-inf下的htm文件的话,用req

qq_17852961的博客 6533

WEB-INF 有关的目录路径问题总结

  1、资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了.   2、页面放在WEB-INF目录下面,这样可以限制访问,提高安全性.如JSP,html   3、只能用转向方式来访问WEB-INF目录下的JSP,不用采用重定向的方式请求该目录里面的任何资源.如图:index.jsp &gt;&gt;  main.jsp   4、W...

x306975056的专栏 290

喇叭天线对应的指标增益数据、初始和优化后的CST文件、以及代码输出的结构表

CST版本为2021

SAE ARP 4761A-2023 英文版.pdf(692页完整版).zip

SAE ARP 4761A-2023 英文版.pdf(692页完整版).zip

上一篇: jsp实现文件下载与中文文件名乱码问题解决
下一篇: as/400学习
feigme
博客等级 码龄20年 8粉丝 13原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值