RazorMedlem sedan maj 200067 inlägg 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)?
Mvh Razor http://www.razorsedge.nu
spangoMedlem sedan juni 20008 205 inlägg Jajemensan, det går så bra så. Kolla på http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html
------------------
Ta dig i dalen och gör mig till spango
RazorMedlem sedan maj 200067 inlägg Tack för ditt svar spango!
Men funkar verkligen koden i det exemplet i en Applet? Det finns ju vissa restriktioner vad gäller den kommunikation som en Applet kan delta i.
Dessutom vet jag inte riktigt hur jag skall ta emot datan från Appleten i ASP-scriptet. Post, Get eller vad?
Är det någon här som har erfarenhet av Applet/ASP-kommunikation? Jag tror jag skulle behöva lite kodexempel.
Mvh Razor http://www.razorsdge.nu
emissionMedlem sedan dec. 19996 721 inlägg Det absolut enklaste är att skicka med variablerna i en querystring, dvs. genom att använda GET.
Om appleten hämtar test.asp?id=45&vote=1
så kan du lätt hämta dessa i ASP med request.querystring("id") och request.querystring("vote")
POST är en liten smula krångligare, men inte oöverkomligt.
RazorMedlem sedan maj 200067 inlägg 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:
import java.io.*;
import java.net.*;
class Connection
{
private String strStringToSend;
private static String strBaseURL;
public static void Send(String strPollID, String strSelectedCheckbox)
{
strBaseURL = "http://www.razorsedge.nu/pollapplet/poll.asp";
try
{
String strStringToSend = URLEncoder.encode("?" + "ID=" + strPollID + "&" + "VALUE=" + strSelectedCheckbox);
URL url = new URL(strBaseURL + strStringToSend);
URLConnection connection = url.openConnection();
connection.setDoInput(true);
}
catch(IOException ie)
{
System.out.println("Kunde inte ansluta till " + strBaseURL + " !");
}
}
}
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!
Vad gör jag för fel?
Mvh Razor http://www.razorsedge.nu
spangoMedlem sedan juni 20008 205 inlägg Frågetecken och ampersands i URL:en ska inte URL-kodas:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
String strStringToSend = "?ID=" + URLEncoder.encode(strPollID) + "&VALUE=" + URLEncoder.encode(strSelectedCheckbox);
Nu borde din querystring funka bra.
------------------
Ta dig i dalen och gör mig till spango
RazorMedlem sedan maj 200067 inlägg Nix!
Det funkar ej. ASP-scriptet jag använder mig av på servern för att testa ser ut så här:
<%
Dim strID
Dim strValue
Dim fo
Dim tf
Dim Path
Path = Server.MapPath("poll.txt")
strID = Request.QueryString("ID")
strValue = Request.QueryString("Value")
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();
Observera att stavningen på "Value" har ändrats!
:( Razor http://www.razorsedge.nu
[Redigerat av Razor den 08 jan 2001]
spangoMedlem sedan juni 20008 205 inlägg <font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
String strParameters = "?ID=" + URLEncoder.encode(strPollID) + "&Value=" + URLEncoder.encode(strSelectedCheckbox);
URL url = new URL(strURL);
Öhh, du skapar URL:en utan querystring...
URL url = new URL(strURL + strParameters); borde det väl vara?
------------------
Ta dig i dalen och gör mig till spango
RazorMedlem sedan maj 200067 inlägg Jag har även gjort på följande sätt utan resultat:
String strParameters = "?ID=" + URLEncoder.encode(strPollID) + "&Value=" + URLEncoder.encode(strSelectedCheckbox);
URL url = new URL(strURL + strParameters);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
Mvh Razor http://www.razorsedge.nu
[Redigerat av Razor den 09 jan 2001]
RazorMedlem sedan maj 200067 inlägg 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?????
import java.io.*;
import java.net.*;
class Connection
{
public static void Send(String strURL, String strPollID, String strSelectedCheckbox)
{
try
{
URL url = new URL(strURL);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
PrintWriter out = new PrintWriter(conn.getOutputStream());
out.print("ID=" + URLEncoder.encode(strPollID) + "&Value=" + URLEncoder.encode(strSelectedCheckbox));
out.flush();
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
{
System.out.println(inputLine);
}
in.close();
}
catch(Exception e)
{
System.out.println("Kunde inte ansluta till " + strURL + " !");
}
}
}
Mvh Razor
http:www.razorsedge.nu
spangoMedlem sedan juni 20008 205 inlägg Appletar får av säkerhetsskäl inte ansluta till andra domäner än de hämtades ifrån. Får du några felmeddelanden?
------------------
Visst blir Guns galosch basal?
Skärper du dig sådär på lur?
RazorMedlem sedan maj 200067 inlägg Det är samma domän som appleten laddas ned från.
Efter lite trixande har jag dock kommit fram till en kod som funkar i Explorer men tyvärr inte i Netscape:
import java.io.*;
import java.net.*;
class Connection
{
private static int intResult;
public static int Send(String strURL, String strPollID, String strSelectedCheckbox)
{
try
{
intResult = 1;
URL url = new URL(strURL);
URLConnection conn = url.openConnection();
conn.setDefaultRequestProperty("CONTENT_TYPE","application/x-www- form-urlencoded");
conn.setDoOutput(true);
conn.setUseCaches(false);
PrintStream out = new PrintStream(conn.getOutputStream());
out.println("ID=" + URLEncoder.encode(strPollID) + "&");
out.println("Value=" + URLEncoder.encode(strSelectedCheckbox) + "\n");
out.flush();
out.close();
DataInputStream in = new DataInputStream(conn.getInputStream());
StringBuffer response = new StringBuffer();
String inputLine;
while ((inputLine = in.readLine()) != null)
{
response.append(inputLine + "\n");
}
in.close();
}
catch(Exception e)
{
System.out.println("Kunde inte ansluta till " + strURL + " !");
intResult = 0;
}
return intResult;
}
}
Vad gäller Netscape så visas ju appleten och verkar fungera som den skall men parametervärdena överförs inte till ASP-scriptet. Undrar varför?
Jag får ett meddelande vid kompileringen enligt nedan:
Note: Connection.java uses or overrides a deprecated API.
Note: Recompile with -deprecation for details.
Exit code: 0
No Errors
Mvh Razor http://www.razorsedge.nu
[Redigerat av Razor den 11 jan 2001]
spangoMedlem sedan juni 20008 205 inlägg 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?
------------------
Visst blir Guns galosch basal?
Skärper du dig sådär på lur?
[Redigerat av spango den 13 jan 2001]
RazorMedlem sedan maj 200067 inlägg 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?
Mvh Razor
RazorMedlem sedan maj 200067 inlägg Hej igen!
Problemet löst via lite assistans från andra källor. Det var tydligen en fråga om stora eller små bokstäver ;-)
Mvh Brynar
spangoMedlem sedan juni 20008 205 inlägg Det var väl för väl då! :)
------------------
Det är ingen konst att vara modig om man inte är en #¤&%£ fegpotta!