zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    内存泄漏 Memory Leaks 内存优化 MD
    Handler Thread 内部类引起内存泄露分析
    为什么不取消注册BroadcastReceiver会导致内存泄漏
    WebChromeClient 简介 API 案例
    WebViewClient 简介 API 案例
    java.net.URI 简介 文档 API
    android.net.Uri 简介 API
    RV 多样式 MultiType 聊天界面 消息类型 MD
    JS函数声明与定义,作用域,函数声明与表达式的区别
    CSS中table tr:nth-child(even)改变tr背景颜色: IE7,8无效
  • 原文地址:https://www.cnblogs.com/tfxz/p/12621536.html
Copyright © 2011-2022 走看看