美文网首页
初识 struts2-为什么我访问不了 WEB-INF 下面的

初识 struts2-为什么我访问不了 WEB-INF 下面的

作者: 喜欢薄荷绿 | 来源:发表于2017-04-01 08:59 被阅读0次

    当我刚开始学 struts2 框架时,我们在学校是有这个课的,我们用的教材是 《轻量级JavaEE 企业应用实战》,这是 李刚 编写的疯狂系列中一本,这本书很厚,我们老师也差不多是讲这上面的内容。当我照着书上的教程学时,遇到了一个问题,就是我访问不了 WEB-INF 下面的 jsp页面

    一般来说,如果不用 struts2 框架的话,本身是访问不了 WEB-INF 下面的所有的内容的,因为这个文件下面一般存放的是 一些配置文件和一些库文件,而这些文件是不能让用户直接访问到的。

    但是如果你使用了 struts2 框架的话,是可以将 jsp页面 存放在 WEB-INF这个目录下面的(struts 官方还推荐将页面放置于这个目录下面)。下面是我 struts.xml 配置文件中的代码:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <package name="default" extends="struts-default" namespace="/">
            <action name="*">
                <result name="success">/WEB-INF/{1}.jsp</result>
            </action>
        </package>
        
    </struts>
    

    下面上一张我的目录结构图:

    01.png

    大家可以看到我在 WEB-INF 的目录下面放了三个jsp文件,在 WebContent 的直接子目录下也放了同样的三个文件(这三个文件与WEB-INF 同级),但是其中的内容不同,以便我们到时知道自己访问的是哪一个文件。

    • 现在如果我在 WEB-INF 下的jsp 页面右键单击 run as的话,那么出来的页面是 404页面,显示这个页面是没有找到的。而且大家可以看到下面图中红线部分,这就是我们这个 jsp页面的访问路径。
    02.jpg
    • 而如果我们右键点击运行与 WEB-INF 同级的jsp页面,那么可以得到页面,如下图,可以看到图中红色部分的访问地址。
    03.jpg

    那么通过以上我们首先可以得出我们项目中的jsp页面在本地访问的地址是怎样的 http://localhost:8080/ + 项目名称 + jsp页面在WebContent 路径(不包括WebContent)


    再看一下我们在 struts.xml 中的配置:

    <action name="*">
                <result name="success">/WEB-INF/pages/loginForm.jsp</result>
    </action>
    

    之前我理解的是 <action name="*">可以拦截到所有的请求,从而跳转到 /WEB-INF/pages/loginForm.jsp, 通过实践才知道在 web.xml 中的

    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    

    以上才能拦截到所有的请求,然后拦截到所有请求以后,就交给一系列的拦截器开始处理,而<action name="*">能拦截的只是以.action结尾的jsp页面,比如 loginForm.action 页面,也能拦截到表单中action="loginForm" ,所以我猜测是不是表单就是以 XXX.action的方式被提交给后台的。


    但是如果你把浏览器中的地址改为 http://localhost:8080/login2/WEB-INF/pages/loginForm.action 那么你还是不能访问到 WEB-INF 下的页面,这是因为用户访问不了 WEB-INF 下的页面,但是我们如果在浏览器中随便输入,比如 http://localhost:8080/login2/XXX/loginForm.action,那么我们就可以访问到 WEB-INF 下的页面了,可以看出在程序内部对http://localhost:8080/login2/WEB-INF/这个目录进行了处理,如果用户的路径包含的话,就直接跳转到 404.


    以下是其中的一些知识点:

    1.web.xml当程序启动时,会自动读取其中的配置。
    2.WEB-INF下存放的是 一些配置文件和一些库文件(包)。
    3.struts.xmlstruts框架的核心配置文件,可以在其中配置一些拦截器等。
    4.用户是不能直接访问WEB-INF 下的文件的。
    5.用户可以通过配置 action来让框架将 WEB-INF的页面显示出来。

    相关文章

      网友评论

          本文标题:初识 struts2-为什么我访问不了 WEB-INF 下面的

          本文链接:https://www.haomeiwen.com/subject/mibvottx.html