# Session-Parameter setzen?



## Mattze_1987 (1. Mrz 2012)

Hallo liebe und hilfreiche Forenmitglieder,

ich bin gerade dabei, folgendes Beispiel nachzuprogrammieren: linkedin Java API und stieß dabei auf folgenden Abschnitt, mit dem ich nicht viel anfangen konnte:


```
session.setAttribute("LINKEDIN_TOKEN", token);  
session.setAttribute("LINKEDIN_TOKEN_SECRET", tokenSecret);  
session.setAttribute("LINKEDIN_REQUEST_TOKEN", requestToken );  
session.setAttribute("LINKEDIN_AUTH_URL", authUrl );
```

Set all this objects in session.Inorder to proceed with the functions.

Ich vermute mal stark, dass hier eine HTTP-Session gemeint ist, allerdings weiß ich sie auf dieses Beispiel bezogen nicht so recht zu implementieren. Ich habe zwar einfach vor den session-Aufrufen mittels


```
HttpSession session = request.getSession(true);
```

eine Session vorgeschaltet, aber bin mir bezüglich der Richtigkeit nicht sicher und zudem wird der Requestbefehl nicht erkannt. Ich wäre hier für Lösungsvorschläge sehr dankbar.

Gruß


----------



## SlaterB (1. Mrz 2012)

was ist jetzt genau die Frage?

> aber bin mir bezüglich der Richtigkeit nicht sicher
dass du mit getSession() die Session bekommst? 
doch du kannst dir ziemlich sicher sein dass Session die Session ist und getSession() ein Befehl ist um die Session zu getten 

> und zudem wird der Requestbefehl nicht erkannt.
welch ungenaue Beschreibung die beliebige Interpretation zulässt,
- wird 'request' nicht erkannt weil es keine sichtbare Variable diesen Namens an dieser Stelle gibt?
- ist die genannte Methode nicht vorhanden
- oder ..?


im Web in J2EE gibt es Sessions, diese Tatsache sollte grundlegend bekannt sein, sonst wirds in der Tat schwer,
Sessions kann man natürlich irgendwo abholen und u.a. Attribute darin setzen,
was ist unklar?


----------



## Mattze_1987 (1. Mrz 2012)

Erstmal sorry für die ungenaue Beschreibung. Zunächst einmal war ich mir einfach nicht sicher, ob mit der Session überhaupt eine http-Session gemeint ist, dem scheint aber wohl so.

Nun zum Request: Der Code ist laut Eclipse völlig valide, alles tutti, nur erkennt er den request-Befehl nicht, weil er nirgends deklariert wurde, logisch. Fraglich wäre natürlich jetzt:

1) Wo muss der request deklariert werden?
2) wie erstelle ich eine request-Instanz bezogen auf mein Beispiel (welche Parameter müssen übergeben werden)?

Wobei ich hier auch vermute, dass ein HttpRequest gemeint ist, welcher linked-J-bezogen ist.


----------



## nillehammer (1. Mrz 2012)

Ein HTTP-Request wird in mehreren Schritten vom Webcontainer (bspw. Tomcat) verarbeitet, bis der Response zurück an den Browser gesendet wird. Während dieser Verarbeitung will man ja möglicherweise Variablen/Werte (zwischen-)speichern. Dafür gibt es drei Möglichkeiten, die sich in ihrer Sichtbarkeit und in der Lebenszeit unterscheiden. Diese Möglichkeiten nennt man Scopes:

Request: Variablen leben bis zum Versand des Responses und sind nur bei der Bearbeitung des entspr. Requests sichtbar. Hier liegen z.B. GET- und Post-Parameter drinnen.
Session: Manche Werte will man auch zwischen Requests behalten (bspw. Login-Infos eines Users). Diese Werte leben, solange eine Session offen ist. Eine Session ist i.d.R. vom ersten Aufruf irgendeiner Seite bis zu einem bestimmten Ende-Ereignis (automatischer Timeout/User loggt sich aus/ User schließt den Browser) aktiv
Application: In ganz seltenen Fällen will man sogar Daten über die Lebenszeit einer Session hinaus speichern oder global verfügbar haben. Dann nimmt man Application.



> eine Session vorgeschaltet, aber bin mir bezüglich der Richtigkeit nicht sicher und zudem wird der Requestbefehl nicht erkannt. Ich wäre hier für Lösungsvorschläge sehr dankbar.


Das war schon der richtige Ansatz. Bei "request" handelt es sich aber nicht um einen Befehl, sondern einen Methoden-Parameter vom Typ HTTPRequest, der in den doXXX (doGet, doPost etc.) übergeben wird. Nutztz Die LinkedIn-API plain Servlets oder hast Du ein anderes Framework? Da sind die Methodennamen oder der Weg, sich einen HTTPRequest zu besorgen, möglicherweise anders.


----------



## nillehammer (1. Mrz 2012)

> 2) wie erstelle ich eine request-Instanz bezogen auf mein Beispiel (welche Parameter müssen übergeben werden)?


Garnicht. Das übernimmt der Webcontainer für Dich. Das ist übrigens einer der ersten Schritte, die der Container macht. Je nach Framework hast Du Möglichkeiten, Dir den (HTTP-)Request zu besorgen. Bei plain Servlets bspw. in den doXXX-Methoden


----------



## SlaterB (1. Mrz 2012)

> nur erkennt er den request-Befehl nicht, weil er nirgends deklariert wurde, 
ein Befehl kann man doch nicht deklarieren, etwas vorsichtiger weiterhin,
schreibe einfach die Fehlermeldung des Compilers zur Zeile, das kann nie falsch sein


wo du deinen request herbekommst kann von außen niemand ahnen, selber 'erstellen' erscheint in der Regel unklug,
der Standard ist ein Servlet, dessen doGet()-Methode aufgerufen wird, der request ist der Parameter, kommt aus dem Framework,
in dieser Methode ist request vorhanden, evtl. anders benannt, in Untermethoden muss er übergeben werden


----------



## JohannisderKaeufer (1. Mrz 2012)

Dem Blogeintrag fehlt etwas.

Eine Einleitung in der er beschreibt, was er überhaupt tun möchte.



> I have just started to work in this API with Java .bcoz am basically a Java developer.



Das ist nicht wirklich hilfreich und hilft dir jetzt auch nicht weiter.

Eine Einleitung auf Deutsch könnte so aussehen. 

"Verwendung der LinkedIn-Api zur User-Authentification innerhalb einer Servlet-Anwendung".

Du hast anfangs ein Servlet

```
class MyServlet extends HttpServlet{
  public void doGet/doPost(HttpServletRequest request, HttpServletResponse response){
  //In dieses gehört der Code hinein der in dem Blog beschrieben wird.
  //Dann wird auch request und session gefunden.
  }
}
```


----------



## Mattze_1987 (1. Mrz 2012)

[...]Nutzt Die LinkedIn-API plain Servlets oder hast Du ein anderes Framework? Da sind die Methodennamen oder der Weg, sich einen HTTPRequest zu besorgen, möglicherweise anders.[/QUOTE]

Hier werden wir wohl meinen ersten Vorgehens- und Denkfehler feststellen. Ich habe lediglich den im Link des ersten Posts verwendeten Code genutzt, API-Servlets sind in keinster Weise bei mir eingebunden. Wie ist da die optimale Vorgehensweise? Bin in der Materie leider nicht so versiert.


----------



## Mattze_1987 (1. Mrz 2012)

Ich bin mal so frei und poste meinen bisherigen Code:


```
public class Linkedkeys extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response){

		HttpSession session = request.getSession(true);
		final LinkedInOAuthService oauthService = LinkedInOAuthServiceFactory.getInstance().createLinkedInOAuthService("0zaog2mztsmx", "BpAKorZ4Yl2JH2EF");
		LinkedInRequestToken requestToken = oauthService.getOAuthRequestToken();
		String authUrl = requestToken.getAuthorizationUrl();
		requestToken = (LinkedInRequestToken)session.getAttribute("requestToken");
		String oauthVerifier = request.getParameter("oauth_verifier");
		LinkedInAccessToken accessToken = oauthService.getOAuthAccessToken(requestToken, oauthVerifier);
		final LinkedInApiClientFactory factory = LinkedInApiClientFactory.newInstance("0zaog2mztsmx", "BpAKorZ4Yl2JH2EF");
		final LinkedInApiClient client = factory.createLinkedInApiClient(accessToken);

		Person profile = client.getProfileForCurrentUser(EnumSet.of(ProfileField.ID));  
		System.out.print("CurrentUsers Profile-Id >>"+profile.getId());  
		
	}
	
	public static void main(String[]args){
		Linkedkeys keys=new Linkedkeys();
	}
	
}
```

Mein folgendes Problem ist (sorry, falls ich zu hart nerve, aber bei webprogrammierung haperts bei mir immer), dass ich absolut keinen Schimmer habe, wie ich diese Methode nun aufrufen soll, da mir (die wahrscheinlich gar nicht benötigten/zur Verfügung stehenden) request- und response-Parameter fehlen.


----------



## nillehammer (1. Mrz 2012)

Du selbst rufst die Methoden überhaupt nicht auf. Du programmierst die Servlets und mappst sie in der web.xml auf URLs. Wenn eine URL passt, ruft der Webcontainer automatisch die richtige doXXX-Methode auf. Bspw. Bei klicken auf einen Link die doGet-Methode oder bei absenden eines Formulars die doPost-Methode. Bevor wir hier jetzt aber die Dokumentation von JEE-Web neu schreiben, ist es aber vielleicht ratsam, wenn Du Dich da etwas einliest, z.B. hier: Java Servlet Technology

Wobei noch anzumerken ist, dass heute eher selten direkt mit Servlets programmiert wird, sondern eher mit Webframeworks wie bspw. JSF


----------



## Mattze_1987 (1. Mrz 2012)

Vielen Dank für den Support so weit, hat mir mehr oder minder geholfen. Mehr insofern, dass ich jetzt weiß, welche Technologie verwandt wird, auf der anderen Seite weniger, weil das mein ursprüngliches Vorhaben, mittels einer lokalen Anwendung einen Accestoken und Accesssecret zu erhalten. Dass das Ganze auf Servlets aufbaut finde ich insofern recht unglücklich, da ich die erhalenen/zu versendenden Daten gerne in einer eigenen GUI darstellen möchte, was mit Servlets recht umständlich scheint.


----------

