webForumDet fria alternativet

Implementering av javakod i servlet?

6 svar · 341 visningar · startad av Mattias

MattiasMedlem sedan mars 2000205 inlägg
#1

Som jag nämnt i en annan tråd har jag tagit mig till final i en tävling för idéer
till mobila tjänster (MISA) där jag nu håller på
att utveckla min applikation själv via Java/MySQL. Tyvärr är jag helt novis på
JAVA/SQL och har därför lyckligtvis fått hjälp från ett par personer att komma igång
lite med min tjänst.

Men eftersom de jobbar under dagarna och tiden börjar bli knapp (deadline på söndag
kl 23:59) lägger jag ett inlägg här och hoppas på att någon är snäll nog att hjälpa
mig vidare. De som hjälpt mig har även sagt att det inte rör sig om någon speciellt
svår programmering som ska behövas för att min lösning ska fungera.

Det som ska hända i servletkoden är att:

1. Orden i ett inkommande SMS, vars text ligger i "message", ska genomsökas och sedan
styras vidare till aktuellt ett SQL-uttyck som utför en manipulering av databasen om
kommandona "reg", "exp", "mobnr", "del", "deluser" finns i den inskickade texten. Om
"exp"-kommandot anges ska det även vara ett datum efter (YYMMDDHHMM), vilket
stringen "arg" anger i koden nedan.

2. OM inget av ovanstående kommando anges styrs koden till ett annat SQL-uttryck.

3. Manipulering av databasen via SQL-uttryck (som är färdiga)

4. Ivägskickning av SMS-meddelande till avsändaren med inlagd eller hämtad text.

Jag har som sagt redan fått lite hjälp kring koden till
delningen/kontrollen/styrningen och den skulle kunna se ut ungefär så här:

String cmd="";
String arg="";

if (message.startsWith("misa17")) {
message = message.substring(7).toLowerCase().trim();
int splitPos = message.indexOf(" ");

if (splitPos != -1) {
cmd = message.substring(0, splitPos);
arg = message.substring(splitPos+1);
} else {
cmd = message;
}
} else {

// Meddelandet börjar inte med misa17, skicka felmeddelande.

}

if ("reg".equals(cmd)) {

// Här ska SQL för REGISTRERING ska placeras

} else if ("exp".equals(cmd)) {

// Här ska SQL för INSKICKNING AV MEDDELANDE ska placeras

} else if ("del".equals(cmd)) {

// Här ska SQL för RADERING ska placeras

} else if ("deluser".equals(cmd)) {

// Här ska SQL för RADERING AV KONTO ska placeras

} else {

// Om inget kommando angivet, kolla om kommandot är ett telefonnummer
// och isf SQL för kontroll och utplockning från databasen 

här

}

Problemet är nu hur jag ska lägga in denna kod i själva servletkoden så att den
"flyter". Jag vet VAR i serlvetkoden ovanstående kod ska placeras, men inte hur jag
ska integrera/implementera den i koden. Det är säkert "jätteenkelt", men jag är som
sagt okunnig på Java. Här är den kod där delnings/styrningskoden ska läggas in. Just
nu sker endast en inläggning av någr poster i DBn, som inte påverkas av vilket
meddelande användaren skickar in. Men jag vill alltså kunna påverka vad som läggs in
i DBn via texten ("message"-variabeln) i det inskickade SMS-meddelandet.

..... 
        destAddr = origAddr;  

// I origAddr ovanfanns avsändarnumret till personen som skickade in SMS:et,
// vilken nu läggs över till den adress "retur"-SMS:et ska skickas till.
 
	String text = "This is the "+this.getClass().getName() + " class";
        String mySqlData = "";
        
        // connect to MySql database

        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        try 
        {
	    Class.forName("xxx.xxx.xx.mysql.Driver");
            
            // Koppla upp till min DB
	    String url = "jdbc:mysql://localhost/misa17";
            
	    con = DriverManager.getConnection(url, "misa17", "PasswordTillDatabasen");
	    
            // Exempel på SQL-manipulering nedan
            stmt = con.createStatement();            
            rs = stmt.executeQuery("INSERT INTO tabell VALUES (2,'0707777777','xyz')");
                            
            String str = "";
            
                         
            while( rs.next() ) 
            {
                         str = rs.getString("variabel"); 

// I "variabel" ovan kan t.ex det fält som ska plockas från DBn vid ovanstående
// SQL-fråga placeras för att senare i koden infogas i det SMS som skickas tillbaka. 
// Eftersom avsändaren lägger in flera poster i DBn via SMS-medelandet så vill jag 
// kunna plocka ut ALLA dessa inlagda posterna till SMS-meddelandet som skickas
// tillbaka till avsändaren.
                         
                         mySqlData = mySqlData + str ;
            }
        }

        catch( Exception e ) 
        {
            mySqlData = e.getMessage();
        }
        
        finally
        {
            try {
                rs.close();
                stmt.close();
                con.close();
            } catch (Exception e) {
                // could not close connection
            }
        }
        
        // printPage(response.getWriter(), text, mySqlData);

	message = mySqlData; 

// I den borttagna koden nedan skickas det som precis tilldelats 
// "message" via SMS till avsändaradressen. 
// I den färdiga applikationen ska "message" alltså 
// innehålla det man lagt in i DBn eller det som man hämtat från DBn.

.....

Fråga gärna om det är nåt som är otydligt/oklart i mitt inlägg. Det är lite svårt att
veta hur mycket man ska förklara. Jag är i alla fall mycket tacksam för alla tips
och all hjälp jag kan få eftersom det som sagt är deadline på söndag och jag märker
att jag faktiskt har en ärlig chans att bli klar med min applikation!

MattiasMedlem sedan mars 2000205 inlägg
#2

Ojdå. Märkte att inlägget sträcker sig långt till höger. Vet inte vad det beror på. Kanske att jag skrev det i Notepad och sedan klistrade in det i webForum-textrutan när jag skulle skicka det?

Har nu kapat de långa meningarna så att det blivit mer lättläst. Detta är alltså den enda redigeringen jag gjort på ursprungsinlägget.

PeWMedlem sedan juni 200010 432 inlägg
#3

Problemet är nu hur jag ska lägga in denna kod i själva servletkoden

Kanske inget direkt svar... men ändå->

Oavsett programmeringsspråk bör man bygga sig en design på ett papper om hur programmet ska fungera och därefter bygga med lite pseudokod som behandlar varje delproblem. Som pseudo kan du skriva vad som helst, men ju närmare riktig kod desto bättre.
Har man väl gjort detta är det lätt att se var nånstans i koden man kan bygga till, ta bort eller på andra sätt förändra.

Förstår på dig som att du sitter med koden och vill peta in en funktion som du inte vet vart den hör hemma... därav min eventuellt diffusa kommentar ovan, för med denna metod blir det mesta ganska simpelt även om man är ovan vid ett speciellt språk. Om inte annat så se mitt svar som ett gott råd :)

MattiasMedlem sedan mars 2000205 inlägg
#4

Ja, du har definitivt rätt, vilket jag om inte annat kommit på den senaste veckan då jag strukturerat upp arbetet och händelsemomenten hyfsat bra iaf.

Det som gjort det hela extra förvirrat är dock att jag inte alls trixat med vare sig Java/XML/MySQL eller den utvecklingsmiljö som mobila tjänster använder sig av, vilket gjorde det hela ganska ogreppbart. Har man en LITEN koll på utvecklingsmiljön så blir det genast lite lättare att gå metodiskt tillväga, för då vet man förhoppningsvis vad koden kan och inte kan göra och hur lätt/svårt det är.

Men nästa gång jag tar mig an ett liknande projekt ska jag hur som helst försöka göra en mer detaljerad beskrivning av tjänsten redan i inledningsskedet!

PeWMedlem sedan juni 200010 432 inlägg
#5

Visst, men egentligen ska det inte spela nån roll vilken utvecklingsmiljö man har. Det är ju vid implementeringen av sin pseudo som man kollar in det och då är ju jobbet med "när var hur" redan gjort :)

MattiasMedlem sedan mars 2000205 inlägg
#6

Japp, men jag blev som sagt så pass förskräckt av tanken på allt jag var tvungen att sätta mig in i så att jag hade svårt att koncentrera mig på att strukturera applikationens händelser. Men nu vet jag ju det är bättre att lugna ner sig och att inledningsvis bortse från det tekniska.

Men det är alltid lätt att vara efterklok. ;)

PeWMedlem sedan juni 200010 432 inlägg
#7

Det är svårt att se nåt "flytande" i din kod ö.h.t som du presenterat här då det är spikrakt stukturerat rakt upp och ned.

Jag vet VAR i serlvetkoden ovanstående kod ska placeras, men inte hur jag ska integrera/implementera den i koden.

Nåja.... jag förslår att du kaplsar in hela funktionaliteten i en klass. I denna klass har du ovanstående kodsnuttar i två olika metoder och till metoden som styr tar du messet som inargument. Den andra metoden som utför replyen kan ju ta DB:n som inargument.
Sen kör du trådat i huvudprogrammet och loopar runt för att få det att flyta. En ny tråd och en ny instans för varje ny kontakt m.a.o

Inte alls särskilt JAVA specifikt utan mer OOP-style, fast i tillämpningen blir det ju JAVA ;)

135 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)