URL auslesen und Weiterleiten
JensP
- java
Hallo zusammen,
ich habe eine JSP Seite programmiert, wo ich die URL auslese und je nachdem wer eingeloggt ist, auf weiter Seiten weiterleite.
Mein code sieht derzeit so aus:
<html>
<head><title>test</title></head>
<body style="font-family:sans-serif;padding-top:15px;">
<%
String Weiterleitung1="test1.html";
String Weiterleitung2="test2.html";
String Weiterleitung3="error.html";
String GSS = request.getParameter("GSS");
String board = request.getParameter("board");
String myvar = request.getParameter( "login" );
if (myvar == (request.getParameter("GSS"))) {
response.sendRedirect(Weiterleitung1);
}
else {
if (myvar == (request.getParameter("board"))) {
response.sendRedirect(Weiterleitung2);
}
else{
response.sendRedirect(Weiterleitung3);
}
}
%>
</body>
</html>
Es gibt 2 Benutzergruppen. Zum einen GSS und zum anderen "board". Wenn ich die in die URL nach Login "GSS" (?login=GSS) reinschreibe, werde ich dann auch weitergeleitet auf die Test1.html. Allerdings tut er das nicht sobald ich "board" angebe.
Irgendwie scheint er nicht in das else zu springen und ich weiss nicht warum.
Weiss jemand Rat?
Grüße,
Jens
Moin!
Mein code sieht derzeit so aus:
Ein etwas grausliger Code.
<html>
<head><title>test</title></head>
<body style="font-family:sans-serif;padding-top:15px;">
Das geht ja noch, obwohl CSS eigentlich nicht inline, sondern separat in der CSS-Datei platziert gehört.
<%
String Weiterleitung1="test1.html";
String Weiterleitung2="test2.html";
String Weiterleitung3="error.html";
Das hier geht noch in Ordnung.
String GSS = request.getParameter("GSS");
String board = request.getParameter("board");
String myvar = request.getParameter( "login" );
Warum kopierst du diese ganzen Parameter? Und warum nutzt du die Kopien dann später nicht?
Entweder kopieren und dann die Kopien nutzen, oder nicht kopieren! Ich bin für "nicht kopieren".
if (myvar == (request.getParameter("GSS"))) {
Du vergleichst den URL-Parameter "login" mit dem URL-Parameter "GSS". Ist es das, was du willst? Wann wäre hier Gleichheit zu erwarten?
response.sendRedirect(Weiterleitung1);
}
else {
if (myvar == (request.getParameter("board"))) {
Hier dasselbe mit "login" und "board".
response.sendRedirect(Weiterleitung2);
}
else{
response.sendRedirect(Weiterleitung3);
}
}
%></body>
</html>
Und warum überhaupt das Gehampel mit HTML-Ausgabe, wenn du sowieso Redirects ausgibst?
Es gibt 2 Benutzergruppen. Zum einen GSS und zum anderen "board". Wenn ich die in die URL nach Login "GSS" (?login=GSS) reinschreibe, werde ich dann auch weitergeleitet auf die Test1.html. Allerdings tut er das nicht sobald ich "board" angebe.
Irgendwie scheint er nicht in das else zu springen und ich weiss nicht warum.
Wie gesagt: Wildes Durcheinander der Variablen. Räum mal auf!
- Sven Rautenberg
hi,
String GSS = request.getParameter("GSS");
String board = request.getParameter("board");
String myvar = request.getParameter( "login" );if (myvar == (request.getParameter("GSS"))) { [...]
if (myvar == (request.getParameter("board"))) {
Warum hier eigentlich erneut request.getParameter?
Du hast dir die Werte der Parameter GSS und board doch weiter oben schon besorgt [1], und in den Strings GSS und board abgelegt.
Es gibt 2 Benutzergruppen. Zum einen GSS und zum anderen "board". Wenn ich die in die URL nach Login "GSS" (?login=GSS) reinschreibe, werde ich dann auch weitergeleitet auf die Test1.html. Allerdings tut er das nicht sobald ich "board" angebe.
Du meinst, du rufst die Ressource ein mal mit ?login=GSS und einmal mit ?login=board auf?
Dann hast du in beiden Fällen genau einen GET-Parameter namens login - mit zwei unterschiedlichen Werten, einmal GSS, einmal board.
Irgendwie scheint er nicht in das else zu springen und ich weiss nicht warum.
Mit
String GSS = request.getParameter("GSS");
String board = request.getParameter("board");
versuchst du GET-Parameter zu ermitteln, die gar nicht vorhanden sind.
gruß,
wahsaga
[1] Sofern sie vorhanden wären.
hi,
hi
Warum hier eigentlich erneut request.getParameter?
Du hast dir die Werte der Parameter GSS und board doch weiter oben schon besorgt [1], und in den Strings GSS und board abgelegt.
Ja das war mir schon klar, hab es nicht geändert da es ja funktionierte (zumindest bei GSS) :-)
Du meinst, du rufst die Ressource ein mal mit ?login=GSS und einmal mit ?login=board auf?
Dann hast du in beiden Fällen genau einen GET-Parameter namens login - mit zwei unterschiedlichen Werten, einmal GSS, einmal board.
Jub, genau...
So hier ist mein neuer Code:
<%
String Weiterleitung1="gss_processes_hrall.html";
String Weiterleitung2="gss_processes_hrmanager.html";
String Weiterleitung3="error.html";
if (request.getParameter( "login" ) == (request.getParameter("GSS"))) {
response.sendRedirect(Weiterleitung1);
}
else {
if (request.getParameter( "login" ) == ("board")) {
response.sendRedirect(Weiterleitung2);
}
else{
response.sendRedirect(Weiterleitung3);
}
}
%>
aber der klappt auch nicht...ich steh wirklich auf m Schlauch...:-(
hi,
Dann hast du in beiden Fällen genau einen GET-Parameter namens login - mit zwei unterschiedlichen Werten, einmal GSS, einmal board.
Jub, genau...
Heisst das, "ich habe verstanden, was du schriebst"?
So hier ist mein neuer Code:
if (request.getParameter( "login" ) == (request.getParameter("GSS"))) {
Du willst hier immer noch auf einen GET-Parameter namens GSS zugreifen, der immer noch nicht existiert.
if (request.getParameter( "login" ) == ("board")) {
Hier scheinst du's doch schon verstanden (oder zufällig richtig gemacht) zu haben.
Wobei ich nicht weiss, ob die Klammern um einen skalaren Wert in JSP notwendig sind, und warum du immer noch die Methode request.getParameter für ein und den selben Parameter mehrmals aufrufen willst, ist noch unverständlich.
gruß,
wahsaga
So,
jetzt geht die Schleife zwar, aber ich werde auf die Error Seite weitergeleitet, egal ob bei "board" oder "gss" ...
Der code sieht jetzt so aus:
<%
String Weiterleitung1="gss_processes_hrall.html";
String Weiterleitung2="gss_processes_hrmanager.html";
String Weiterleitung3="error.html";
String gss= request.getParameter("GSS");
String board=request.getParameter("board");
String myvar = request.getParameter("login");
if (myvar == "GSS") {
response.sendRedirect(Weiterleitung1);
}
else {
if (myvar == "board") {
response.sendRedirect(Weiterleitung2);
}
else{
response.sendRedirect(Weiterleitung3);
}
}
%>
Denke mal so habt ihr das gemeint, oder?
Die URLs die hinten dran gehängt werden sehen so aus:
login=GSS&password=GSSpublish&localeid=1033&usergroupguid=8A17F6B7-9684-4278-B82B-92BB0F85A192&filterguid=5A5A7B50-90F8-11DB-0EB8-00300580DFCF&exportname=GSS_publish
bei board wird eben das GSS mit board ersetzt.
Marhaba!
if (myvar == "GSS") {
[...]
Wenn sich JSP genauso verhält wie Java, wovon ich mal ausgehe, vergleichst Du mit == die Referenzen und nicht den Inhalt der Strings. Die Referenzen sind hier natürlich immer unterschiedlich.
Für den (Wert-)Vergleich haben Strings eine Methode. Wenn ich mich recht erinnere, heißt sie "equals".
Viele Grüße vom Længlich
Hallo,
jetzt geht die Schleife zwar, aber ich werde auf die Error Seite weitergeleitet, egal ob bei "board" oder "gss" ...
Der code sieht jetzt so aus:
<%
String Weiterleitung1="gss_processes_hrall.html";
String Weiterleitung2="gss_processes_hrmanager.html";
String Weiterleitung3="error.html";
String gss= request.getParameter("GSS");
String board=request.getParameter("board");
diese zwei brauchst du doch gar nicht mehr, oder hast du _wirklich_ einen URL-Parameter GSS? (sprich ein: &GSS=). Nein das hast du laut deiner URL von unten nicht und auch kein "&board="
String myvar = request.getParameter("login");
if (myvar == "GSS") {
falsch!
if(myvar.equals("GSS"))
response.sendRedirect(Weiterleitung1);
}
else {
if (myvar == "board") {
response.sendRedirect(Weiterleitung2);
}
falsch!
else if(myvar.equals("board")) {
}
else{
response.sendRedirect(Weiterleitung3);
}
}
%>Denke mal so habt ihr das gemeint, oder?
mehro der weniger.
Die URLs die hinten dran gehängt werden sehen so aus:
login=GSS&password=GSSpublish&localeid=1033&usergroupguid=8A17F6B7-9684-4278-B82B-92BB0F85A192&filterguid=5A5A7B50-90F8-11DB-0EB8-00300580DFCF&exportname=GSS_publish
bei board wird eben das GSS mit board ersetzt.
Sorry, du hast doch noch immer kein "&board=" nur "&login=".
Grüße
Thomas
Ok, vielen Dank für die Hilfe (natürlich an alle hier) ;-)
Jetzt bekomme ich allerdings folgende Fehlermeldung:
Generated servlet error:
Syntax error, insert "Finally" to complete TryStatement
Generated servlet error:
Syntax error on token "catch", Identifier expected
Generated servlet error:
out cannot be resolved
Generated servlet error:
_jspx_out cannot be resolved
und so sieht der code aus:
<%
String Weiterleitung1="gss_processes_hrall.html";
String Weiterleitung2="gss_processes_hrmanager.html";
String Weiterleitung3="error.html";
String myvar = request.getParameter("login");
if (myvar.equals("GSS")) {
response.sendRedirect(Weiterleitung1);
}
else if (myvar.equals("board")) {
response.sendRedirect(Weiterleitung2);
}
else{
response.sendRedirect(Weiterleitung3);
}
}
%>
Glück auf!
Generated servlet error:
Syntax error, insert "Finally" to complete TryStatementGenerated servlet error:
Syntax error on token "catch", Identifier expectedGenerated servlet error:
out cannot be resolvedGenerated servlet error:
_jspx_out cannot be resolvedund so sieht der code aus:
[...]
Irgendwo außerhalb deines geposteten Code-Schnipels scheint sich eine syntaktisch falsche Try-Catch-Anweisung sowie ein Objekt namens "out" (vermutlich soll es ein PrintWriter sein) aufzuhalten. Was jedoch genau die Fehler sind, lassen sich an Hand des geposteten Codes beileibe nicht herausfinden.
Gruß,
der Juve
Das hier ist eigentlich schon der ganze code:
<%@page language = "java" %>
<html>
<!--
Copyright 2004 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<body>
<%
String Weiterleitung1="gss_processes_hrall.html";
String Weiterleitung2="gss_processes_hrmanager.html";
String Weiterleitung3="error.html";
String myvar = request.getParameter("login");
if ("GSS".equals(myvar)) {
response.sendRedirect(Weiterleitung1);
}
else if ("board".equals(myvar)){
response.sendRedirect(Weiterleitung2);
} else {
response.sendRedirect(Weiterleitung3);
}
}
%>
</body>
</html>
und hier die Fehlermeldung:
org.apache.jasper.JasperException: Unable to compile class for JSP
An error occurred at line: 19 in the jsp file: /temp_jp/WebAuftritt/LoginURL.jsp
Generated servlet error:
Syntax error, insert "Finally" to complete TryStatement
Generated servlet error:
Syntax error on token "catch", Identifier expected
Generated servlet error:
out cannot be resolved
Generated servlet error:
_jspx_out cannot be resolved
Generated servlet error:
out cannot be resolved
Gruß,
Jens
Hi,
<%
String Weiterleitung1="gss_processes_hrall.html";
String Weiterleitung2="gss_processes_hrmanager.html";
String Weiterleitung3="error.html";
String myvar = request.getParameter("login");if ("GSS".equals(myvar)) {
response.sendRedirect(Weiterleitung1);
}
else if ("board".equals(myvar)){
response.sendRedirect(Weiterleitung2);
} else {
response.sendRedirect(Weiterleitung3);
}
}
Wenn Du ordentlich einrücken würdest, würdest Du sofort sehen, daß es zur letzten schließenden Klammer keine öffnende Klammer gibt.
cu,
Andreas
Ok, danke!
Aber die Schleife (so wie oben) geht trotzdem nicht. Egal wie ich "eingeloggt" bin, werde ich immer auf die Error.html verwiesen... :-((
Hi,
Aber die Schleife (so wie oben) geht trotzdem nicht.
Welche Schleife? Bis jetzt hast Du noch keine Schleife gezeigt.
cu,
Andreas
Hi,
HiAber die Schleife (so wie oben) geht trotzdem nicht.
Welche Schleife? Bis jetzt hast Du noch keine Schleife gezeigt.
Ich meinte die If-Anweisung! ;-)
Also, nach dem Aktualisiern klick, funktioniert jetzt gar nüscht mehr..und bekomme folgende Meldung (mit der ich gar aber mal sowas von überhaupt nix anfangen kann) :-) :
Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Exception in JSP: /temp_jp/WebAuftritt/LoginURL.jsp:10
7: String Weiterleitung3="error.html";
8: String myvar = request.getParameter("login");
9:
10: if (myvar.equals("GSS")){
11: response.sendRedirect(Weiterleitung1);
12: }
13: else if (myvar.equals("board")){
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.NullPointerException
org.apache.jsp.temp_005fjp.WebAuftritt.LoginURL_jsp._jspService(LoginURL_jsp.java:51)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.
Was is das denn?
Vanakkam!
Was is das denn?
Eine NullPointerException. Vielleicht diese hier?
Viele Grüße vom Længlich
Aber wenn ich es damit mache, werde ich nur auf error.html weitergeleitet:
if ("GSS".equals(myvar)){
response.sendRedirect(Weiterleitung1);
}
else if ("board".equals(myvar)){
response.sendRedirect(Weiterleitung2);
} else {
response.sendRedirect(Weiterleitung3);
}
Mhh wisst ihr noch ne Möglichkeit an was dies liegen könnte?
Hi,
if ("GSS".equals(myvar)){
response.sendRedirect(Weiterleitung1);
}
else if ("board".equals(myvar)){
response.sendRedirect(Weiterleitung2);
} else {
response.sendRedirect(Weiterleitung3);
}Mhh wisst ihr noch ne Möglichkeit an was dies liegen könnte?
Daran, daß myvar weder den exakten Wert "GSS" noch den exakten Wert "board" enthält.
cu,
Andreas
Habe mir gerade den Wert von MyVar ausdrucken lassen mit out.println(myvar); und der ist null :-((
Glück auf!
Habe mir gerade den Wert von MyVar ausdrucken lassen mit out.println(myvar); und der ist null :-((
Das verwundert nicht, so lange beim Aufruf der JSP in der Paramerterliste nicht myvar=bla oder sowas steht, also z.B. loginURL.jsp?myvar=board oder loginURL.jsp?myvar=GSS - alles andere führt immer dazu, dass zu error.html weitergeleitet wird.
Gruß,
der Juve
Glück auf!
Hola
Aber in der URL steht doch alles nötige, bevor ich auf den Link zur JSP klicke, steht folgende URL:
http://meintest/aris/deeplink.do?login=GSS&password=GSSpublish&localeid=1033&usergroupguid=8A17F6B7-9684-4278-B82B-92BB0F85A192&filterguid=5A5A7B50-90F8-11DB-0EB8-00300580DFCF&exportname=GSS_publish
also stehen doch alle nötigen Parameter drin...oder meintest du was anderes?
Gruß
Glück auf!
loginURL.jsp?myvar=board
Korrektur: Es muss natürlich ?login=board heißen, myvar ist ja nur die Variable, in der es zwischengespeichert wird.
http://meintest/aris/deeplink.do?login=GSS&password=GSSpublish&localeid=1033&usergroupguid=8A17F6B7-9684-4278-B82B-92BB0F85A192&filterguid=5A5A7B50-90F8-11DB-0EB8-00300580DFCF&exportname=GSS_publish
also stehen doch alle nötigen Parameter drin...oder meintest du was anderes?
Was tut denn deeplink.do schon wieder? Da ist der offensichtlich korrekte Parameter dran. Aber die JSP, um die es geht, ist doch /temp_jp/WebAuftritt/LoginURL.jsp, wenn ich das etwas weiter oben richtig verstanden habe, oder? Die Zusammenhänge zwischen den Ressourcen werden mir noch nicht wirklich deutlich, hast du das irgendwo live zum angucken?
Gruß,
der Juve
Hi,
Was tut denn deeplink.do schon wieder?
Klingt nach Struts.
Jetzt ist halt die Frage, wie der entsprechende Teil der struts-config.xml aussieht und wie der Weg von deeplink.do zum .jsp ist - wenn da ne Weiterleitung dazwischen ist, sind natürlich die Parameter weg ...
cu,
Andreas
Glück auf!
Was tut denn deeplink.do schon wieder?
Klingt nach Struts.
Okay, dann klink ich mich mal aus, da hab ich bisher noch gar nix mit zu tun gehabt. Aber wo wir dabei sind, was kann das so im praktischen Einsatz eigentlich?
[...] und wie der Weg von deeplink.do zum .jsp ist - wenn da ne Weiterleitung dazwischen ist, sind natürlich die Parameter weg ...
Das war auch mein Gedanke, deswegen wollt ich da nochmal nachfragen.
Gruß,
der Juve
Hi,
ja da passiert vorher schon ne Weiterleitung, komm ich jetzt trotzdem noch irgendwie an die Parameter dran?
Hallo,
ja da passiert vorher schon ne Weiterleitung, komm ich jetzt trotzdem noch irgendwie an die Parameter dran?
<o-ton speaker="yoda">Nachlesen, wirst müssen du</o-ton>
http://wiki.apache.org/struts/ForwardingWithDifferentParameter
http://forum.java.sun.com/thread.jspa?threadID=602738&messageID=3242270
http://www.torsten-horn.de/techdocs/jsp-struts.htm
http://www.laliluna.de/first-steps-using-struts-tutorial_de.html
Grüße
Thomas
Grundlage für Zitat #661.
hi,
Habe mir gerade den Wert von MyVar ausdrucken lassen mit out.println(myvar); und der ist null :-((
Na wenigstens fängst du jetzt endlich mal an zu Debuggen.
gruß,
wahsaga
Hi,
if (myvar == "GSS") {
falsch!if(myvar.equals("GSS"))
Noch besser:
if ("GSS".equals(myvar))
Weil:
Der Parameter von equals darf null sein, nicht jedoch das Objekt, für das die Methode aufgerufen wird.
Deine Variante wirft eine NullPointerException, falls myvar null ist, meine nicht.
cu,
Andreas
Moin!
Warum hier eigentlich erneut request.getParameter?
Du hast dir die Werte der Parameter GSS und board doch weiter oben schon besorgt [1], und in den Strings GSS und board abgelegt.Ja das war mir schon klar, hab es nicht geändert da es ja funktionierte (zumindest bei GSS) :-)
Was man als "Wunder" bezeichnen muß - oder du verheimlichst uns hier die URLs, die tatsächlich aufgerufen werden.
So hier ist mein neuer Code:
<%
String Weiterleitung1="gss_processes_hrall.html";
String Weiterleitung2="gss_processes_hrmanager.html";
String Weiterleitung3="error.html";if (request.getParameter( "login" ) == (request.getParameter("GSS"))) {
Mal übersetzt: Das hier wird aufgerufen z.B. bei folgender URL:
blabla.jsp?login=Hallo&GSS=Hallo
Weil die Werte der Parameter login und GSS identisch sind.
Das wird nicht aufgerufen, wenn "?login=GSS".
response.sendRedirect(Weiterleitung1);
}
else {
if (request.getParameter( "login" ) == ("board")) {
Das hier wird aufgerufen, wenn "?login=board". Wobei man sich fragt, warum da noch Klammern um den String sind.
response.sendRedirect(Weiterleitung2);
}
else{
response.sendRedirect(Weiterleitung3);
}
}
%>
- Sven Rautenberg
Hallo zusammen,
Danke für die HILFE! ;-) Es hat jetzt alles wunderbar geklappt!
Speziellen Dank an:
-Mudguard
-Sven
-Wahsaga
-Laenglich
-Juve (der lustigerweise Bochum fan ist ;-) )
Muß ja auch mal gesagt werden, oder? ;-))
Viele Grüße,
Jens