Jag har nyligen börjat studera Java och bl.a. gjort några enklare Applets. Nu undrar jag om det, på något sätt, går att skicka information från en Applet till mina ASP-scriptfiler på webbservern?
T.ex: Om jag skulle vilja ha ett omröstningsformulär i en Applet. Kan jag då skicka rösten till en ASP-fil på servern för bearbetning av informationen (t.ex. lägga in den i en databas)?
Alltså, jag får det inte att funka! Jag anropar mitt ASP-skript enligt nedan och försöker läsa av QueryStringen på vanligt sätt men den är alltid tom! Så här ser Java-koden ut:
Jag anropar funktionen i denna klass från själva appleten. Jag har testat målskriptet (poll.asp) via andra vägar så jag vet att den delen funkar. Jag har även testat att byta ut setDoInput mot setDoOutput utan resultat!
Set fo = Server.CreateObject("Scripting.FileSystemObject")
Set tf = fo.OpenTextFile(Path,2,True)
tf.WriteLine(strID & ":" & strValue & ":" & Now)
tf.Close
Set tf = Nothing
Set fo = Nothing
%>
Skriptet skall alltså skriva ut första parametern, sedan ett kolon, sedan andra parametern, ett kolon till och tillsist aktuellt klockslag (så jag vet att filen uppdaterades). Det enda som skrivs till textfilen på servern är:
::2001-01-08 23:16:21
Alltså två st kolon och aktuell tid. Parametrarna följer inte med. Det funkar varken i IE eller NS.
Jag har även testat följande Javakod utan resultat (i try-blocket):
String strParameters = "?ID=" + URLEncoder.encode(strPollID) + "&Value=" + URLEncoder.encode(strSelectedCheckbox);
URL url = new URL(strURL);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
PrintWriter out = new PrintWriter(connection.getOutputStream());
out.println(strParameters);
out.flush();
out.close();
Koden nedan snodde jag från ett av JavaSofts forum och ändrade lite. Nu får jag det att funka när jag kör genom Applet View:ern mot min pws-server lokalt. Det funkar dock inte när jag kör genom en webbläsare, varken lokalt eller mot mitt webbhotell. Varför?????
Att du använde några saker som är deprecated är ingen nyhet; java.applet.Applet är deprecated, dvs ersatt av en bättre klass (javax.swing.JApplet) som dock inte stöds av några webbläsare utan speciell plugin.
Hm, att det funkar i IE men inte Netscape är ju störande. Får du inga meddelanden alls i Java-konsolen? Får du tillbaka hela ASP-sidan?
När jag försöker testa i RealJ så funkar det inte alls. När jag försöker kontakta servern får jag meddelande om något eller några exceptions enligt nedan:
exception !!!!
java.security.AccessControlException: access denied (java.net.SocketPermission www.razorsedge.nu resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:272)
at java.security.AccessController.checkPermission(AccessController.java:399)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1042)
at java.net.InetAddress.getAllByName0(InetAddress.java:559)
at java.net.InetAddress.getAllByName0(InetAddress.java:540)
at java.net.InetAddress.getByName(InetAddress.java:449)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:257)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:277)
at sun.net.www.http.HttpClient.New(HttpClient.java:289)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:379)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:426)
at Connection.Send(Connection.java:32)
at PollApplet.actionPerformed(PollApplet.java:71)
at java.awt.Button.processActionEvent(Button.java:329)
at java.awt.Button.processEvent(Button.java:302)
at java.awt.Component.dispatchEventImpl(Component.java:2595)
at java.awt.Component.dispatchEvent(Component.java:2499)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:319)
at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:103)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:84)
Exit code: 0
No Errors
I både Explorer och Netscape får jag tillbaka det jag vill från ASP-scriptet. ASP-scriptet ser ut som följer:
<%
Dim strID
Dim strValue
Dim fo
Dim tf
Dim Path
Path = Server.MapPath("poll.txt")
strID = Request("ID")
strValue = Request("VALUE")
If strID = "" Or strValue = "" Then
Response.Write("Kommunikationsproblem !")
Response.Flush
Else
Response.Write("Datan har lagrats !")
Response.Flush
End If
Set fo = Server.CreateObject("Scripting.FileSystemObject")
Set tf = fo.OpenTextFile(Path,2,True)
tf.WriteLine(strID & ":" & strValue & ":" & Now)
tf.Close
Set tf = Nothing
Set fo = Nothing
%>
Som du ser handlar det bara om ett enkelt testskript för att kolla om appleten och ASP-scriptet kommunicerar korrekt.
För att kolla att appleten verkligen "kontaktar" scriptet skriver jag de skickade värdena samt aktuell tid till en textfil. Om jag använder Explorer skrivs både värdena och tiden in och appleten tar emot strängen "Datan har lagrats !". Om jag använder mig av Netscape skrivs endast tiden in och appleten tar emot strängen "Kommunikationsproblem !".
Alltså: Netscape kontaktar scriptet men postar inga värden till det!?
För att vara lite framfusig. Hur ser en fungerande kod ut?