jspに関する知識


一、jspの概要
  jspは特殊なservletであり、動的なウェブページ技術標準であり、従来のhtmlページにJavaプログラムを挿入し、サーバ側で実行することができるが、最終的にはHTMLページを返す.jspは最終的にプログラムで.javaファイルを生成し、このJavaではjspがJspServletに継承されていることがわかり、JSPservletはHttpServletに継承されている.
  Jspページの目的は,フロントエンドディスプレイとバックエンドロジックservletを分離することであるため,jspでJavaコードを書くことは一般的に推奨されない.jspは実行全体の過程で、ユーザーがブラウザ要求を通じてサーバーに到着し、サーバーがjspエンジン(Javaプログラム)を呼び出し、jspエンジンはjspをservetに翻訳するので、初めてこのjspにアクセスするときは少し遅くなり、その後、jspエンジンがこのjspに変化がなければ、以前に生成したservletを直接呼び出す.
二、jspにおけるJavaスクリプトの書き方
1、Javaスクリプト
Java文
%>
  この中の文は、servletに訳すとそのまま入れられ、servletのserviceメソッドでは、この中でメソッドを定義することはできません.注意:複数のスクリプトが一緒に完全であることを保証すれば、スクリプトに不完全なものを使用できます.
2、宣言要素
宣言
%>
      宣言では、サービスメソッドの外に置かれた変数、メソッドを定義できます.
3、式
     式では「;エンディングの.式は簡略化されたout.println文です.
三、jsp指令
     jsp命令はJSPエンジンのために設計されており、直接出力は生成されませんが、jspエンジンにjspページの他の処理手順を伝えるために使用できます.
JSP 2.0の命令は全部で3種類あります:page、include、taglib、その文法フォーマットは一般的に
1、page指令
     その役割は主に指定ページの各種実行に用いられ、よく使われる実行は以下の通りである.
[language="java"]言語
[extends="package.class"]
[import="{package.class|package.*},...]ガイドパッケージ
[session="true | false"]
[buffer="none | 8kb | sizekb"]
[autoFlush="true | false"]
[isThreadSafe="true | false"]
[info="text"]
[errorPage="relative_url"]
[isErrorPage="true | false"]
[contentType="mimeType [ ;charset=characterSet ]"|"text/html ; charset=ISO-8859-1"]
[pageEncoding="characterSet|ISO-8859-1"//コードセットの指定
[isELIgnored="true | false"]
%>
      複数のクラスまたはパケットは、pageコマンドのimportプロパティに導入できます.各パケットまたはクラス間でカンマ(,)で区切られます.例:
      Page設定エラーページは、もちろんweb.xmlでグローバルなエラーページを指定することもできます.errorPageプロパティの設定値は、サイトのルートディレクトリではなく、「/」で始まる現在のアプリケーションのルートディレクトリを表す相対パスを使用する必要があります.
      Web.xmlファイルで、Webアプリケーション全体を設定するエラーページを使用します.下に3つのサブ要素があります.
エラーのステータスコードを指定
例外クラスの完全修飾名の指定
「/」で始まるエラーの処理ページのパスを指定します.
      質問:私は404、500ステータスコードページとerrorページを設定しましたが、404エラーは404ページにジャンプしましたが、500ステータスコードはerrorページにジャンプし、500ページにジャンプしていません.おかしいですね.今後研究している
     申し訳ありませんが、エラーが発生しました.システムの管理者に連絡してください.
    例外情報は次のとおりです.
2、include指令
     include命令は他のページを含むために使用され、静的で動的である2つの方法があります.
     静的には、この方法で導入されるファイルはjsp仕様に従う必要があり、拡張子にかかわらずjspエンジンはjspの仕様に従ってその内容を処理し、includeに関連するjspページは最終的に1つのservletに翻訳されるだけであるため、この2つのページの命令は衝突できない(pageEncodingとガイドパッケージを除く).
      動的含める:jspページが含まれている場合は、先に含める処理が行われ、jspページでない場合は@includeと同様に静的に含めるだけです.
     静的包含と動的包含の違いは何ですか?
静的包含はコンパイル期間に含まれ、2つのjspページファイルがあるが、生成されたservletは1つしかなく、動的包含は実行期間に行われ、各jspは1つのservletを生成し、効率的には静的包含が良い!
3、taglibコマンドはJSPページにJSTLjava標準ラベルライブラリやカスタムラベルなどのラベルライブラリをインポートするために使用されます.
四、JSP九大暗黙の対象
SPエンジンがJSP対応を呼び出しています_jspServiceletでは、Web開発に関連する9つのオブジェクトが転送または作成されます.jspServiceletが使用します.
NO
組み込みオブジェクト
を選択します.
1
pageContext
javax.servlet.jsp.PageContext
2
request
Javax.servlet.http.HttpServletRequest
3
response
javax.servlet.http.HttpServletResponse
4
session
Javax.servlet.http.HttpSession
5
application
Javax.servlet.ServletContext
6
config
Javax.servlet.ServletConfig
7
out
Javax.servlet.jsp.JspWriter
8
page
Java.lang.Object
9
exception
Java.lang.Throwable
Page暗黙オブジェクトの説明
       Pageオブジェクトはこのページ自体を表し、ページをオブジェクトと見なし、ほとんどあまり使いません.
out暗黙的オブジェクト
      outオブジェクトはブラウザにテキスト情報を送信するために使用され、outオブジェクトはpageContextを呼び出すgetOutメソッドとresponseのgetPrintWriterメソッドが返すPrintWriterオブジェクトと非常に類似しており、outオブジェクトはJspWriterタイプであり、キャッシュ機能付きprintWriterに相当し、実際にoutにコンテンツが書き込まれていても、サーブレットエンジンのキャッシュ領域に書き込むには、次のいずれかを満たす必要があります.
  • pageのbuffer属性を設定outのキャッシュ機能を閉じる
  • outのバッファは
  • でいっぱいです
  • リフレッシュバッファ
  • jspページ全体終了
  •         out.write("hahahahaha
    ");
    response.getWriter().write("wowowowowowo
    ");
    %>



    从效果上面已经可以看出来,JSPWriter对象中带有的缓存效果了。

    注意:记住不要同时使用outresponse.getWriter()输出数据,原因上面已经说的很清楚了,最好是只使用out对象来输出数据。

    pageContext隐式对象

    pageContent对象是九大隐式对象中最重要的一个对象了,代表了JSP页面的运行环境,这个对象不仅封装了其他8大隐式对象的引用,自身也是一个域对象,可用于存放数据,它的生命周期就是这个jsp页面的生命周期,执行的时候上来就会创建pageContext对象,但是jsp执行完了就会死亡。这个对象还封装了web开发中经常涉及的一些常用操作,例如引入跳转其它资源,检索其它对象的属性。

    通过pageContext获取其它隐式对象

    getException方法返回exception隐式对象。

    getPage方法返回page隐式对象。

    getRequest方法返回request隐式对象。

    getResponse方法返回response隐式对象。

    getServletConfig方法返回config隐式对象。

    getServletContext方法返回application隐式对象。

    getSession方法返回session隐式对象。

    getOut方法返回out隐式对象。

    pageContext封装其它8大内置对象的意义。
    思考:如果在编程过程中,把pageContext对象传递给一个普通java对象,那么这个java对象将具有什么功能?
    答:如果在编程过程中,把pageContext对象传递给一个普通java对象,那么这个java对象将可以获取8大隐式对象,此时这个java对象就可以和浏览器交互了,此时这个java对象就成为了一个动态web资源了,这就是pageContext封装其它8大内置对象的意义。把pageContext传递给谁,谁就能成为一个动态web资源。
    思考:那么什么情况下需要把pageContext传递给另外一个java类呢,什么情况下需要使用这种技术呢
    答:在比较正规的开发中,jsp页面是不允许出现java代码的(jsp页面里面是不能出现一行java代码的,在软件开发里面,你要想你这个jsp是一个合格、良好的jsp的话,jsp页面里面是不准出现一行java代码的),如果jsp页面出现了java代码,那么就应该想办法把java代码移除掉。我们可以开发一个自定义标签来移除jsp页面上的java代码,首先围绕自定义标签写一个java类,jsp引擎在执行自定义标签的时候就会调用围绕自定义标签写的那个java类,在调用java类的时候就会把pageContext对象传递给这个java类,由于pageContext对象封装了对其它8大隐式对象的引用,因此在这个java类中就可以使用jsp页面中的8大隐式对象(requestresponseconfigapplicationexceptionSessionpageout)了,pageContext对象在jsp自定义标签开发中特别重要。

    pageContext作为域对象

    常用的方法

    void setAttribute(String name , Object value)

    ObjectgetAttribute(String name)

    voidremoveAttribute(String name)

    findAttribute(Stringname)---查找各个域中的属性

    findAttribute方法按照查找顺序”page→request→session→application”在这四个对象中去查找,只要找到了就返回属性值,如果四个对象都没有找到要查找的属性,则返回一个null

    EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从pagerequestsessionapplication四个域中查找相应的对象,找到则返回相应对象,找不到则返回””(注意,不是null,而是空字符串


    五、JSP标签说明

    JSP标签也称之为JspAction(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

    jsp的常用标签有以下三个:

    标签

    标签

    标签

    标签

    用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。其语法为:

    page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。

    flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。

    标签

    用于把请求转发给另外一个资源。其语法为:" />

    在实际开发中,我们要为网站设置首页,访问首页时,我们要将数据交给Servlet进行处理,但我们又不能在项目的web.xml文件中配置一个servlet

    解决方案是:在项目的web.xml中配置网站的首页,如下:

    	
        		/index.jsp
    	

    次にindex.jspでjsp:forwardラベルを使用してサーブレットにジャンプします.次のようにします.
    	
      	
    	  

    およびタグが のリソースに を または する 、タグを してこのリソースにパラメータを すことができる.

    	  1
    	
       		
    	
    2
    	
        		
    	
       1.jsp   
        2.jsp">
            
            
        
      
        

    IncludeTagTest2.jsp

    1.jsp

    JSP

    JSPpagerequestsessionapplication

    , , JSP ? , request.setAttribute() request.setParameter() , 、 ,session.setAttribute()application SerlvetContextsetAttribute()page pageContextJSP

    page

    request: , , , A B

    session: , websession cookie 。 , ,cookiecookiesession

    application( ), 。 baiduwenku

    jsp ( )

    EL

    1、 (bean

    pageContextrequestsessionapplication。 , ””---

    ${user.name} ${user["name"]}${user.interest[0]},get

    2

    1. +-×/

    2. ><>=<= ==

    3. &&||

    4. empty : ,

    JSRL

    	
    1. if

      request.setAttribute("flag", true/false)  ,scope page,session,application

    1. choose if{}else{}else{}

    when 1test true , 。

    otherwise 0 1 。 。

        

        

        

        

        

        

      

    3)forEach , 。 , pageContextvar

            //css row1row2 class

            

    ${u.name}

            

    ${u.gender}

            

    ${u.age}

            

    ${s.index}

            

    ${s.count}

               

        

    1JSP

    JSP servletservlet htmlJSPJSP htmljava

    2JSP

    (java )( )(JSP java )

    3JSP

    pageconfigapplictionrequestresponsesessionoutexceptionpageContext

    4servlet

    page jsp servletservletthis

    config-- Servlet servletConfig

    application-- Servlet ServletContext

    request  --Servlet request

    response  --Servlet response

    session  --Servlet session    

    out  -- JspWriter

    exception  --

    pageContext  -- jspjsp ) :PageContext

    pageContext , , ~

    5JSP

     pagerequestsessionapplication

    page pageContext

    6JSP

    EL , ,

    jstl

    http://blog.csdn.net/yerenyuan_pku/article/details/52015924

    https://www.cnblogs.com/whgk/p/6427759.html