<?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>Blogg - Athega AB &#187; Prestanda</title>
	<atom:link href="http://blogg.athega.se/kategori/prestanda/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogg.athega.se</link>
	<description>...</description>
	<lastBuildDate>Fri, 28 May 2010 01:00:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JavaScriptprestanda</title>
		<link>http://blogg.athega.se/2009/10/01/javascriptprestanda/</link>
		<comments>http://blogg.athega.se/2009/10/01/javascriptprestanda/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 17:26:03 +0000</pubDate>
		<dc:creator>Johan Beronius</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Prestanda]]></category>
		<category><![CDATA[Programmeringsspråk]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=450</guid>
		<description><![CDATA[För moderna webbapplikationer där en större del av koden körs i webbläsaren blir det allt viktigare med bra prestanda för exekvering av JavaScript.
För att kontrollera text i formulärfält och liknande simpla uppgifter är inte hastigheten så avgörande, men vad händer om man försöker köra tyngre beräkningar? För att göra ett benchmark som testar prestandan i [...]]]></description>
			<content:encoded><![CDATA[<p>För moderna webbapplikationer där en större del av koden körs i webbläsaren blir det allt viktigare med bra prestanda för exekvering av JavaScript.<br />
För att kontrollera text i formulärfält och liknande simpla uppgifter är inte hastigheten så avgörande, men vad händer om man försöker köra tyngre beräkningar? För att göra ett benchmark som testar prestandan i de vanligaste webbläsarna har jag skrivit ett <a href="http://www.athega.se/sudoku/" target="_blank">program som löser Sudokus</a>.</p>
<p><a href="http://www.athega.se/sudoku/" target="_blank"><img class="aligncenter size-full wp-image-452" src="http://blogg.athega.se/wp-content/uploads/2009/10/sudoku1.png" alt="Ett program som löser Sudoku med JavaScript" width="190" height="184" /></a></p>
<p>För att jämföra de olika webbläsarna har jag kört <a href="http://www.athega.se/sudoku/#CzCJYmBdUXEZADK9UgmAjgFszJIhc" target="_blank">denna Sudoku-kombination</a> och jämfört tiden det tar att räkna fram alla möjliga lösningar på just min dator. Resultatet är ganska häpnadsväckande, som ni kan se i grafen nedan så utklassar Safari Internet Explorer med nästan en faktor på tio-till-ett. Chrome hamnar inte långt efter och både Firefox och Opera placerar sig hyffsat bra. Och då används inte ens Web Worker-trådar som har visat sig ha potential att dubbla prestandan och ytterligare öka försprånget för alla andra webbläsare framför Internet Explorer.</p>
<p><a href="http://www.athega.se/sudoku/#CzCJYmBdUXEZADK9UgmAjgFszJIhc" target="_blank"><img class="size-full wp-image-453" src="http://blogg.athega.se/wp-content/uploads/2009/10/jsgraph.png" alt="Tid för att lösa ett Sudoku med JavaScript i olika webbläsare" width="600" height="463" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/10/01/javascriptprestanda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lär dig leva utan ancestorView</title>
		<link>http://blogg.athega.se/2009/07/02/lar-dig-leva-utan-ancestorview/</link>
		<comments>http://blogg.athega.se/2009/07/02/lar-dig-leva-utan-ancestorview/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 12:04:38 +0000</pubDate>
		<dc:creator>Christian Lizell</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Escenic]]></category>
		<category><![CDATA[Kod]]></category>
		<category><![CDATA[Prestanda]]></category>
		<category><![CDATA[Webbutveckling]]></category>
		<category><![CDATA[ancestorView]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=255</guid>
		<description><![CDATA[Under våren har jag jobbat med att trimma en webbapplikation som levererar nätupplagan av en av Sveriges större tidningar. CMS-verktyget som används är Escenic i version 4.x och det kommer med en rad egna JSP-tagar. En av dom ska man dock akta sig för – &#60;section:ancestorView&#62;. Den är faktiskt inte så svår att leva utan [...]]]></description>
			<content:encoded><![CDATA[<p>Under våren har jag jobbat med att trimma en webbapplikation som levererar nätupplagan av en av Sveriges större tidningar. CMS-verktyget som används är <a href="http://www.escenic.com">Escenic</a> i version 4.x och det kommer med en rad egna JSP-tagar. En av dom ska man dock akta sig för – <code>&lt;section:ancestorView&gt;</code>. Den är faktiskt inte så svår att leva utan heller. I den här artikeln visar jag hur.</p>
<div id="attachment_256" class="wp-caption aligncenter" style="width: 625px"><img class="size-full wp-image-256 " title="Responstid" src="http://blogg.athega.se/wp-content/uploads/2009/07/response_time.jpg" alt="Responstid före och efter jag bytt ut &lt;section:ancerstorView&gt;" width="615" height="276" /><p class="wp-caption-text">Responstid före och efter jag bytt ut ancerstorview-taggen</p></div>
<h2>Vad är ancestorView?</h2>
<p><code>ancestorView</code> används för att skapa en hierarkisk vy av sektioner utgående från den sektion du anger. Inget speciellt avancerat eller konstigt. Det borde inte heller vara jobbigt för systemet att skapa vyn, tyvärr sker något under ytan som ställer till det. Berätta gärna vad i kommentarerna. <img src='http://blogg.athega.se/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Hur det kan se ut (före)</h2>
<p>Ett vanligt sätt att använda sig av <code>ancestorView</code> är för att exempelvis bygga en sökväg till en navigering:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;section:ancestorView</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;sectionView&quot;</span> <span style="color: #000066;">section</span>=<span style="color: #ff0000;">&quot;${article.homeSection}&quot;</span> <span style="color: #000066;">includeRoot</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menu:use</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;navigation&quot;</span> <span style="color: #000066;">treeName</span>=<span style="color: #ff0000;">&quot;myMenuName&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:set</span> <span style="color: #000066;">var</span>=<span style="color: #ff0000;">&quot;count&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;view:iterate</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;item&quot;</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;sectionView&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menu:item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;current&quot;</span> <span style="color: #000066;">sectionId</span>=<span style="color: #ff0000;">&quot;${item.id}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:choose<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:when</span> <span style="color: #000066;">test</span>=<span style="color: #ff0000;">&quot;${count eq 1}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:set</span> <span style="color: #000066;">var</span>=<span style="color: #ff0000;">&quot;sectionPath&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${current.text}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/c:when<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:otherwise<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:set</span> <span style="color: #000066;">var</span>=<span style="color: #ff0000;">&quot;sectionPath&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${sectionPath}/${current.text}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/c:otherwise<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/c:choose<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:set</span> <span style="color: #000066;">var</span>=<span style="color: #ff0000;">&quot;count&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${count+1}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/view:iterate<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/menu:use<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h2>Skapa en lättviktig ersättning till <code>ancestorView</code></h2>
<p>En enkel väg till ett liv utan <code>ancestorView</code>-taggar är att skapa en mycket enkel custom tag. Nedanstående implementation har inte stöd för precis allt du kan göra med Escenics variant, men den gör jobbet för de flesta användningsfallen. Jag döpte den till <code>ancestors.tag</code> och la den i <code>/WEB-INF/lib/tags/section</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #339933;">&lt;%</span>@tag body-content=<span style="color: #0000ff;">&quot;empty&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;%</span>@tag <span style="color: #000000; font-weight: bold;">import</span>=<span style="color: #0000ff;">&quot;neo.xredsys.api.Section, java.util.ArrayList&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;%</span>@attribute name=<span style="color: #0000ff;">&quot;id&quot;</span> required=<span style="color: #0000ff;">&quot;true&quot;</span> rtexprvalue=<span style="color: #0000ff;">&quot;false&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;%</span>@attribute name=<span style="color: #0000ff;">&quot;section&quot;</span> type=<span style="color: #0000ff;">&quot;neo.xredsys.api.Section&quot;</span> required=<span style="color: #0000ff;">&quot;true&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;%</span>@attribute name=<span style="color: #0000ff;">&quot;includeRoot&quot;</span> type=<span style="color: #0000ff;">&quot;java.lang.String&quot;</span> required=<span style="color: #0000ff;">&quot;false&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;%</span>@variable name-from-attribute=<span style="color: #0000ff;">&quot;id&quot;</span> alias=<span style="color: #0000ff;">&quot;sectionPath&quot;</span> scope=<span style="color: #0000ff;">&quot;AT_END&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;%</span>
	<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399; font-weight: bold;">ArrayList</span> sections = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399; font-weight: bold;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>section <span style="color: #339933;">!</span>= <span style="color: #006600; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000;  font-weight: bold;">do</span> <span style="color: #009900;">&#123;</span>
			sections.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, section<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			section = section.<span style="color: #006633;">getParent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000;  font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>section <span style="color: #339933;">!</span>= <span style="color: #006600; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;true&quot;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>includeRoot<span style="color: #009900;">&#41;</span> || section.<span style="color: #006633;">getParent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!</span>= <span style="color: #006600; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	jspContext.<span style="color: #006633;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;sectionPath&quot;</span>, sections<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">%&gt;</span></pre></div></div>

<p>Det enda som egentligen sker här är att jag bygger upp en lista med föräldrasektioner i omvänd ordning genom att anropa Escenics API. Detta går av någon anledning massor med gånger snabbare.</p>
<h2>Hur det kan se ut utan <code>ancestorView</code (efter)</h2>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;">&lt;%@ taglib <span style="color: #000066;">prefix</span>=<span style="color: #ff0000;">&quot;sec&quot;</span> <span style="color: #000066;">tagdir</span>=<span style="color: #ff0000;">&quot;/WEB-INF/tags/section&quot;</span> %<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;sec:ancestors</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;sectionView&quot;</span> <span style="color: #000066;">section</span>=<span style="color: #ff0000;">&quot;${article.homeSection}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menu:use</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;navigation&quot;</span> <span style="color: #000066;">treeName</span>=<span style="color: #ff0000;">&quot;myMenuName&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:forEach</span> <span style="color: #000066;">var</span>=<span style="color: #ff0000;">&quot;item&quot;</span> <span style="color: #000066;">items</span>=<span style="color: #ff0000;">&quot;${sectionView}&quot;</span> <span style="color: #000066;">varStatus</span>=<span style="color: #ff0000;">&quot;itemStat&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;menu:item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;current&quot;</span> <span style="color: #000066;">sectionId</span>=<span style="color: #ff0000;">&quot;${item.id}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:choose<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:when</span> <span style="color: #000066;">test</span>=<span style="color: #ff0000;">&quot;${itemStat.first}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:set</span> <span style="color: #000066;">var</span>=<span style="color: #ff0000;">&quot;sectionPath&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${current.text}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/c:when<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:otherwise<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;c:set</span> <span style="color: #000066;">var</span>=<span style="color: #ff0000;">&quot;sectionPath&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${sectionPath}/${current.text}&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/c:otherwise<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/c:choose<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/c:forEach<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/menu:use<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Eftersom jag inte längre arbetar med en vy av sektioner, kan jag iterera över listan med föräldrasektioner med en vanlig <code>c:foreach</code> med fördelar som <code>varStatus</code>, mm.</p>
<h2>Slutsats</h2>
<p>Om du använder Escenic i någon 4.x-version och om du får några träffar när du söker på ancestorView i din kodbas, finns all anledning att se över ett byte!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/07/02/lar-dig-leva-utan-ancestorview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Låt inte Tomcat jobba i onödan</title>
		<link>http://blogg.athega.se/2009/04/24/lat-inte-tomcat-jobba-i-onodan/</link>
		<comments>http://blogg.athega.se/2009/04/24/lat-inte-tomcat-jobba-i-onodan/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 12:31:07 +0000</pubDate>
		<dc:creator>Christian Lizell</dc:creator>
				<category><![CDATA[Kod]]></category>
		<category><![CDATA[Prestanda]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Servlets]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=150</guid>
		<description><![CDATA[Ett vanligt upplägg för en lastad sajt med någorlunda statiskt innehåll ser ut enligt nedan:
I korthet innebär det att den största delen av trafiken hanteras av enkla webbcachear som leverar sidor till slutanvändarna. Med ett visst intervall efterfrågar cachearna frontarna efter nytt innehåll. Frontarna kan exempelvis köra en eller flera Tomcat-instanser som genererar innehållet. På [...]]]></description>
			<content:encoded><![CDATA[<p>Ett vanligt upplägg för en lastad sajt med någorlunda statiskt innehåll ser ut enligt nedan:</p>
<div id="attachment_151" class="wp-caption aligncenter" style="width: 650px"><img class="size-full wp-image-151" title="Internet-Cache-Front" src="http://blogg.athega.se/wp-content/uploads/2009/04/img_8759.jpg" alt="Upplägg, lastad sajt" width="640" height="440" /><p class="wp-caption-text">Upplägg, lastad sajt</p></div>
<p>I korthet innebär det att den största delen av trafiken hanteras av enkla webbcachear som leverar sidor till slutanvändarna. Med ett visst intervall efterfrågar cachearna frontarna efter nytt innehåll. Frontarna kan exempelvis köra en eller flera Tomcat-instanser som genererar innehållet. På detta sätt kan även riktigt stora siter klara sig på ett tiotal maskiner.</p>
<p>För alla JSP-sidor som Tomcat-frontarna genererar åt cachearna skapas nu en session, precis som <a title="JSR 154" href="http://jcp.org/en/jsr/detail?id=154">Servlet-standarden</a> föreskriver. Det är helt i sin ordning, fast helt onödigt i det här fallet. Det genererade innehållet levereras inte direkt till slutanvändaren, utan till cachen. Kan man få servlet-motorn att inte skapa sessioner i onödan och på så sätt spara sina dyra resurser?</p>
<p>Ja, ett sätt är att överst i sin JSP-sida helt enkelt utbrista:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;">&lt;%@page <span style="color: #000066;">session</span>=<span style="color: #ff0000;">&quot;false&quot;</span>%<span style="color: #000000; font-weight: bold;">&gt;</span></span></pre></div></div>

<p>Dock är det kanske inte att föredra i ett litet större projekt med hundratals JSP-sidor. Det man letar efter är ett sätt att slå av det centralt för alla JSP-sidor. Min första instikt var att konfiguerar Jasper, som kompilerar JSP-sidorna att inte skapa sessioner om man inte explicit bad om det. Någon sådan parameter hittade jag tyvärr inte. Personer som har liknande frågor på nätet får istället frågan; &#8221;Varför vill du slå av sessioner? De är ju en del av standarden!&#8221;</p>
<p>Mitt nästa spår var att automatiskt försöka inkludera ovanstående direktiv för varje genererad sida. Från och med JSP 2.0 (som inte direkt kom ut igår) går det att få till ganska enkelt med något som kallas för implicit includes.</p>
<p>Börja med att lägga till ett jsp-config-direktiv i din web.xml:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- Disable the use of sessions --&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;jsp-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;jsp-property-group<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>*.jsp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;include-prelude<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/WEB-INF/jspf/disableSession.jspf<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/include-prelude<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/jsp-property-group<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/jsp-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Detta matchar alla JSP-filer (med filändelsen .jsp) och inkluderar innehållet av filen disableSession.jspf precis som om du skulle ha skrivit</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;">&lt;%@include <span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;/WEB-INF/jspf/disableSession.jspf&quot;</span>%<span style="color: #000000; font-weight: bold;">&gt;</span></span></pre></div></div>

<p>högst upp i varenda JSP-fil.</p>
<p>Notera att filen som inkluderas är av typen .jspf, ett JSP-fragment. Detta är nödvändigt och säkerställer bland annat att du inte råkar in i några oändliga inkluderingsloopar. Att filen ligger i mappen /WEB-INF/jspf är rekommenderat och förhindrar även direkt access för en slutanvändare.</p>
<p>Testa! Tomcat kommer att kasta fel i loggarna så fort du försöker skapa en session, men om du har det som jag är det precis så du vill ha det!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/04/24/lat-inte-tomcat-jobba-i-onodan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
