を選択します<br>違います

9428 ワード

両者の最も重要な違いは、JSPコマンド「%@include file=“%”」で、導入されたJSPと元JSPを融合させたもので、この融合過程は翻訳段階で行われます.
    なぜ翻訳段階が必要ですか?Jspページを閲覧するクライアントはJava仮想マシンをインストールする必要がないので、クライアントマシンはJSPを読むことができません.読めるのはHTML、JavaScriptだけです.このようにServlet Engine(例えば、Tomcat)はすべてのJSP要素を処理する必要がある.これは、jspページをServletに変換し、このServletを実行することによって行われる.サーバーはjsp容器が必要です.jspページを処理します.jsp容器は通常Servletとして実装され、このservletは構成されており、jspページに対するすべての要求を処理することができる.
    JSP容器はjspページをservletに変換し、このservletをコンパイルする.この二つのステップは翻訳段階を構成しています.
    jsp翻訳後のservlet出力の内容はクライアントブラウザで認識できるもので、HTML、JavaScriptなど、servletはJspWriterオブジェクトを使ってこれらのHTML、JavaScriptを出力するものです.jspコンパイルされたservletコードを見てみると、Strutsの「logic:iterator」タグなど、面白いものが発見されます.もし私たちが<bean:write>を<logic:iterator>の内部に書いたら、doの内部に類似の現象が現れます.jspxmeth_bean_write_2(_jspx thguiterate u 0,_jspx plage ucontext)の方法で呼び出します.これらはすべてを説明します.
    これにより、jspページはincludeコマンド要素(<%@include file=“%])で指定されたページの実際の内容(つまりコードセグメント)を導入したjspページに加え、一つのファイルを合成してjspコンテナにservletに変換することが分かります.この時は臨時クラスファイルとservletソースファイルが作成されます.また、動作要素()は、要求処理段階に導入され、JSP容器から2つの一時的なclassファイルと2つのservlet元ファイルが生成されます.導入されたのはservletの出力結果であり、JspWriterオブジェクトの出力結果であり、jspのソースコードではない.
    例を挙げます
    main.jsp
<%@ page language="java" pageEncoding="GBK"%>  
  
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>  
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>  
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>  
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>  
  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html:html lang="true">  
  <head>  
    <html:base />  
      
    <title>index.jsp</title>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />  
    <meta http-equiv="pragma" content="no-cache">  
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0">      
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    <meta http-equiv="description" content="This is my page">  
    <!-- 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
    -->  
  
  </head>  
    
  <body>  
    <!-- Header Page Information -->  
<%-- <%@ include file="include/head.jsp"%>--%>  
    <jsp:include page="include/head.jsp"></jsp:include>  
    <!-- Nav Bar -->  
<%-- <%@ include file="include/menubar.jsp"%>--%>  
    <jsp:include page="include/menubar.jsp"></jsp:include>  
        <br><br><br>  
        <br><br><br>  
        <br><br><br>  
        <br><br><br>  
        <br><br><br>  
        <br><br><br>  
        <br><br><br>  
        <br><br><br>  
        <br><br><br>  
        <br><br><br>  
<%--        <%@ include file="include/copyright.jsp"%>--%>  
<%--        <jsp:include page="/includeSample_copyright.do"></jsp:include>--%>  
<%-- <jsp:include flush="true" page="include/copyright.jsp"></jsp:include>--%>  
  </body>  
</html:html>
<%@ page language="java" pageEncoding="GBK"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html:html>  <head>    <html:base />        <title>index.jsp</title><meta http-equiv="Content-Type" content="text/html; charset=GBK" /><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->  </head>    <body>    <!-- Header Page Information --><%--<%@ include file="include/head.jsp"%>--%><jsp:include page="include/head.jsp"></jsp:include><!-- Nav Bar --><%--<%@ include file="include/menubar.jsp"%>--%><jsp:include page="include/menubar.jsp"></jsp:include>        <br><br><br>        <br><br><br>        <br><br><br>        <br><br><br>        <br><br><br>        <br><br><br>        <br><br><br>        <br><br><br>        <br><br><br>        <br><br><br><%--        <%@ include file="include/copyright.jsp"%>--%><%--        <jsp:include page="/includeSample_copyright.do"></jsp:include>--%><%--<jsp:include flush="true" page="include/copyright.jsp"></jsp:include>--%>  </body></html:html>
 head.jsp
<%--<%@ page language="java" pageEncoding="GBK"%>--%>  
  
<%--<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>--%>  
<%--<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>--%>  
<%--<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>--%>  
  
<table>  
    <tr>  
        <td><bean:message key="copyright.inc.copyright"/>  
                         Head   Head  Head  Head  Head  Head  Head</td>  
    </tr>  
</table>
<%--<%@ page language="java" pageEncoding="GBK"%>--%><%--<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>--%><%--<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>--%><%--<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>--%><table><tr>    <td><bean:message key="copyright.inc.copyright"/>                         Head   Head  Head  Head  Head  Head  Head</td>    </tr></table>
 
 head.jspを例にとって:
 1、もし私が「%@include file=「include/head.jsp」%で導入したら、注意してください.head.jspは私が注釈した文字セットとStrutsタグの導入によって、注釈を開けたらどうなりますか?500の異常を投げることができます./main.jsp(44,4)/include/head.jsp(3,56)Attempt to redefine the prefix)to/WEB-INF/struts-html.tld、when it was already defined ashttp://struts.apache.org/tags-html in the current scope.この時翻訳段階ではmain.jspとhead.jspはそのままの共同で一つのjspと呼ばれていますので、Tomcatの作業目録はservlet類のファイルしかありません.
          \work\Catalina\local host\Include Action\org\apphe\jsp\main_jsp.java
           \work\Catalina\local host\Include Action\org\apphe\jsp\main_jsp.classは、同じStrutsタグを一つのクラスのファイルに二回導入してみて、コンパイルする時はもちろん例外を投げました.
2、もし私が 
<strong>  :  
2004-2006        
????Head ????Head????Head????Head????Head????Head????Head   
????MenuBar       
    ...  
</strong>
  :2004-2006      ????Head ????Head????Head????Head????Head????Head????Head ????MenuBar         ...
   なぜですか?include動作要素は要求段階で導入されたので、導入されたのはhead.jspだけです.servletファイルに翻訳されました.jspServiceという方法の中でJspWriterというオブジェクトの出力(out.write(メソッドの出力フロー).この出力の実行はhead.jspがmain.jspに導入される前に行われたので、main.jspページの文字セットはもちろんhead.jspには機能しませんでした.
    もしStrutsタグ部分もコメントしたら?この行はStrutsタグから出力されていますので、出力されていない理由は文字セットと同じです.
   最後にTomcat作業リストを見ると、二つのServletがあります.
       一つ目:\work\Catalina\local host\Include Action\org\apphe\jsp\main_jsp.java
                   \work\Catalina\local host\Include Action\org\apphe\jsp\main_jsp.class
       二つ目:\work\Catalina\local host\Include Action\org\apache\jsp\include\head_jsp.java
                  \work\Catalina\local host\Include Action\org\apache\jsp\include\head_jsp.class   また、拡張子を修正する方法により、導入されたファイルがどれかを表したい場合、例えば、head.jspをhead.incと改名すると、JSP容器は*.incを識別できない.だから、head.incを翻訳できないので、この時は「%@include file="head.inc"%の方法で一つのファイルを導入するしかないです.
 
二つのincludeの用法の違いをまとめます.主に二つの方面の違いがあります. 一、実行時間: <%@ include file="relativeURI"%は翻訳段階で実行されます. 静的テキスト()を導入し、JSPページがservletに変換される前に和睦する.