• jsp中include的两种用法


    感谢大佬:https://blog.csdn.net/weixin_37380784/article/details/80743857

    一、两种用法

    第一种:include指令(静态包含):通过file属性来指定被包含的页面,当JSP转换成Servlet时引入指定文件,一般不需要写头

    <%@ pagecontentType="text/html;charset=GB2312" language="java"errorPage=""%>
    <%@ include file="head.jsp"%>
    <%@ include file="body.jsp"%>
    <%@ include file="tail.jsp"%>
    

    第二种:第二种:<jsp:include>动作元素(动态包含):通过page属性来指定被包含的页面,当JSP页面被请求时引入指定文件,需要写头

    <%@ page contentType="text/html; charset=GB2312"language="java" errorPage=""%>
    <jsp:include page="head.jsp"  flush="true"/>
    <jsp:include page="body.jsp"  flush="true"/>
    <jsp:include page="tail.jsp"  flush="true"/>
    

    flush为布尔属性,定义在包含资源前是否刷新缓存区。
    注意:<jsp:include>动作通常是包含那些经常改动的文件,因为被包含的文件改动不会影响到包含文件,因此不需要对包含文件进行重新编译

    二、用法区别

    (1)引入内容的不同;执行时间上区别

    include指令,(静态包含)被包含的文件被原封不动的插入到包含页面中使用该指令的位置,然后JSP编译器再对这个合成的文件进行编译,最终编译后的文件只有一个。 是在翻译阶段执行

    <jsp:include> (动态包含)包含文件时,当该动作标识执行后,JSP程序会将请求转发到(注意不是重定向)被包含页面,并将执行结果输出到浏览器中,然后返回页面继续执行后面的代码,以为web容器执行的两个文件,所以JSP编译器会分别对这两个文件进行编译。 在请求处理阶段执行.

    三、如何使include页面携带入参

    jsp:include动作元素可以很方便的用jsp:param来向所包含页传递参数,方法如下:

    <%@ page contentType="text/html; charset=GB2312"language="java" errorPage=""%>
    <jsp:include page="head.jsp"/>
    <jsp:includepage="body.jsp">
    <jsp:param name="uid"value="username"/>
    <jsp:param name="pwd"value="password"/>
    </jsp:include>
    <jsp:includepage="tail.jsp"/>
    

    四、 说明:

    翻译阶段:

    Jsp容器将jsp页面转化成servlet(称为jsp页面实现类—JSP Page implementation class),并编译这个servlet。这两步就组成了翻译阶段.

    请求处理阶段:

    Jsp容器除将jsp页面转化成servlet外,还调用jsp页面实现类以处理每个请求并产生应答.这个阶段我们就称为请求处理阶段.请求处理阶段仅执行类文档.

    五、示例

    服务器tomcat 引入页面 test.jsp 被引入页面 date.jsp

    //======date.jsp=====//
    
    <%@ page language=”java” contentType="text/html;charset=gb2312"%>
    
    <%
    
      java.util.Date date=new java.util.Date();
    
      String date_cn ="";
    
      String dateStr = "";
    
      switch(date.getDay())
    
      {
    
          case 0:date_cn ="日"; break;
    
          case 1:date_cn ="一"; break;
    
          case 2:date_cn ="二"; break;
    
          case 3:date_cn ="三"; break;
    
          case 4:date_cn ="四"; break;
    
          case 5:date_cn ="五"; break;
    
          case 6:date_cn ="六"; break;
    
      }
    
       dateStr = (1900+date.getYear()) + "年" + (date.getMonth()+1) + "月" + date.getDate() + "日(星期" + date_cn + ")";
    
    %>
    
      document.write("<%=dateStr%>");
    
    //======test.jsp============//
    
    <%@ page language=”java” contentType=”text/html;charset=gb2312”%>
    
    <html>
    
    <head>
    
    <title>include的两种用法</title>
    
    <jsp:include page=”date.jsp” flush=true/>
    
    <%--@ include file=”date.jsp” %-->
    
    <head>
    
    <body>
    
    <table><tr><td></td></tr></table>
    
    </body>
    
    </html>
    

    先用<%@ include file=”date.jsp” %> 引入date.jsp
    500服务器内部错误 –org.apache.jasper.JasperException: /date.jsp(0,0) Page directive: can’t have multiple occurrences of contentType

    提示:在date.jsp页面中不能指定多个contentType.

    是由于在翻译阶段,date.jsp文档的代码被原封不动地参加到了test.jsp页面从而合成一个文档。合成后的文档中就会雷同的:

    <%@ page language=”java” contentType=”text/html;charset=gb2312”%>
    

    解决的办法是把date.jsp文档中的这句删掉。刷新后再请求test.jsp页面,正常。

    查看tomcat下的临时文档,… omcatworkStandalonelocalhost est目录下会看到test_jsp.java和test_jsp.class两个文档,

    这里的java文档就是jsp容器将jsp转化成了servlet而得到的test_jsp.java这个文档。

    打开所产生的servlet文档(test_jsp.java)。在test.jsp文档被转化成servlet文档时,在输出的<head>中间新参加的内容就是date.jsp里面的代码.

    <%@ include file=”date.jsp”%>换成<jsp:include page=”dae.jsp” flush=”true”/>
    date.jsp 输出的日期中中文出现了乱码.

    原因:作include行动元素引入页面时,date.jsp就是作为一个单独的文档在执行后才被test.jsp文档运行时调用.

    由于date.jsp文档中无指定字符编码.所以出现了乱码.解决办法是在date.jsp文档中重新把刚才去掉的

     <%@ page language=”java” contentType=”text/html;charset=gb2312”%>
    

    再查看tomcat下的临时文档,test_jsp.java只增加了一句代码:

    JspRuntimeLibrary.include(request, response, “date.jsp”, out, true);

    它并无把date.jsp文档的代码引入到test.jsp.

    参考:
    https://www.jianshu.com/p/5e58a978aa63
    https://www.runoob.com/jsp/jsp-actions.html
    https://www.cnblogs.com/xumBlog/p/9779394.html
    http://c.biancheng.net/view/1440.html

  • 相关阅读:
    mysql主从之过滤复制
    mysql主从之主从延时监控及原因分析
    mysql误删搭建有主从的主库master binlog处理
    mysql 主从复制原理,概念,故障的检控/分析/处理
    mysql之主从复制搭建
    mysql表的物理存储结构及逻辑结构
    sql语句执行过程及mysql权限管理
    linux安装mysql5.7.30 及配置多实例
    mysql备份恢复之xtrabackup (XBK、Xbackup)
    mysql 备份之逻辑备份mysqldump, mysqlbinlog, 全备及参数说明
  • 原文地址:https://www.cnblogs.com/tfxz/p/12621536.html
Copyright © 2020-2023  润新知