<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FaceitWeb.com &#187; Request</title>
	<atom:link href="http://www.faceitweb.com/tag/request/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.faceitweb.com</link>
	<description>Recensioni e articoli sul mondo della programmazione</description>
	<lastBuildDate>Tue, 20 Jul 2010 12:34:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Servlet 3.0</title>
		<link>http://www.faceitweb.com/2008/11/servlet-30/</link>
		<comments>http://www.faceitweb.com/2008/11/servlet-30/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 20:00:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[applicazioni web]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[java enterprise edition]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[jsr]]></category>
		<category><![CDATA[JSR 316]]></category>
		<category><![CDATA[Request]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[servlet 3.0]]></category>
		<category><![CDATA[servlet java]]></category>
		<category><![CDATA[sviluppo]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.faceitweb.com/?p=64</guid>
		<description><![CDATA[

Le Servlet java, una tra le tecnologie maggiormente utilizzate per la costruzione di applicazioni web-based con contenuti dinamici, arricchiscono le loro caratteristiche con un primo rilascio della versione Servlet 3.0 (JSR). Questa Java Specification Request è stata approvata nella forma JSR 315 ed è stata progettata per la Java Enterprise Edition 6 (JSR 316) o [...]]]></description>
			<content:encoded><![CDATA[
<!-- ALL ADSENSE ADS DISABLED -->
<p class="MsoNormal" style="text-align: justify;">Le Servlet java, una tra le tecnologie maggiormente utilizzate per la costruzione di applicazioni web-based con contenuti dinamici, arricchiscono le loro caratteristiche con un primo rilascio della versione Servlet 3.0 (JSR). Questa <em>Java Specification Request</em> è stata approvata nella forma <a href="http://jcp.org/en/jsr/detail?id=315"><span style="color: #000000;">JSR 315</span></a> ed è stata progettata per la Java Enterprise Edition 6 <a href="http://jcp.org/en/jsr/detail?id=316">(<span style="color: #000000;">JSR 316</span>)</a> o superiore. A differenza delle precedenti release, le Servlet 3.0 comprendono innovative caratteristiche che rispondono alle nuove esigenze delle applicazioni web-based.</p>
<p class="MsoNormal" style="text-align: justify;">In questo articolo vogliamo descrivere le nuove caratteristiche chiave introdotte nella nuova versione delle Servlet java. Ovviamente è da tener presente che questa prima release è soggetta a variazioni visto che è ancora <em>work in progress</em>.</p>
<p class="MsoNormal" style="text-align: justify;">Le Servlet 3.0 si focalizzano sulle seguenti nuove <em>features</em>:</p>
<ul>
<li><strong>- Facilità di sviluppo</strong></li>
<li><strong>- Pluggability ed extensibility</strong></li>
<li><strong>- Supporto asincrono</strong></li>
<li><strong>- Migliorare la sicurezza</strong></li>
<li><strong>- Altri cambiamenti eterogenei</strong></li>
</ul>
<p class="MsoNormal" style="text-align: justify;">E’ evidente che le nuove servlet hanno preferito adattarsi alle peculiarità delle altre tecnologie della Java Enterprise Edition. La loro bellezza tuttavia, resta nella loro semplicità<span> </span>e abilità a processare le richieste HTTP e restituire la risposta al client web. Le nuove features delle Servlet 3.0 mirano quindi a facilitare lo sviluppo e ne beneficiano sia gli sviluppatori di servelt che quelli dei framework.</p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal"><span id="more-64"></span><strong><span style="font-size: 12pt; line-height: 115%;"> </span></strong></p>
<p class="MsoNormal" style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-8488545646955443";
google_ad_slot = "1886844531";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;">Facilità di sviluppo</span></strong></p>
<p class="MsoNormal" style="text-align: justify;">La facilità di sviluppo è la chiave del successo di qualsiasi tecnologia. Le API Servlet 3.0 si focalizzano su questa peculiarità utilizzando le <em>notazioni<span> <a href="http://jcp.org/en/jsr/detail?id=175"> </a></span></em><a href="http://jcp.org/en/jsr/detail?id=175"><span style="color: #000000;">JSR 175</span></a> per permettere stili-dichiarativi di programmazione. Essa permette infatti, <span> </span>il rapido sviluppo di servlet o di filter class semplicemente annotandoli con l’appropriata notazione, come ad esempio <span style="font-family: &amp;quot;Courier New&amp;quot;;">@Servlet</span><em> </em>o <span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletFilter</span>. Queste notazioni non solo prendono facilmente il codice di una servlet, un filter o una listener class, ma prendono anche i <em>deployment descriptor</em> opzionali per una web application. Il <em>web container </em><span> </span>è responsabile di processare le notazioni che si trovano in classi nella directory <span style="font-family: &amp;quot;Courier New&amp;quot;;">WEB-INF/classes</span>, in un file .jar della directory<span> </span><em><span style="font-family: &amp;quot;Courier New&amp;quot;;">WEB-INF/lib</span></em><span> o in classi che si trovano in altri classpath dell’applicazione.</span></p>
<p class="MsoNormal" style="text-align: justify;"><strong><span>Notazioni vs Deployment descriptor</span></strong></p>
<p class="MsoNormal" style="text-align: justify;">E’ interessante notare che i deployment descriptor hanno precedenza sulle notazioni. In altre parole, essi prelevano le informazioni di configurazione specificate attraverso il meccanismo delle notazioni. La versione 3.0 dei <em>web deployment descriptor</em> contengono un nuovo attributo chiamato <span style="font-family: &amp;quot;Courier New&amp;quot;;">metadata-complete</span> nell’elemento <span style="font-family: &amp;quot;Courier New&amp;quot;;">web-app</span>; esso definisce se il web descriptor è completo, o se i file class dell’applicazione web devono essere esaminati per le annotazioni che specifica<span> </span>il deployment information. Se l’attributo è settato a <span style="font-family: &amp;quot;Courier New&amp;quot;;">true </span>il <em>deployment tool </em><span> </span>deve ignorare qualsiasi notazioni servlet presente nei file class ed usare solo i dettagli della configurazione definita nel descriptor. Altrimenti se il valore non è specificato oppure è settato a <span style="font-family: &amp;quot;Courier New&amp;quot;;">false</span><span>,</span> il container deve esaminare tutte i file class dell’applicazione per trovare le notazioni specificate. Questo fornisce un modo di abilitare o disabilitare l’utilizzo delle notazioni ed il loro processo durante l’avvio dell’applicazione.<span> </span>Tutte le notazioni introdotte possono essere trovate all’interno dei package<span style="font-family: &amp;quot;Courier New&amp;quot;;"> javax.servlet.http.annotation </span>e <span style="font-family: &amp;quot;Courier New&amp;quot;;">javax.servlet.http.annotation.jaxrs</span><span>.</span></p>
<p class="MsoNormal" style="text-align: justify;">Nella sezione seguente viene mostrato il set di notazioni delle Servlet 3.0:</p>
<p class="MsoNormal" style="text-align: justify;"><strong><span>@Servlet</span></strong><strong><span>:</span></strong><span style="font-family: &amp;quot;Courier New&amp;quot;;"> javax.servlet.http.annotation</span>. E’ una notazione class-level la quale afferma che le classi annotate e i suoi metadati devono essere dichiarati come servlet. L’attributo <span style="font-family: &amp;quot;Courier New&amp;quot;;">urlMapping</span> è un’attributo obbligatorio di <span style="font-family: &amp;quot;Courier New&amp;quot;;">@Servlet</span> che specifica il pattern dell’url che invoca la servlet. Quando arriva una richiesta, il container confronta l’URL nella request con l’urlMapping della servlet e se corrispondono, la servlet associata viene invocata per servire la request. Tutti gli altri attributi di questa notazione sono opzionali con valori di default. Possono arrivare metodi annotati con uno delle notazioni dell’<span style="font-family: &amp;quot;Courier New&amp;quot;;">HttpMethod</span>, come GET, PUT, POST, HEAD, o DELETE nella classe servlet. Questi metodi devono prendere <span style="font-family: &amp;quot;Courier New&amp;quot;;">l’HttpServletRequest</span> e l’ <span style="font-family: &amp;quot;Courier New&amp;quot;;">HttpServletResponse</span> come parametri del metodo. La versione 3.0 può essere implementata anche come <em>Plain Old Java Objects</em> (<span style="text-decoration: underline;">POJOs</span>) a differenze delle precedenti versioni.</p>
<p class="MsoNormal" style="text-align: justify;">Andiamo adesso ad analizzare la differenza tra con la precedente versione (2.5). Il web container inizializza le servlet solo se è stato configurato il deployment descriptor:</p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">public class MyServlet extends HttpServlet {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>public void doGet (HttpServletRequest req, </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>HttpServletResponse res) {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&#8230;.</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span lang="EN-US">Deployment descriptor (web.xml)</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;web-app&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;servlet&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;servlet-class&gt;samples.MyServlet&lt;/servlet-class&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;/servlet&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;servlet-mapping&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;url-pattern&gt;/MyApp&lt;/url-pattern&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;/servlet-mapping&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&#8230;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;/web-app&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;">
<p class="MsoNormal" style="text-align: left;">Vediamo invece lo stesso risultato ottenuto con l’utilizzo delle API Servlet 3.0. <span style="font-family: &amp;quot;Courier New&amp;quot;;">MyServlet </span><span>è dichiarata servlet tramite la notazione </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">@Servlet</span><span>, e viene inizializzata durante l’avvio del web container. In questo caso il deployment descriptor è opzionale.</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">@Servlet(urlMappings={&#8220;/MyApp&#8221;})</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">public class MyServlet {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>@GET</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>public void handleGet(HttpServletRequest req, </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span><span> </span></span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HttpServletResponse res) {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&#8230;.</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;"><strong><span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletFilter e @FilterMapping</span></strong><span style="font-family: &amp;quot;Courier New&amp;quot;;">: </span><span>Si può facilmente creare un servlet filter dichiarandolo tramite la notazione </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletFilter</span><span> del package </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">javax.servlet.http.annotation.ServletFilter.</span><span> Questa notazione include anche i metadati del filtro che si sta dichiarando. E’ obbligatorio avere anche la notazione </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">@FilterMapping </span><span>nella classe filter. Tutti gli altri attributi della </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServeltFilter</span><span> sono opzionali, con relativi valori di default. La </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">v3.0</span><span> della filter class possiamo vederla adesso come una classe POJO e non ci saranno interfacce </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">Filter </span><span>o costruttori public senza argomenti,<span> </span>richiesti per questa classe. Nel codice seguente vediamo l’utilizzo di una filter class con le </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">Servlet v2.5 API:</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">public class MyFilter implements Filter {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>public void doFilter(ServletRequest req,</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>ServletResponse res,</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>FilterChain chain) </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>throws IOException, ServletException<span> </span>{</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&#8230;&#8230;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span lang="EN-US">Deployment descriptor (</span><span style="font-family: &amp;quot;Courier New&amp;quot;;">web.xml</span><span lang="EN-US">)</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;web-app&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;filter&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;filter-name&gt;My Filter&lt;/filter-name&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;filter-class&gt;samples.MyFilter&lt;/filter-class&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;/filter&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;filter-mapping&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;filter-name&gt;My Filter&lt;/filter-name&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;url-pattern&gt;/foo&lt;/url-pattern&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;/filter-mapping&gt; </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&#8230;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;/web-app&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span>Un esempio di filter class usando le Servlet 3.0 è mostrato di seguito. Il container segna </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">MyFilter </span><span>come filter class tramite la notazione </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletFilter. MyFilter </span><span>intercetta tutte le richieste in arrivo con <span> </span>l’URL pattern </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">/foo</span><span>. Per la configurazione dei filtri il deployment descriptor è opzionale. </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;">
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletFilter</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">@FilterMapping(&#8220;/foo&#8221;)</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">public class MyFilter {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>public void doFilter(HttpServletRequest req, </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span></span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HttpServletResponse res) {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&#8230;..</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="text-align: left;"><strong><span style="font-family: &amp;quot;Courier New&amp;quot;;">@InitParam</span></strong>: questa notazione può essere usata per inizializzare i parametri da passare alla Servlet o alla filter class. Esso è un attributo delle notazioni <span style="font-family: &amp;quot;Courier New&amp;quot;;">@Servlet</span> e <span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletFilter.</span><span> Nel codice seguente possiamo vedere un esempio:</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">@Servlet(urlMappings={&#8220;/MyApp&#8221;}, initParams ={@InitParam(name=&#8221;lang&#8221;, value=&#8221;english&#8221;)})</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">public class MyServlet {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>@GET</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>public void handleGet(HttpServletRequest req, </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span></span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HttpServletResponse res) {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&#8230;.</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>}</span></p>
<p class="MsoNormal" style="text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="text-align: left;"><strong><span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletContextListener</span></strong><span style="font-family: &amp;quot;Courier New&amp;quot;;">:</span><span> La notazione</span><span style="font-family: &amp;quot;Courier New&amp;quot;;"> javax.servlet.http.annotation.ServletContextListener </span><span>dichiara la classe come servlet context istener. Il context listener riceve la notifica quando il web container crea o distrugge il </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">ServletContext</span><span>. Il context listener sarà una classe POJO e non dovrà implementare l’interfaccia </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">ServletContextListener</span><span>. Di seguito è mostrato un esempio di listener class scritto utilizzando le Servlet 2.5 API. Il container riconoscerà il listener class solo se sono configurati i dettagli nel deployment descriptor. </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">public class MyListener implements ServletContextListener {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>public void contextInitialized(ServletContextEvent sce) {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&#8230;..</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span lang="EN-US">Deployment Descriptor (</span><span style="font-family: &amp;quot;Courier New&amp;quot;;">web.xml</span><span lang="EN-US">)</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;web-app&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;listener&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;listener-class&gt;samples.MyListener&lt;/listener-class&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span></span><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;/listener&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&#8230;.</span></p>
<p class="MsoNormal" style="text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;/web-app&gt;</span></p>
<p class="MsoNormal" style="text-align: left;"><span>Utilizzando la versione 3.0, con il deployment descriptor opzionale, abbiamo:</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletContextListener</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">public class MyListener {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>public void contextInitialized (ServletContextEvent sce) {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span></span><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&#8230;..</span></p>
<p class="MsoNormal" style="text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="text-align: left;">
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;">Pluggability ed extensibility</span></strong></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;">Oggigiorno, i framework web com <em>Struts</em>, <em>JSF</em> e <em>Spring</em> sono molto utilizzati e stabiliscono le tecniche per la costruzione di applicazioni web-based. Integrare questi framework in un’applicazione web non è così facile; infatti essi richiedono di mettere insieme differenti pezzi tra di loro, <span> </span>e occorre quindi modificare il file descriptor per definire come tutti questi pezzi vanno attaccati. La maggior parte dei framework richiedono la configurazione del framework stesso come <em>servlet class</em>, (tipicamente un Controller Servlet), <em>filter class</em>, o <em>listener class</em> nel deployment descriptor dell’applicazione. La ragione principale di queste configurazioni è che le applicazioni web di oggi supportano solo un singolo deployment descriptor dove si definiscono tutte le informazioni di deployment. Quando la misura delle applicazioni incrementa, tuttavia la dipendenza sui framework esterni potrebbe aumentare, generando così deployment descriptor molto comlessi, e impossibili da gestire.</p>
<p class="MsoNormal" style="text-align: left;">Per risolvere questi problemi, uno dei più significativi concetti introdtti dalle Servlet 3.0 è l’idea dei <em>web fragments</em> o <em>modular</em> web.xml. I web fragment sono una partizione logica di applicazioni web in elementi, come <span style="font-family: &amp;quot;Courier New&amp;quot;;">servlet, servlet-mapping, servlet-filter, filter-mapping, servlet-listener</span> ed i loro elementi figli. Gli sviluppatori di framework possono personalizzare queste caratteristiche per definire i loro web fragments che risiedono nel framework, e gli sviluppatori possono utilizzarle in più framework semplicemente includendo le librerie nel classpath dell’applicazione, senza modificare i deployment descriptor esistenti. In breve, queste caratteristiche mirano ad evitare configurazioni quando si lavora con i framework o le librerie.</p>
<p class="MsoNormal" style="text-align: left;">Il deployment descriptor è stato cambiato per includere un nuovo elemento chiamato <span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;web-fragment&gt;, </span><span>che definisce i dettagli del web fragment. Se questi è impacchettato come un file .jar e i suoi metadati con le informazioni in forma di deployment descriptor, allora il </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">web.xml </span><span>deve essere incluso all’interno della directory </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">META-INF</span><span> del file .jar. Al momento del deployment, il container controlla il classpath delle applicazioni e scopre tutti i web fragment e i loro processi. Il flag </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">metadata-complete</span><span><span> </span>esamina tutto durante l’avvio dell’applicazione. Vediamo un esempio di web fragment:</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;web-fragment&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;servlet&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;servlet-name&gt;myservlet&lt;/servlet-name&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;servlet-class&gt;samples.MyServlet&lt;/servlet-class&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;/servlet&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;listener&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;listener-class&gt;samples.MyListener&lt;/listener-class&gt;</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>&lt;/listener&gt;</span></p>
<p class="MsoNormal" style="text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">&lt;/web-fragment&gt;</span></p>
<p class="MsoNormal" style="text-align: left;">Per migliorare la <em>pluggability, </em>le Servlet 3.0 forniscono il supporto per l’aggiunta programmatica di servlet e filter class con l’aiuto di nuove APIs aggiunte al ServletContext. Queste nuove APIs, permettono di dichiarare le servlet, filter class e i loro URL mapping programmaticamente. Queste classi devono essere inizializzate durante l’avvio dell’applicazione oppure in runtime. La cosa più importante però, è che queste API possono essere chiamate solo dal metodo <span style="font-family: &amp;quot;Courier New&amp;quot;;">contextInitialized </span><span>del ServletContext. </span></p>
<p class="MsoNormal" style="text-align: left;">Un semplice esempio di codice è mostrato di seguito:</p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">@ServletContextListener</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">public class MyListener {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>public void contextInitialized (ServletContextEvent sce) {</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>ServletContext sc = sce.getServletContext();</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>//Declare servlet and servlet mapping</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>sc.addServlet(&#8220;myServlet&#8221;, &#8220;Sample servlet&#8221;, &#8220;samples.MyServlet&#8221;, null, -1);</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>sc.addServletMapping(&#8220;myServlet&#8221;, new String[] {&#8220;/urlpattern/*&#8221;});</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>//Declare filter and filter mapping</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>sc.addFilter(&#8220;myFilter&#8221;, &#8220;Sample Filter&#8221;,<span> </span>&#8221; samples.MyFilter&#8221;, null);</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>sc.addFilterMapping(&#8220;myFilter&#8221;, new String[] {&#8220;/urlpattern/*&#8221;}, &#8220;myServlet&#8221;, DispatcherType.REQUEST, false);</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span></span><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;">}</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;">Supporto asincrono</span></strong></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span>Molte volte le servlet rallentano la loro esecuzione aumentando i tempi di attesa, in particolar modo quando devono aspettare una risposta da un web service, una connessione JDBC, un messaggio JMS, e così via. Ci sono scenari ad esempio, in cui la servlet deve aspettare il completamento di tutti i processi, per generare una risposta, causando il blocco delle operazioni che, a loro volta, consumano threads o altre limitate risorse del container. Un altro effetto avverso, si ha in caso di una connnesione JDBC, quando ad esempio il database ha i threads <span> </span>in attesa per l’accesso. Anche questo tipo di scenario causa attese indefinite determinando una bassa qualità dei servizi per l’intero web container.</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span>Per risolvere i difetti appena mensionati, le Servlet 3.0 introducono il supporto per sospendere e riprendere le richieste, e permettere alle servlet di servirle in modo <em>asincrono</em> non bloccante. Quando una richiesta viene sospesa, il thread la elabora e ritorna al container senza generare risposte e si mette in attesa per eseguire altri <em>tasks</em>. Il metodo </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">resume</span><span> nella request, riprende il processo della richiesta. Ogni volta che la risorsa invocata diventa disponibile, il thread lascia che l’evento riprende la richiesta sospesa e procede per generare la risposta. Di seguito sono indicate alcune delle capacità dell’asincronismo delle servlet:</span></p>
<ul>
<li><span>- L’abilità di ricevere i dati da un client senza bloccarsi anche quando i dati sono in arrivo lentamente (non-blocking input).</span></li>
<li><span><span><span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &amp;quot;Times New Roman&amp;quot;;"> </span></span></span><span>- L’abilità di inviare i dati al client senza bloccarsi, anche se il client o il network sono lenti (non-blocking output).</span></li>
<li><span> &#8211; L’abilità di gestire le richieste che ritardano. Questo si verifica quando una risorsa remota/lenta deve essere ottenuta prima di servire una richiesta, <span> </span>oppure se l’accesso ad una specificata risorsa deve essere accelerato per gestire accessi simultanei.</span></li>
<li><span>- L’abilità a gestire le riposte in ritardo chiuse; ad esempio, la response deve essere tenuta aperta per permettere l’invio di ulteriori dati quando l’evento asincrono si verifica.</span></li>
<li><span>- L’abilità di notificare eventi bloccanti o non-bloccanti.</span></li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0.0001pt; text-align: left; text-indent: -18pt;">
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span>Un set di nuove APIs sono state aggiunte alla </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">ServletRequest</span><span> ed alla </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">ServletResponse</span><span> per sospendere, riprendere e<span> </span>interrogare sullo stato della request e della response. Gli eventi di notifica per riprende, sospendere, ed i metodi completi della request, sono disponibili agli sviluppatori tramite i metodi </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">requestSuspended()</span><span>, </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">requestResumed()</span><span> e </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">requestCompleted()</span><span>. La sequenza di eventi che prendono i dati da un web service remoto usando il metodo asincrono delle servlet è illustrato nella figura seguente.</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><a rel="attachment wp-att-76" href="http://www.faceitweb.com/servlet-30/servlet/"><img class="size-medium wp-image-76" title="servlet" src="http://www.faceitweb.com/wp-content/uploads/2008/11/servlet-277x300.png" alt="Flow Servlet 3.0" width="277" height="300" /></a></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;">
<p class="MsoNormal" style="margin-bottom: 0.0001pt;"><span><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"  o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"  stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="Immagine_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75"  style='width:302.25pt;height:267pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\fcervino\IMPOST~1\Temp\msohtmlclip1\01\clip_image001.png" mce_src="file:///C:\DOCUME~1\fcervino\IMPOST~1\Temp\msohtmlclip1\01\clip_image001.png"   o:title="" /> </v:shape><![endif]--></span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt;"><span lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><strong><span style="font-size: 12pt; line-height: 115%;" lang="EN-US">Security</span></strong></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span>Questo argomento non è incluso nella prima versione<span> </span>delle Servlet 3.0. Tuttavia, la proposta consigliata prevede l’abilità di entrare (login) ed uscire (logout) programmaticamente. Le nuove APIs devono essere aggiunte all’</span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HTTPServletRequest </span><span>per abilitarle. Il metodo di login dell’ </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HTTPServletRequest</span><span> permette all’applicazione o framework di forzare un’autenticazione container-mediated. Il metodo di logout dell’</span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HTTPServletRequest</span><span> e dell’</span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HTTPSession</span><span> invece permette ad un’applicazione di resettare lo stato di autenticazione della request.</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><strong><span style="font-size: 12pt; line-height: 115%;">Altri cambiamenti eterogenei</span></strong></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span>Di seguito sono elencati alcuni cambiamenti apportati alle esistenti APIs per facilitare e migliorare lo sviluppo. </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><strong><span style="font-family: &amp;quot;Courier New&amp;quot;;">HttpOnly </span></strong><strong><span>Cookies</span></strong><span>: Le Servlet 3.0 consentono ai cookie di essere marcati come </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HTTPOnly </span><span>cookies.<span> </span>Questa notazione non è esposta lato-client con script di codici,<span> </span>per prevenire attacchi tramite scripting. La maggior parte dei moderni browser supporta questa caratteristica. Di seguito i metodi aggiunti alla classe Cookie per il supporto a </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">HTTPOnly </span><span>cookies:</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span></span><span style="font-family: &amp;quot;Courier New&amp;quot;;">void setHttpOnly(boolean isHttpOnly)</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>boolean isHttpOnly()</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>API changes:</span></strong><span> I seguenti metodi si aggiungono alla </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">ServletRequest</span><span> per facilitare il recupero della </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">ServletResponse,</span><span> e la </span><span style="font-family: &amp;quot;Courier New&amp;quot;;">ServletContext</span><span>, istanza associata con un oggetto request. </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>ServletResponse getServletResponse()</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span style="font-family: &amp;quot;Courier New&amp;quot;;"><span> </span>ServletContext getServletContext()</span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span> </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><strong><span style="font-size: 12pt; line-height: 115%;">RoadMap</span></strong></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><span>La prima release delle Servlet 3.0 è stata completata nel Giugno 2008 ed hanno come obiettivo il loro utilizzo nella piattaforma Java EE 6 o superiori. La versione finale quindi dovrebbe arrivare in concomitanza della Java EE 6. Comunque la prima parte delle specifiche sarà resa disponibile attraverso </span><a href="https://glassfish.dev.java.net/"><strong><span style="color: #000000;">GlassFish</span></strong></a><span>, che è il riferimento per l’implementazione della Java EE 6. Ci si aspetta quindi che le Servlet 3.0 siano integrate proprio nella versione 3 di </span><a href="https://glassfish.dev.java.net/"><strong><span style="color: #000000;">GlassFish</span></strong></a><span>. </span></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><strong><span>Risorse:</span></strong></p>
<ul style="margin-top: 0cm;" type="disc">
<li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><a href="http://today.java.net/pub/a/today/2008/10/14/introduction-to-servlet-3.html">An Introduction to servlet 3.0</a></li>
<li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><a href="http://jcp.org/en/jsr/detail?id=315"><span style="color: #000000;">JSR 315: Java Servlet 3.0 Specification</span></a></li>
<li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><a name="update"></a><a href="http://wiki.glassfish.java.net/Wiki.jsp?page=FrameworkPluggability"><span><span style="color: #000000;">Latest proposal      for annotations and web modularity</span></span></a></li>
<li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><a href="http://techtracer.com/2007/07/23/servlet-30-the-journey-begins-now/"><span style="color: #000000;">Rajiv Mordani&#8217;s Blog on Servlet 3.0</span></a></li>
<li class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: left;"><a href="http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5415.pdf"><span style="color: #000000;">A document on Java Servlet 3.0 API: What&#8217;s new      and exciting</span></a></li>
</ul>
<p class="buymebeer"><form action="https://www.paypal.com/cgi-bin/webscr" target="paypal" method="post"><input type="hidden" name="cmd" value="_xclick" /><input type="hidden" name="business" value="fabio.cervino@poste.it" /><input type="hidden" name="return" value="Grazie di cuore per aver voluto dare una mano allo staff di Faceitweb.com" /><input type="hidden" name="item_name" value="Offri un caffè allo staff for Servlet 3.0" /><input type="hidden" name="currency_code" value="EUR" /><input type="hidden" name="amount" value="" /><input type="image" src="http://www.faceitweb.com/wp-content/plugins/buy-me-beer/icon_cafe.gif" align="left" alt="Offrimi un caffè" title="Offrimi un caffè" hspace="3" /></form><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&amp;business=fabio.cervino@poste.it&amp;currency_code=EUR&amp;amount=&amp;return=Grazie di cuore per aver voluto dare una mano allo staff di Faceitweb.com&amp;item_name=Offri+un+caffè+allo+staff+for+Servlet+3.0" target="paypal"></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.faceitweb.com/2008/11/servlet-30/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
