2016-04-13 15 views
1

私はjspを使って動的なWebサイトを作っています。JSP/Java/HTML | JSP out.println();メソッドのときにコンソールに出力する

今私の問題:<%を使用して、私のJavaを書くと、すべて正常に動作します。

<% 
    out.println("<p>test</p>"); 
%> 

しかし、ときに私はこのように<%!を使用します。

<%! 
    private void test() { 
    out.println("<p>test</p>"); 
} 
%> 

予想通り私の出力は私のコードエディタコンソールではなく、私のウェブサイトに表示されます。

私は<%@ page import="static java.lang.System.out" %>を使用しました。これは正しいインポートですか、別の場所の問題ですか?

さらに詳しい情報が必要な場合は、ご意見ください。 :)

+0

何が正しくありません。あなたはスクリプレットの使用を避けるべきです。常にJSTLを使用する – SpringLearner

+0

"java.lang"から何かをインポートすることは、デフォルトで既にインポートされているので、非常に奇妙です。静的インポートはシェルドームも使用されています(私はJUnit用に生成されたコードでのみ参照しています)。どこでも 'System.out.println'を使うだけです。とにかく、実際にあなたが何をしているのか分からないので、JSPに関するマニュアル/チュートリアルを読むことを真剣に考えてください。 – SJuan76

+0

@SpringLearner私は学校で学んでいます。しかし、私はJSTLに夢中になるだろう。 – WetWer

答えて

4

おそらくおわかりのように、JSPはJava EEコンテナによってオンザフライでサーブレットに変わります。 <% ... %>ブロックでは、outは、生成されたサーブレット内に生成された_jspService(または同様の)メソッドのローカル変数です。ページの出力に書き込むのはJspWriterです。 <%! ... %>ブロックで

、あなたは_jspService(または類似)メソッドを生成外だし、そうあなたの静的インポートは、あなたのout参照ページ出力が送信されるべき場所ではないである、System.outにあることを意味します。

あなたは<%! ... %>ブロックであなたのJSP内のメソッドを定義したい場合は、あなたがそれらにoutに合格する必要があります。そのJSPについて

<%! 
private void test(JspWriter out) throws IOException { 
    out.println("<p>test</p>"); 
} 
%> 

- >サーブレットの事を、私たちはこのJSPを持っていると言います:それは<%...%>ブロックと<%! ... %>ブロックを持っていることを

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Example</title> 
</head> 
<body> 
<% 
    out.println("The current date/time is " + new java.util.Date()); 
    this.test(out, "Hi, Mom!"); 
%> 
<%! 
    private void test(JspWriter out, String msg) throws java.io.IOException { 
     out.println(msg); 
    } 
%> 
</body> 
</html> 

注意。

Java EEコンテナでは、のようになります。のようになります。私たちのtest方法は終わったところに注意してください、と私たちの<%...%>ブロック内のコードは、(私たちの生のJSPテキスト/マークアップと一緒に)終わった場所:

package org.apache.jsp; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import javax.servlet.jsp.*; 

public final class test_jsp extends org.apache.jasper.runtime.HttpJspBase 
    implements org.apache.jasper.runtime.JspSourceDependent { 

    private void test(JspWriter out, String msg) throws java.io.IOException { 
     out.println(msg); 
    } 

    /* ...lots of setup stuff omitted... */ 

    public void _jspService(HttpServletRequest request, HttpServletResponse response) 
     throws java.io.IOException, ServletException { 

     PageContext pageContext = null; 
     HttpSession session = null; 
     ServletContext application = null; 
     ServletConfig config = null; 
     JspWriter out = null; 
     Object page = this; 
     JspWriter _jspx_out = null; 
     PageContext _jspx_page_context = null; 


     try { 
      response.setContentType("text/html"); 
      pageContext = _jspxFactory.getPageContext(this, request, response, 
         null, true, 8192, true); 
      _jspx_page_context = pageContext; 
      application = pageContext.getServletContext(); 
      config = pageContext.getServletConfig(); 
      session = pageContext.getSession(); 
      out = pageContext.getOut(); 
      _jspx_out = out; 

      out.write("<!doctype html>\n"); 
      out.write("<html>\n"); 
      out.write("<head>\n"); 
      out.write("<meta charset=\"utf-8\">\n"); 
      out.write("<title>Example</title>\n"); 
      out.write("</head>\n"); 
      out.write("<body>\n"); 

      out.println("The current date/time is " + new java.util.Date()); 
      this.test(out, "Hi, Mom!"); 

      out.write("\n"); 
      out.write("</body>\n"); 
      out.write("</html>\n"); 
     } catch (Throwable t) { 
      if (!(t instanceof SkipPageException)){ 
       out = _jspx_out; 
       if (out != null && out.getBufferSize() != 0) 
        try { out.clearBuffer(); } catch (java.io.IOException e) {} 
       if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); 
       else log(t.getMessage(), t); 
      } 
     } finally { 
      _jspxFactory.releasePageContext(_jspx_page_context); 
     } 
    } 
}