Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 927a1532fb070c51449654bb68b5bde2 > files > 395

itext-manual-2.0.8-0.0.2mdv2008.1.i586.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>iText Tutorial: iText in a Web Application</title><meta name="Description" content="How-to use iText in Web Applications."><meta name="Keywords" content="PDF, JAVA, iText, Servlet, JSP, examples, Lowagie, Bruno"><link rel="stylesheet" href="./../../style.css" type="text/css"></head><body><a name="top" class="logo" href="http://www.lowagie.com/iText"><img src="http://www.lowagie.com/iText/images/logo.gif" border="0" alt="iText"></a><h1>Tutorial: iText by Example</h1><h2>iText in a Web Application</h2><div id="content"><div id="sidebar"><a class="toc" href="./../../index.html#general_webapp">
							Table of Contents
						</a><div align="Center" class="small">Best viewed with:<br><script type="text/javascript"><!--
google_ad_client = "pub-0340380473790570";
google_ad_width = 180;
google_ad_height = 60;
google_ad_format = "180x60_as_rimg";
google_cpa_choice = "CAAQyaj8zwEaCIwcWMzeycafKMu293M";
//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div><div class="sidetitle">Sections:</div><ul><li><a href="#inaction">In the book</a></li><li><a href="#MyJavaServer">MyJavaServer.com</a></li><li><a href="#HelloWorld">Hello World</a></li><li><a href="#timeout">Workaround for timeout problem</a></li><li><a href="#silentprint">Silent printing</a></li><li><a href="#JSP">Hello World JSP</a></li></ul><br><br><div class="sidetitle">Examples:</div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/HelloWorldServlet.java">HelloWorldServlet</a><br><div class="description">Generates a simple 'Hello World' file from a servlet (PDF, HTML or RTF)</div><div class="small">Extra jars needed:</div><ul><li>servlet.jar</li></ul><div class="small">Servlets/JSP:</div><ul><li><a href="http://blowagie.users.mcs2.netarray.com/servlet/HelloWorld?presentationtype=pdf">presentationtype=pdf</a></li><li><a href="http://blowagie.users.mcs2.netarray.com/servlet/HelloWorld?presentationtype=html">presentationtype=html</a></li><li><a href="http://blowagie.users.mcs2.netarray.com/servlet/HelloWorld?presentationtype=rtf">presentationtype=rtf</a></li></ul></div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/OutSimplePdf.java">OutSimplePdf</a><br><div class="description">Generates a simple PDF file from a servlet. The file is buffered and served with the extension .pdf</div><div class="small">Extra jars needed:</div><ul><li>servlet.jar</li></ul><div class="small">Servlets/JSP:</div><ul><li><a href="http://blowagie.users.mcs2.netarray.com/servlet/simple.pdf">without message</a></li><li><a href="http://blowagie.users.mcs2.netarray.com/servlet/simple.pdf?msg=Hello+World">with message</a></li></ul></div><div class="example"><a class="source" href="http://cvs.sourceforge.net/viewcvs.py/*checkout*/itext/www/tutorial/general/webapp/UserAgent.jsp">UserAgent.jsp</a><br><div class="description">Looks at the user-agent: if MSIE on Windows, embed the PDF; if another browser, redirect to the servlet</div><div class="small">Servlets/JSP:</div><ul><li><a href="http://blowagie.users.mcs2.netarray.com/UserAgent.jsp">try this with different browsers</a></li></ul></div><div class="example"><a class="source" href="http://cvs.sourceforge.net/viewcvs.py/*checkout*/itext/www/tutorial/general/webapp/GetPost.jsp">GetPost.jsp</a><br><div class="description">Shows that PDF generation works with GET and POST</div><div class="small">Servlets/JSP:</div><ul><li><a href="http://blowagie.users.mcs2.netarray.com/GetPost.jsp?method=GET">GET</a></li><li><a href="http://blowagie.users.mcs2.netarray.com/GetPost.jsp?method=POST">POST</a></li></ul></div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/ProgressServlet.java">ProgressServlet</a><br><div class="description">Shows how to avoid receiving a timeout in your browser if generating the PDF takes a really long time.</div><div class="small">Extra jars needed:</div><ul><li>servlet.jar</li></ul><div class="small">Servlets/JSP:</div><ul><li><a href="http://blowagie.users.mcs2.netarray.com/servlet/progress">show progress</a></li></ul></div><div class="example"><a class="source" href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/SilentPrintServlet.java">SilentPrintServlet</a><br><div class="description">Explains how to print silently via Servlet/Browser.</div><div class="small">Extra jars needed:</div><ul><li>servlet.jar</li></ul><div class="small">Servlets/JSP:</div><ul><li><a href="http://blowagie.users.mcs2.netarray.com/servlet/silentprint">try it!</a></li></ul></div><div class="example"><a class="source" href="http://cvs.sourceforge.net/viewcvs.py/*checkout*/itext/www/tutorial/general/webapp/HelloWorld.jsp">HelloWorld.jsp</a><br><div class="description">Generates a simple 'Hello World' file from a JSP page</div><div class="small">Servlets/JSP:</div><ul><li><a href="http://blowagie.users.mcs2.netarray.com/HelloWorld.jsp">HelloWorld</a></li></ul></div><div class="example"><div class="small">ANT script (all examples):</div><ul><li><a href="./../../general/webapp/build.xml">
					build.xml
				</a></li></ul></div></div><div id="main"><a name="inaction"></a><div class="title">In the book:</div><div xmlns="http://www.w3.org/1999/xhtml" xmlns:site="http://www.lowagie.com/iText/site">
		<p xmlns=""><a href="http://itext.ugent.be/itext-in-action/"><img src="http://itext.ugent.be/img/lowagie_3d.jpg" border="0" align="right"></a>
			The examples in this free online tutorial will help you getting started
			with iText. Note that most examples are two years old.
			Some of the examples may be obsolete. Also the theory that
			comes with the examples isn't always 100% accurate.
			If you want more recent examples or if you want to know more
			about the theoretical background of	PDF and iText, please consult the book
			<a href="http://itext.ugent.be/itext-in-action/">
				"iText in Action".
			</a>
			Note that the first and the third chapter of the book
			can be downloaded for free from <a href="http://www.manning.com/affiliate/idevaffiliate.php?id=223_53">http://manning.com/lowagie/</a></p><p>
			More specifically:
			<ul><li><a class="subtitle" href="http://itext.ugent.be/itext-in-action/chapter.php?chapter=17">
				Chapter 17:
			</a>iText in web applications</li></ul></p>
		</div><a class="top" href="#top">Go to top of the page</a><a name="MyJavaServer"></a><div class="title">MyJavaServer.com:</div><div xmlns="http://www.w3.org/1999/xhtml">
<a href="http://www.myjavaserver.com/"><img src="http://www.myjavaserver.com/images/main/mycgiserver_logo_1.gif" align="right"></a>
All the examples in this chapter are hosted at <a href="http://www.myjavaserver.com/">MyJavaServer.com</a>.
<a href="http://www.myjavaserver.com/">MyJavaServer.com</a> is a free J2EE
hosting service, that is part of the <a href="http://www.javalobby.org/">Javalobby</a> network of Java
developer sites. As a Java developer, you can get a free <a href="http://www.javalobby.org/">Javalobby</a> membership.
This entitles you to great offers like free books, downloads, a weekly
newsletter with the latest Java news and announcements, and access to
a personalized version of the biggest Javadocs collection on the web:
<a href="http://www.jdocs.com/">JDocs.com</a>. In addition, you can also
create your own free Java blog at the Java blogging site,
<a href="http://www.jroller.com">JRoller.com</a>.  
</div><a class="top" href="#top">Go to top of the page</a><a xmlns="" name="HelloWorld"></a><div class="title">Hello World:</div><div xmlns="http://www.w3.org/1999/xhtml">
In the general <a xmlns="" href="./../../general/index.html#5steps">Hello World</a> example,
we created a Hello World PDF file from a standalone Java program.
Now we are going to do exactly the same thing, but instead of sending the generated document to
a FileOutputStream, we are going to send everything to the OutputStream of a HttpServletResponse object:
<pre xmlns="http://www.w3.org/1999/xhtml" class="commandline">PdfWriter.getInstance(document, response.getOutputStream());</pre>
In the example, we accept a parameter <span class="commandline">presentationtype</span> that
can be one of the following values:<ul><li>pdf</li><li>html</li><li>rtf</li></ul>
Depending on the parameter you passed, you should see a PDF, HTML or RTF page in your browser.
<div id="example">
					Example: java
					<a xmlns="" href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/HelloWorldServlet.java">
						com.lowagie.examples.general.webapp.HelloWorldServlet</a><br>Generates a simple 'Hello World' file from a servlet (PDF, HTML or RTF)<br>Test this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/http://blowagie.users.mcs2.netarray.com/servlet/HelloWorld?presentationtype=pdf">presentationtype=pdf</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/http://blowagie.users.mcs2.netarray.com/servlet/HelloWorld?presentationtype=html">presentationtype=html</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/http://blowagie.users.mcs2.netarray.com/servlet/HelloWorld?presentationtype=rtf">presentationtype=rtf</a><br>
						Extra jars needed in your CLASSPATH:
						 servlet.jar<br></div>
Note that I didn't say 'you <i xmlns="http://www.w3.org/1999/xhtml">will</i> see a PDF, HTML or RTF page in your browser'.
It <i>should</i> work on all browsers, but we know it <i>won't</i> work on some.
For instance: we have set the ContentType to PDF:
<pre class="commandline">response.setContentType("application/pdf");</pre>
but some browsers look at the file extension, rather than the content-type
(don't ask me why). That's why we are going to
use something that looks like a pdf-file (with the correct extension) as url-pattern
in our <a href="web.xml">web.xml</a> file:
<pre class="commandline">&lt;servlet-mapping&gt;
  &lt;servlet-name&gt;OutSimplePdf&lt;/servlet-name&gt;
  &lt;url-pattern&gt;/servlet/simple.pdf&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;</pre>
Some browsers also need to know the content-length of the PDF in advance
(otherwise they just give you a blank page). The only way we can work around this,
is by buffering the complete file in a ByteArrayOutputStream.
That's a pity, because you <a xmlns="" href="./../../general/webapp/index.html#timeout">risk a timeout in the
browser-server communication</a> if you need to send really big or time-consuming PDFs.
<pre xmlns="http://www.w3.org/1999/xhtml" class="commandline">Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
document.open();
document.add(new Paragraph(msg));
document.close();
response.setContentType("application/pdf");
response.setContentLength(baos.size());
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();</pre>
Nicolas Guichard suggests to set some cache headers before writing the
PDF to the ServletOutputStream. These headers determine the rules by
which the page content may be cached by the client and intermediate proxies.
Using these values for the cache headers may help you to avoid some problems:
<pre class="commandline">
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
	"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
</pre>
So forget about the HelloWorldServlet and use this Servlet instead:
<div id="example">
					Example: java
					<a xmlns="" href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/OutSimplePdf.java">
						com.lowagie.examples.general.webapp.OutSimplePdf</a><br>Generates a simple PDF file from a servlet. The file is buffered and served with the extension .pdf<br>Test this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/http://blowagie.users.mcs2.netarray.com/servlet/simple.pdf">without message</a> <a href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/http://blowagie.users.mcs2.netarray.com/servlet/simple.pdf?msg=Hello+World">with message</a><br>
						Extra jars needed in your CLASSPATH:
						 servlet.jar<br></div>
Another annoying feature of some browsers is that they hit the server 2 or 3 times
with the same request if you want to serve them a dynamically generated binary file.
This type of behaviour of some browsers can be a real pain if you are updating a
database or keeping statistics for every PDF that is served.
Setting the cache parameters as Nicholas Guichard suggested may help,
but it won't help for every browser and maybe you want other settings.
So Anis H. proposed the following workaround:
<pre xmlns="http://www.w3.org/1999/xhtml" class="commandline">&lt;html&gt;
&lt;body leftMargin="0" topMargin="0" scroll="no"&gt;
  &lt;embed src="http://myserver/pdfCreationServlet"
  	width="100%" height="100%"
	type="application/pdf" fullscreen="yes" /&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
I keep on repeating 'some browsers this, some browsers that', but
in reality, I'm just avoiding to be unfriendly to MicroSoft.
In fact, all the problems listed above are typical for MS Internet Explorer.
What I am trying to do here, is to propose a solution that works for
<i>all</i> versions of <i>all</i> browsers, but don't shoot me if I fail.
Every time a new version of MSIE solved one problem, another problem came
across (I have stopped wondering why it's the most popular browser in the world;
I just don't understand it).<br>
Knowing MSIE gives us, iText developers, such a hard time, you can
anticipate MSIE problems and redirect MSIE users to the workaround.
This is some example code, written by Bill Ensley:
<pre class="commandline">&lt;%
  String user = request.getHeader("User-Agent");
  if(user.indexOf("MSIE") != -1 &amp;&amp; user.indexOf("Windows") != -1){
    out.print("&lt;body leftMargin=\"0\" topMargin=\"0\" scroll=\"no\"&gt;");
    out.print("&lt;EMBED src=\"PDFPreview.pdf?type=pdf\" "
      + "width=\"100%\" height=\"100%\" "
      + "fullscreen=\"yes\" type=\"application/pdf\"&gt;");
  }
  else{
    out.print("&lt;body leftMargin=\"0\" topMargin=\"0\" scroll=\"no\"&gt;");
    out.print("&lt;script&gt;document.location = 'PDFPreview.pdf?type=pdf';&lt;/script&gt;");
  }
%&gt;</pre>
I made some small changes to this code in the next example,
you should try it with different browsers:
<div id="example">
					Example:
					<a xmlns="" href="http://itext.cvs.sourceforge.net/*checkout*/itext/www/tutorial/general/webapp/UserAgent.jsp">UserAgent.jsp</a><br>Looks at the user-agent: if MSIE on Windows, embed the PDF; if another browser, redirect to the servlet<br>Test this example:
						 <a href="http://blowagie.users.mcs2.netarray.com/UserAgent.jsp">try this with different browsers</a></div>
</div><a class="top" href="#top">Go to top of the page</a><a name="timeout"></a><div class="title">Workaround for timeout problem:</div><div xmlns="http://www.w3.org/1999/xhtml">
As I mentioned before, it's a pity we have to buffer the complete PDF in a ByteArrayOutputStream,
just because some browsers need to know the length of the generated PDF file in advance.
At Ghent University I had to generate reports with grades for several thousands students in one document.
Not only was the document very large, database access was rather slow too.
So I had the problem that people sometimes failed to get the PDF because their browser
said the connection timed out. If I had been able to serve them little bits of PDF at a
time (for instance by writing some binary code directly to the ServletOutputStream
each time a page was finished), this timeout wouldn't have happened.<br><br>
I solved this problem by serving some HTML feedback as long as the PDF wasn't finished.
The HTML would show the total number of students and the number of students
that were added to the PDF so far. I also made a progressbar by stretching a pixel
in an image with a width of 0 to 100 (<span class="commandline">&lt;img src="pixel.gif" height="10" width="&lt;%= myPdf.getPercentage() %&gt;"&gt;</span>).
This HTML page was refreshed every 3 seconds until the PDF was finished.<br><br>
In the example that follows, I have simplified this solution.
You see there is a subclass MyPdf that implements Runnable. The doGet serves the HTML.
The first time you hit the server a new MyPdf is added to your session and a Thread
generating the PDF is started. I deliberately slowed down this process by adding
Thread.sleep(500). As long as the PDF isn't generated completely (percentage &lt; 100),
I send a 'Please Wait' message to the browser. Once the PDF is finished,
I send a form with a button to fetch the PDF from the doPost() method.
It's a very simple solution. I am using it for 5 years now and the users of my applications
at Ghent University are all very happy with it. It's not only a technical solution;
it also works on a psychological level. People are rather impatient. They don't like
to wait for that internet page to come, not knowing if the connection got lost,
if they should hit the reload button, if the server went down...
But give them some feedback and time seems to go a lot faster!
<div id="example">
					Example: java
					<a xmlns="" href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/ProgressServlet.java">
						com.lowagie.examples.general.webapp.ProgressServlet</a><br>Shows how to avoid receiving a timeout in your browser if generating the PDF takes a really long time.<br>Test this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/http://blowagie.users.mcs2.netarray.com/servlet/progress">show progress</a><br>
						Extra jars needed in your CLASSPATH:
						 servlet.jar<br></div>
</div><a class="top" href="#top">Go to top of the page</a><a name="silentprint"></a><div class="title">Silent printing:</div><div xmlns="http://www.w3.org/1999/xhtml">
This is a nice example, but please be careful when you use it.
Basicly, you are going to sent a PDF with some <a xmlns="" href="./../../objects/anchors/index.html#actions">javascript</a>
to a client browser. This PDF is shown in an iframe, so the user will not necessarily see it on screen (you could for instance hide it).
But the <a href="./../../objects/anchors/index.html#actions">javascript action</a> will print it directly to the
default printer (as if your client pushed the Print button and the OK button on the print dialog). This is not the kind of functionality
you want to put in your application without warning your users...
<div id="example">
					Example: java
					<a href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/SilentPrintServlet.java">
						com.lowagie.examples.general.webapp.SilentPrintServlet</a><br>Explains how to print silently via Servlet/Browser.<br>Test this example:
						 <a href="http://itext.ugent.be/library/com/lowagie/examples/general/webapp/http://blowagie.users.mcs2.netarray.com/servlet/silentprint">try it!</a><br>
						Extra jars needed in your CLASSPATH:
						 servlet.jar<br></div>
</div><a class="top" href="#top">Go to top of the page</a><a name="JSP"></a><div class="title">Hello World JSP:</div><div xmlns="http://www.w3.org/1999/xhtml">
It's always a bad idea to use JSPs to generate binary data that has to be sent to a client application.
I repeat: <i>It's always a bad idea to use JSPs to generate binary data that has to be sent to a client application.</i>
I hope you understand that it's always a bad idea to use JSPs to generate binary data that has to be sent to a client application.<br>
OK? Now that you know that, I'll give you a small example of a JSP that generates a PDF file using iText.
<div id="example">
					Example:
					<a xmlns="" href="http://itext.cvs.sourceforge.net/*checkout*/itext/www/tutorial/general/webapp/HelloWorld.jsp">HelloWorld.jsp</a><br>Generates a simple 'Hello World' file from a JSP page<br>Test this example:
						 <a href="http://blowagie.users.mcs2.netarray.com/HelloWorld.jsp">HelloWorld</a></div>
I like JSP. I have written JSPs myself for different HTML websites, but
I haven't heard one sensible argument why people would prefer writing JSPs
instead of Servlets to generate PDF. I do have some reasons why you wouldn't use JSP.<br xmlns="http://www.w3.org/1999/xhtml">
If you know JSP, you should know every JSP-file is compiled to a Servlet by your webserver (internally).
You should trust me if I say writing the Servlet is easier and less error prone than writing the JSP.<br>
This is why:
<ul>
<li>First of all, it's hard to implement all the workarounds mentioned
above in a JSP-file. The link to the JSP file in the example, works for
me, it gives me a PDF file saying 'Hello World', but it will not necessarily
work for you.</li>
<li>Some servers assume JSP output is not binary.<br>
Some people on the mailing-list have testified that they can generate
correct PDF files on the server from a JSP, they can open the PDF on the server
and it looks as expected. But if they use the <i>same code</i> to send the PDF
to the browser, they only see a blank page in Acrobat Reader. When they open
the PDF file in a text editor, they see lots of unreadable characters in the
PDF on the server. If they do the same with the PDF on the client, they see
lots of questionmarks: those are bytes that are made corrupt due to the fact that
the application server thought they were plain ASCII.</li>
<li>If you copy the example and start working from there, you will
probably add some indentation, newlines, spaces, carriage returns,...
If you are used to writing JSPs, it should be your second nature to do this.
This is good for most of the stuff you are writing. It has no impact on HTML pages,
but now you are generating PDF. All those 'invisible' characters are compiled
to a Servlet and are added to the PDF by the Servlet, <i>not</i> by iText.
This makes your PDF corrupt! The crossreference table doesn't point to
the correct bytepositions anymore. You may or may not be able to open the
PDF file. You'll get all kinds of non-reproducable errors. We can't give you
any support on this. Our answer will always be: use Servlets instead.</li>
</ul>
So for the last time: It's always a bad idea to use JSPs to generate binary data that has to be sent to a client application.
Use Servlets instead.
</div><a class="top" href="#top">Go to top of the page</a><div id="footer">
			Page Updated: 2006/09/17 10:13:50
			Copyright &copy; 1999-2005
			Bruno Lowagie<br><a href="http://www.lowagie.com/iText/">iText</a> is a Free Java-Pdf library by Bruno Lowagie and Paulo Soares.
		</div></div></div><div class="commercial"><br><script type="text/javascript"><!--
google_ad_client = "pub-0340380473790570";
google_ad_width = 120;
google_ad_height = 600;
google_ad_format = "120x600_as";
google_ad_channel ="";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "1B09BD";
google_color_url = "100670";
google_color_text = "707070";
//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br><br><div class="subtitle">Amazon books:</div><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=8&l=as1&asins=1932394796&fc1=000000&lc1=0000ff&bc1=&lt1=_blank&IS2=1&bg1=ffffff&f=ifr" width="120" height="240" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" align="Center"></iframe>');
//--></script><a xmlns="" href="http://www.amazon.co.uk/exec/obidos/ASIN/1932394796/catloogjecom-21" class="amazonlinks">
			amazon.co.uk-link
		</a><br><br><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=8&l=as1&asins=0596000405&fc1=000000&lc1=0000ff&bc1=&lt1=_blank&IS2=1&bg1=ffffff&f=ifr" width="120" height="240" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" align="Center"></iframe>');
//--></script><a href="http://www.amazon.co.uk/exec/obidos/ASIN/0596000405/catloogjecom-21" class="amazonlinks">
			amazon.co.uk-link
		</a><br><br><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=10&l=st1&mode=books&search=JAVA Servlets&=1&fc1=&lc1=&lt1=&bg1=&f=ifr" width="120" height="460" border="0" frameborder="0" style="border:none;" scrolling="no" marginwidth="0" marginheight="0"></iframe>');
//--></script><br><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=10&l=st1&mode=books&search=J2EE&=1&fc1=&lc1=&lt1=&bg1=&f=ifr" width="120" height="460" border="0" frameborder="0" style="border:none;" scrolling="no" marginwidth="0" marginheight="0"></iframe>');
//--></script><br><script type="text/javascript"><!--
document.write('<iframe src="http://rcm.amazon.com/e/cm?t=itisacatalofwebp&o=1&p=10&l=st1&mode=books&search=JSP&=1&fc1=&lc1=&lt1=&bg1=&f=ifr" width="120" height="460" border="0" frameborder="0" style="border:none;" scrolling="no" marginwidth="0" marginheight="0"></iframe>');
//--></script><br></div></body></html>