Hejsan
Ska man kunna skicka hur stora stränga som helst till en servlet? Jag har ett formulär där jag matar in en sträng, som skickas till en servlet. Denna skickas sendan vidare till en accessdatabas och läggs in i ett fält "PM".
Det funkar finfint med en hyfsat lång sträng, men när den blir för lång får jag ett sql exception. "högertrunkering av strändata". Finns det ngn begränsning av hur lång strängen får vara som man skickar från en servlet.
Servlet, begränsning av mängd data
8 svar · 466 visningar · startad av neversleep
Det finns begränsningar men inga som begränsas utifrån servleten.
Begränsning nr 1. Data som skickas med HTTP-GET får max vara 2-3 Kb tror jag. begränsningen ligger i HTTP-protokollet. Uppstår detta problem så skall du använda HTTP-POST istället.
Begränsning nr 2. Data som skall läggas in i databasen får inte vara större än vad databasens begränsningar. Begränsningen ligger i databasen eller i jdbc-drivrutinen.
------------------
det finns ingen.info tillgänglig.
"inside every human being there's an american trying to get out".
När du skickar data till en servlet så har man möjlighet att skicka det som text eller som multitype (kolla hos PytteMjuk). Om man skickar det som multitype så kan man skicka nästa hur mycket som helst, inklusive bilder. Som plain text finns det begränsingar. Dessa har ibland med vilken web browser man använder sig av och ibland beror den på servern (men väldigt sällan).
Sedan borde det göra skillnad om man använder post eller get metoderna. GET är till för att hämta saker, som document, och med denna metod så skickar man bara querysträngen. Jag har för mig att 255 tecken är max och att 15 tecken går åt till headern, så 240 är den faktiska maxlängden.
POST är mer som ett anrop för att "nu finns det information att hämta" och kan därför ta emot megabyte med data.
Jag rekommenderar varmt "Java Servlet Programming, 2nd edt" av Jason Hunter m.fl. från O'Reilly... Jag är med bland m.fl.... :-)
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
Jag har för mig att 255 tecken är max och att 15 tecken går åt till headern, så 240 är den faktiska maxlängden.
Nej. Som jag skrev ovan "får max vara 2-3 Kb tror jag". Byt ut "tror jag" mot "vet jag" eftersom jag vet att det rör sig om minst 2Kb.
------------------
det finns ingen.info tillgänglig.
"inside every human being there's an american trying to get out".
Vi citerar:
"Because GET requests thoretically shoulnd't need to send large amounts of information, some servers limts the lenght of the URLs and query strings to about 240 characters." - Java Servlet Programing, Hunter, 2000.
Alltså är det beroende på servern. Det är en viss skillnad mellan 240 tecken och 2 kb.
/Lime
------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk
[Redigerat av Lime den 24 okt 2001]
[Redigerat av Lime den 24 okt 2001]
Tack för era svar.
Jag testade att använda mig av POST istället när jag skickar, vilket inte heller funkade.
"java.sql.sqlException: [Drivrutin för MS accsess] Högertrunkering av data"
Får kanske tolka det som om begränsningen ligger i Access och det ligger väl lite utanför det här konfaämnet :)
Tack för hjälpen.
Vi citerar även att:
The HTTP protocol does not place any a priori limit on the length of
a URI. Servers MUST be able to handle the URI of any resource they
serve, and SHOULD be able to handle URIs of unbounded length if they
provide GET-based forms that could generate such URIs. A server
SHOULD return 414 (Request-URI Too Long) status if a URI is longer
than the server can handle (see section 10.4.15).Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.
RFC 2616 HTTP 1.1
Det handlar alltså inte om en begränsning i specifikationen. Det handlar om att "older client or proxy implementations" möjligtvis inte kan hantera URIs som är längre än 255 bytes, vilket självklart mest är av arkeologiskt intresse eftersom dessa med stor sannolikhet dog ut samtidigt som dinosaurierna.
------------------
det finns ingen.info tillgänglig.
"inside every human being there's an american trying to get out".
Det är inte databasen som begränsar (en kolumn av typen memo kan innehålla åtminstone 65K data.)
Låter mer som ett JDBC-problem.
------------------
essentitia preter non sans multiplicandum
Jepp, det är nog ett JDBC-problem. Jag drar mig till minnes att jag hade ett liknande problem förut när jag jobbade mot en Oracle-DB. Oracles JDBC klarade bara en viss storlek på strängar som lades in i ett PreparedStatement, översteg datat den längden så var man tvungen att öppna en ström mot databasen och streama in datat. Kanske är det något liknande som krävs här?
------------------
det finns ingen.info tillgänglig.
"inside every human being there's an american trying to get out".