zoukankan      html  css  js  c++  java
  • 项目中遇到的问题——jsp:include

    昨晚记错了,项目中用的是这个<jsp:attribute>,不过没关系,都差不多!原理是传参数

     具体用法:

    假设有两个tag文件  aaa 和 bbb

    aaa有两个属性:name  age

    <aaa name="<%= name%>"><jsp:attribute name="age"><bbb xxxxxxxxx >xxxxxxxxxx /></jsp:attribute></aaa>

    这样aaa中两个属性就都有了,<jsp:attribute>主要作用就是动态传入属性,实现想要的功能

    页面引入另一个jsp时,通过在浏览器中 F12 查看,我们会发现两个jsp的代码合并到了一起,所以在这种情况下,jquery是可以共用的,相互传值也是不需要的,可以直接用

    --------------------分割线------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    今天工作过程中遇到了一个问题:有两个工程,就叫做 " I " 和 " M " 吧。项目 I 写了JSP的结构,样式,数据取得;项目 M 包含页面的跳转 页面的header部分由M加载出来,

    表信息通过<jsp:include>引出项目 I 的内容。

    可是!!我 I 部分的画面!就是加载不出来!!!QAQ 咋回事啊 我也很绝望啊!!!

    由于<jsp:include>中url是由各个取得的参数拼成的,我怀疑是项目 I 那里参数接收的有问题,或者项目 M 那个由参数拼成的url是不正确的(适用于运行环境,不适用于tomcat)。

    关于JSP引用其他JSP,我看到这篇帖子 https://blog.csdn.net/fn_2015/article/details/70311495 觉得这位带哥转载的得很棒,所以,我决定把内容愉快的搬运过来~

    在这里谢谢大家了( ̄︶ ̄)↗

    一个jsp页面引入另一个jsp页面的三种方式 及静态引入和动态引入的区别

    1.第一种:jstl  import 

     <c:import url="inlayingJsp.jsp"></c:import
    2. 第二种:jsp include指令

    include指令告诉容器:复制被包含文件汇总的所有内容,再把它粘贴到这个文件中。

    <%@ include file="inlayingJsp.jsp" %>

    3. 第三种:jsp include动作

    <jsp:include   page="inlayingJsp.jsp" flush="true"/>

     

    注意:(1)include指令在转换时插入“Header.jsp”的源代码,而<jsp:include>动作在运行时插入“Header.jsp"的响应。

                    <%@include为静态包含,<%@include不论包含的是txt文本还是jsp文件,被包含的页面都不会从新编译。

                    <%@include为静态包含,包含了几个JSP转译成servlet时就会有  几 个 class文件,如果在jsp1定义了变量i同时在jsp2也定义了变量i那么你编译都会通不过的,

                     jsp容器会告诉你i重复定义了.
                    <jsp:include 为动态包含,<jsp:include 如包含jsp文件,这每次加载主页面的时候,被包含的页面都要重新编译。
                      就是说不管你包含了几个jsp页面转译成servlet时中有一个class文件

                     所以说对于<%@include要慎用!


                (2)使用jstl标签时,一定要在jsp文件头加入以下代码:<%@taglib prefix="c" uri="http://Java.sun.com/jsp/jstl/core"%>

    1、什么是静态导入?

    静态导入指的是,将一个外部文件嵌入到当前JSP文件中,同时解析这个页面的JSP语句,它会把目标页面的其他编译指令也包含进来。
    include的静态导入指令使用语法:

    <%@include file="relativeURLSpec"%>

    静态导入使用范例include1.jsp:

     1 <%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
     2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     3 <html xmlns="http://www.w3.org/1999/xhtml">
     4 <head>
     5 <title>静态include范例</title>
     6 </head>
     7 <body>
     8 <!--使用include编译指定导入页面-->
     9 <%@include file="error.jsp"%>
    10 </body>
    11 </html>

    其中error.jsp是一个简单的错误处理页面,代码如下:

     1 <%@ page contentType="text/html; charset=utf-8" language="java" isErrorPage="true" %>
     2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     3 <html xmlns="http://www.w3.org/1999/xhtml">
     4 <head>
     5 <title>错误提示页</title>
     6 </head>
     7 <body>
     8 这是一个错误处理页面</br>
     9 </body>
    10 </html>

    在tomcat下运行该静态include范例后,查看生成的servlet类可看到如下代码段

    (查看方式:windows下,找到tomcat安装目录下的work文件夹,进入Catalina文件夹下的localhost文件夹,找到当前项目所在的文件夹,找到org目录,进入其下的apache目录下的jsp文件夹,即可看到一个include1_jsp.java文件,这就是该include1.jsp对应生成的servlet类。ps:我是把这个测试页面放在webDemo下的,所以我的目录是apache-tomcat-7.0.47workCatalinalocalhostwebDemoorgapachejsp)

    从方框中即可看出静态导入是:包含页面在编译时将完全包含被包含页面的代码。需要指出的是,静态导入还会将被包含页面的编译指令也包含进来,如果两个页面的编译指令有冲突,那么页面就会出错。


    2、什么是动态导入

    动态导入是不会导入include页面的编译指令的,而是仅仅将被导入页面的body内容插入本页面。
    动态导入的语法格式:

    <jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>

    或者

    1 <jsp:include page="{relativeURL|<%=expression%>}" flush="true">
    2 <jsp:param name="parameterName" value="parameterValue"/>
    3 </jsp:include>

    flush属性用语指定输出缓存是否转移到被导入文件中。如果指定为true,则包含在被导入文件中,如果指定为false,则包含在原文件中,对于JSP1.1旧版本,只能设置为false。
    对于第二种语法格式,则可在被导入页面中加入额外的请求参数。

    动态导入范例:

    我们将上面的include1.jsp代码静态导入改为动态导入

     1 <%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
     2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     3 <html xmlns="http://www.w3.org/1999/xhtml">
     4 <head>
     5 <title>静态include范例</title>
     6 </head>
     7 <body>
     8 <!--使用include编译指定导入页面-->
     9 <jsp:include page="error.jsp" />
    10 </body>
    11 </html>

    编译后查看生成的servlet代码,可以看到如下段:

    红色方框中代码显示出,动态导入只是使用了一个include方法来插入目标页面的内容,而不是将目标页面完全融入到本页面中。
    归纳起来,静态导入和动态导入有如下三点区别:

    1、静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。
    2、静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。
    3、动态导入还可以增加额外的参数。即如下代码方式:

    1 <jsp:include page="{relativeURL|<%=expression%>}" flush="true">
    2 <jsp:param name="parameterName" value="parameterValue"/>
    3 </jsp:include>

     看完这些我大概是懂丶引入jsp是怎么回事了,希望也能够帮到大家!

     希望明天我能够解决好这个问题,我们下期再见!

     

  • 相关阅读:
    6种GET和POST请求发送方法
    微信公众平台开发框架推荐
    PHPExcel内存泄漏问题
    7个鲜为人知却超实用的PHP函数
    java调用C程序
    php AES加密 对应Java SHA1PRNG方式加密
    yii插入数据库防并发
    PHPUnit测试
    yii2源码学习笔记(二十)
    yii2源码学习笔记(十九)
  • 原文地址:https://www.cnblogs.com/guojia314/p/9595382.html
Copyright © 2011-2022 走看看