以下のサーブレットを例として、トレース情報の見方を説明します。
■例:HelloServletのソースコード
1: import javax.servlet.http.*;
2: import javax.servlet.*;
3: import java.io.*;
4: public class HelloServlet extends HttpServlet{
5: public void doGet(HttpServletRequest request, HttpServletResponse response)
6: throws ServletException, IOException {
7: response.setContentType("text/html");
8: PrintWriter out = response.getWriter();
9: out.println("<html>");
10: out.println("<head>");
・・・(略)・・・
11: }
12: }■例:トレース情報
上記サーブレットを呼び出した場合、以下のトレース情報が出力されます。日時、スレッド名および16進出力は、省略しています。また、表示の関係上、改行している箇所があるため、実際の出力形式とは若干の違いがあります。
・・・(略)・・・
1: in, org.apache.catalina.connector.RequestFacade, <init>,
PARAM:(ISRequest):com.fujitsu.interstage.jservlet.catalina.connector.ISRequest@24d517
2: out, org.apache.catalina.connector.RequestFacade, <init>,
RET:void
・・・(略)・・・
3: in, org.apache.catalina.connector.ResponseFacade, <init>,
PARAM:(ISResponse):com.fujitsu.interstage.jservlet.catalina.connector.ISResponse@2219b4
4: out, org.apache.catalina.connector.ResponseFacade, <init>, RET:void
・・・(略)・・・
5: in, HelloServlet, doGet,
PARAM:(RequestFacade):org.apache.catalina.connector.RequestFacade@c58af4:
(ResponseFacade):org.apache.catalina.connector.ResponseFacade@125b750
6: in, org.apache.catalina.connector.ResponseFacade, setContentType,
PARAM:(String):text/html
7: in, org.apache.catalina.connector.ResponseFacade, isCommitted, PARAM:
8: out, org.apache.catalina.connector.ResponseFacade, isCommitted,
RET:(boolean):false
9: out, org.apache.catalina.connector.ResponseFacade, setContentType, RET:void
10: in, org.apache.catalina.connector.ResponseFacade, getWriter, PARAM:
11: in, org.apache.catalina.connector.ResponseFacade, isFinished, PARAM:
12: out, org.apache.catalina.connector.ResponseFacade, isFinished,
RET:(boolean):false
13: out, org.apache.catalina.connector.ResponseFacade, getWriter,
RET:(CoyoteWriter):org.apache.catalina.connector.CoyoteWriter@1262667
14: in, org.apache.catalina.connector.CoyoteWriter, println, PARAM:(String):<html>
15: in, org.apache.catalina.connector.CoyoteWriter, print, PARAM:(String):<html>
16: in, org.apache.catalina.connector.CoyoteWriter, write, PARAM:(String):<html>
・・・(略)・・・
17: out, HelloServlet, doGet, RET:void
18: in, org.apache.catalina.connector.RequestFacade, getAttribute,
PARAM:(String):javax.servlet.include.context_path
19: out, org.apache.catalina.connector.RequestFacade, getAttribute, RET:(Object):[]
・・・(略)・・・
20: in, org.apache.catalina.connector.RequestFacade, getServletPath, PARAM:
21: out, org.apache.catalina.connector.RequestFacade, getServletPath,
RET:(String):/HelloServlet
22: in, org.apache.catalina.core.StandardWrapperFacade, getServletName, PARAM:
23: out, org.apache.catalina.core.StandardWrapperFacade, getServletName,
RET:(String):HelloServlet
24: in, org.apache.catalina.connector.CoyoteWriter, recycle, PARAM:
25: out, org.apache.catalina.connector.CoyoteWriter, recycle, RET:voiddoGetメソッドの呼び出しと復帰 5,17行目
“in”はメソッドの呼び出し、“out”は復帰を表しています。
上の例では正常に処理が行われているため、doGetメソッドは“in”と“out”が対になって出力されています。
引数および戻り値の情報もメソッドトレース機能の書式に従って出力されます。
リクエスト前処理 1~4行目
リクエストに先立ち、HttpServletRequest、HttpServletResponseの実装クラスが作成されていることがわかります。
HelloServletがinitメソッドを実装している場合は、初回呼び出し時に、リクエスト前処理に先立ちinitメソッドの呼び出しが出力されます。
サービス(doGetメソッド) 5~17行目
各メソッドとも、正常に復帰しているため、“in”と“out”が対になって出力されています。
トレース情報は以下のように出力されます。
例:トレース情報
6~9行目 HelloServletクラス、doGetメソッドからHttpServletResponseのsetContentTypeメソッドを呼び出しています。
setContentTypeメソッドは、内部的にisCommittedメソッドを呼び出した後復帰していることがわかります。
in, org.apache.catalina.connector.ResponseFacade, setContentType, PARAM:(String):text/html HEX=0074 0065 0078 0074 002f 0068 0074 006d 006c in, org.apache.catalina.connector.ResponseFacade, isCommitted, PARAM: out, org.apache.catalina.connector.ResponseFacade, isCommitted, RET:(boolean):false out, org.apache.catalina.connector.ResponseFacade, setContentType, RET:void
setContentTypeメソッド引数のisCommittedメソッドの戻り値等がそれぞれ出力されています。
リクエスト後処理 18~25行目
doGetメソッドが復帰した後で、各種後処理が行われていることがわかります。
HelloServletがdestroyメソッドを実装している場合は、IJServer停止時にこのメソッドが呼び出されます。