---
title: "Optimering av Java & SQL"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/121019-optimering-av-java-sql"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "jme"
published: "2005-01-25T15:06:16.000Z"
updated: "2005-02-14T21:50:46.000Z"
replies: 18
views: 2558
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/121019-optimering-av-java-sql"
---

# Optimering av Java & SQL

## #1 — jme, 2005-01-25T15:06Z

Hej!

Placerar denna tråd under J2EE, eftersom mycket av inlägget baseras på användning under J2EE. 

Håller på med en www-applikation (Tomcat 5.0.18) åt en kund. Applikationen byggs upp av J2EE (servlets & jsp). Applikationen använder MySql(4.0.13) som databas databas.

Vi har märkt att sidorna är en aning långsamma.
Vill nu optimera koden.

Kan man på ett absolut säkert sätt stoppa direkt åtkomst på \*.jsp filer? 

Försökte med att skapa en \<servlet-mapping\> i web.xml men det slutade med stack-overflow då en förfrågan övergick till en "for(;;)" loop. ;) Dvs mappningen gjorde det så att varje anrop mot en jsp-sida skickades till servletten som sedan dirigerade förfrågan till en handler. Men då handlern skickade sedan svaret i form av en jsp-sida, så.... ;)

\<servlet-mapping\>
\<servlet-name\>MinController\</servlet-name\>
\<url-pattern\>/jsp/\*\</url-pattern\>
\</servlet-mapping\>

Just nu har vi tyvärr det så dumt, att en validering görs även på varje jsp-sida och i den s k controller servletten.

Så vill jag inte ha det.

Sedan några sql-frågor:

Jag har läst om att följande är att föredra:

String t = result.getString(int_värde) // result = (ResultSet)

i stället för:

String t = result.getString("kolumnNamn")

Just nu har jag det så här:

UserBean b;

b.setName(result.getString("name") );
b.setEmail(result.getString("email") );
b.setAge(result.getInt("age") );

om jag nu använder result.getString(int_värde) så inser jag inte riktigt, hur jag på ett enkelt sätt kan göra som ovan, utan en himla massa switch() satser...

Om jag inte kör med kolumn-namnen så måste jag ju veta i vilken ordning allt finns i ResultSet objektet. Så har jag det för mig iaf.

Sen måste jag ocksp pilla ihop en s k ConnectionPool, dvs ett system för att "återanvända" uppkopplingarna mot databasen och inte skapa ett nytt  för varje anrop. Så som jag har det just nu.

Systemet är skapat för kanske 10-20 personer som inte kommer att använda det samtidigt.

Sen ännu en dum fråga, som jag faktiskt hittills har förbisett: :r 

Måste man göra nåt speciellt, för att ha ett system som stödjer föera samtidiga användare? 

Servlet-ramverket borde väl vara multitrådad?

Permalänk: https://www.webforum.nu/p/121019

## #2 — spango, 2005-01-25T21:59Z

1) Varför hindra direkt åtkomst av jsp-filer? :q 
2) Jag tvivlar spontant på att ResultSet.getXXX(int) är så överdrivet mycket snabbare än ResultSet.getXXX(String), men det är bara min spontana gissning.  Lookupen är ju inte särdeles komplicerad, även om det väl är snabbare att direktindexera med intar i stället.
3) Om servlets är multitrådade eller inte beror på servern. Tomcat bör "rimligen" vara det, ja ;)

Permalänk: https://www.webforum.nu/p/1539501

## #3 — jme, 2005-01-26T09:58Z

1) Varför hindra direkt åtkomst av jsp-filer?  

Vissa sidor, t ex admin.sidor är enbart för admins. Försöker man nå, som vanlig användare,  sidan /admin/admin.jsp så får man ett felmeddelande.

Vi har mappat handlers mot vissa namn:

t ex handlern admin mot adressen

/Controller?cmd=admin

Även om man som vanlig användare aldrig ser en länk med ovanstående, så vet man aldrig, om nån illvillig person kommer på det som står ovan.

En kontroll av behörighet görs alltid, innan en förfrågan utförs.

Om man nu skriver <https://www.adress.com/jsp/admin/admin.jsp>

så måste en kontroll göras på i jsp-sidan om användaren har rätt till resursen.

Just nu har vi det tyvärr så. Jag tycker det är ett rätt så klumpigt sätt.

Kontrollen görs i princip två gånger. 

Controller servletten tar emot en förfrågan, skickar den till en sk handler som sedan bearbetar förfrågan och skickar ett svar. Controller servletten-tar emot svaret och genom en   

getServletContext().getRequestDispatcher(...).forward() så skickas man till rätt jsp-sida (då görs ännu en kontroll).

Jag testade med att mappa alla \*.jsp anrop till controller servletten, men det resulterade i en evighetsloop, då controllern returnerar en adress till en jsp-sida, så fångar den den igen.

Förstår ni? :)

Permalänk: https://www.webforum.nu/p/1539635

## #4 — spango, 2005-01-26T21:15Z

Så använd Tomcat för att autentisera, då.

Permalänk: https://www.webforum.nu/p/1539941

## #5 — jme, 2005-01-26T21:22Z

Menar du realms?

Permalänk: https://www.webforum.nu/p/1539945

## #6 — spango, 2005-01-26T22:11Z

Ja. Något som hindrar?

Permalänk: https://www.webforum.nu/p/1539985

## #7 — jme, 2005-01-27T06:22Z

Nej, tror inte det. Ska titta närmare på realms.

Permalänk: https://www.webforum.nu/p/1540098

## #8 — antilizaer, 2005-01-27T07:58Z

Tror att du kommer känna in en del genom att använda en Connection pool för databasen som du  är inne på, men dumt att pilla ihop en egen, använd Tomcats inbyggda istället. Kanske var den du hade i åtanke,  bara så att du inte pillar ihop något som redan finns...

Permalänk: https://www.webforum.nu/p/1540144

## #9 — jme, 2005-01-27T16:34Z

antilizaer: Du är ju min räddning! :D

Viste ju inte att Tomcat har en inbyggd connection pool.

Måste givetvis kika på det.

Permalänk: https://www.webforum.nu/p/1540402

## #10 — jme, 2005-01-27T18:01Z

Tittade igenom server.xml. Tyvärr verkar de inte ha lagt till stöd för Tomcats Connection Pool. Kan ju alltid fråga om de vill göra det men eftersom det tar tid att konfigurerar och säkerställe funktionaliteten, så är jag inte riktigt säker på saken. Har bar read-access på server.xml så jag kan inte sjävl göra nåt åt saken.

Permalänk: https://www.webforum.nu/p/1540441

## #11 — Lime, 2005-01-28T08:33Z

Nej TC5 har inte inbyggda Connections pools men det finns färdigskrivna för MySQL.

Permalänk: https://www.webforum.nu/p/1540666

## #12 — jme, 2005-01-28T09:43Z

spango: 

realms i TC är väl som htaccess i Apache?

Dvs om en användare försöker nå en jsp-sida, han/hon inte har access till, så visas ett login-fönster, eller?

Så vill jag inte ha det, utan jag vill att användaren skickas till en error-sida.

Permalänk: https://www.webforum.nu/p/1540706

## #13 — spango, 2005-01-28T10:02Z

Det finns olika sätt på hur man får realms att funka. Använder du FORM som auth-method skickas man till en sida där man ombeds logga in, om det känns bättre...

Permalänk: https://www.webforum.nu/p/1540720

## #14 — jme, 2005-01-28T10:19Z

det låter bra!

Permalänk: https://www.webforum.nu/p/1540729

## #15 — jme, 2005-01-28T10:20Z

OT: märkte just att jag har iaf read access på alla andra användares kataloger, kan läsa deras web.xml osv.

Inte bra...

Permalänk: https://www.webforum.nu/p/1540731

## #16 — jme, 2005-01-28T10:39Z

OT:

\-rw-r--r-- 
betyder väl att bara ägaren kan både läsa och skriva, medlemmar ia samma grupp kan bara läsa och alla andra kan läsa?

Permalänk: https://www.webforum.nu/p/1540745

## #17 — spango, 2005-01-28T14:47Z

Japp. Och den umasken är väl normalinställningen på \*nix-system.

Permalänk: https://www.webforum.nu/p/1540843

## #18 — susnet, 2005-02-11T23:02Z

DBCP är en bra connection pool att använda ihop med Tomcat.

Permalänk: https://www.webforum.nu/p/1550741

## #19 — TomasJ, 2005-02-14T21:50Z

Re: Optimering av Java &amp; SQL

> **jme skrev:**
>
> Kan man på ett absolut säkert sätt stoppa direkt åtkomst på \*.jsp filer?

Det enklaste sättet är nog att lägga JSP-sidorna i en underkatalog till WEB-INF.
Se avsnittet "Resource Guards via Simple and Generic Configuration" på följande URL:
<http://www.corej2eepatterns.com/Design/PresoDesign.htm>

> **jme skrev:**
>
> 1) Varför hindra direkt åtkomst av jsp-filer?  
> 
> Vissa sidor, t ex admin.sidor är enbart för admins. Försöker man nå, som vanlig användare,  sidan /admin/admin.jsp så får man ett felmeddelande.
> 
> Vi har mappat handlers mot vissa namn:
> 
> t ex handlern admin mot adressen
> 
> /Controller?cmd=admin
> 
> Även om man som vanlig användare aldrig ser en länk med ovanstående, så vet man aldrig, om nån illvillig person kommer på det som står ovan.

Man kan även tillägga att det inte bara är illvilliga personer som man vill stoppa utan även sökmotorer, så att man slipper få besökare till JSP-sidor som man inte hade tänkt sig att någon skulle besöka direkt.

Om man har en applikation som är baserad på JSP model 2, d.v.s. om man använder en servlet-controller som ser till att populera bönorna som sedan ska visas på en jsp-sida, så kan nämligen en sådan sida vara ganska innehållslös alternativt innehålla fula felmeddelanden om man tillåter direktaccess utan att gå genom controllern.
Därför vill man gärna undvika att ge sökmorer och besökare direktaccess till JSP-sidorna.

/ Tomas

Permalänk: https://www.webforum.nu/p/1555021

---

Tråden på webben: https://www.webforum.nu/amne/java/121019-optimering-av-java-sql
