Avatar billede juliemusen Nybegynder
27. februar 2012 - 10:44 Der er 62 kommentarer og
1 løsning

Login til hjemmeside

Hejsa.

Jeg er igang med et projekt, hvor jeg skal lave et logon til en hjemmeside. I første omgang går det ud på at jeg skal lave et login, og hvor man kan oprette en bruger med navn og kode. Det skal endvidere være sådan, at selvom man skifter fra fx index siden til "vare" siden, så forbliver man logget ind.

De kode sprog vi har haft er:
* Java
* JSP
* XML Schema
* XML
* HTML
* CSS
* Xpath
* DTD

Hvert kodeningssprog har vi haft en enkeltforlæsning på to timer, så derfor kan man stadigvæk betragte mig som nybegynder i det hele undtagen HTML og CSS.

Ud fra de overnævnte sprog, hvordan ville jeg så kunne lave mit logon osv, som nævnt i starten af spørgsmålet?

Håber i kan hjælpe mig:-)

Kh Julie
Avatar billede Vixo Novice
27. februar 2012 - 10:47 #1
Ærligt så ville jeg ikke råde dig til at lave login med nogle af de der kodesprog.

Ville råde dig til at bruge php.
Avatar billede juliemusen Nybegynder
27. februar 2012 - 10:52 #2
Øv :-/ Inde på vores kursus hjemmeside, står der følgende emner der er gennemgået til forelæsningerne:

    HTML og stylesheets
    XML og skemasprog (DTD og XML Schema)
    transformation af XML data (med f.eks. DOM, XPath og XSLT)
    WWW og kommunikationsprotokoller (HTTP, TCP)
    Web services (f.eks. Java Servlets, JSP)

Jeg er helt vildt i tvivl om hvor jeg skal starte?
Avatar billede Vixo Novice
27. februar 2012 - 11:00 #3
Kan kun sige, jeg vil råde dig til at lære: html, css, php. Du behøver ikke andet for at lave login på din hjemmeside.
Avatar billede Pkallesoe Nybegynder
27. februar 2012 - 11:05 #4
Hvis du kan Java, så lav det i Java :o)
Avatar billede mads375 Juniormester
27. februar 2012 - 12:49 #5
Hejsa.

Det er fordi vi ikke må lave php, .net og hvad der ellers findes. Det må KUN være dem som jeg har skrevet.

Pkallesoe: Jeg kan kun en lille smule java, har du evt nogle tip til hvad jeg skal kigge efter, eller et snip kode eller noget i den stil?
Avatar billede juliemusen Nybegynder
27. februar 2012 - 14:11 #6
Jeg fandt en kode her:

http://www.roseindia.net/quickguide/tomcat/loginform.shtml

Men jeg får en masse fejl. Tror i den kan komme til at virke til mit formål?
Avatar billede arne_v Ekspert
27. februar 2012 - 14:38 #7
Den JSP kode boer virke, men det er altsaa kun 1/10 af opgaven.
Avatar billede arne_v Ekspert
27. februar 2012 - 14:41 #8
To spoergsmaal:

1) skal det vaere app managed security eller maa du bruge container managed security?

2) hvilken container? Tomcat?

Oversaettelse:

container = server

app managed security = du har kode i dine sider som checker om bruger er logget ind

container managed security = du beder i konfigurationen containeren checke om bruger er logget ind
Avatar billede Pkallesoe Nybegynder
27. februar 2012 - 14:42 #9
Ville ikke sige det er en "rigtig" login, og det undre mig at der er skrevet password, da det eneste der sker er at den udskriver username på næste side.

Det virker for mig til at du mangler mere viden og i stedet ønsker at finde et færdigt eksempel end at lære?
Avatar billede arne_v Ekspert
27. februar 2012 - 14:43 #10
Hvis container managed er OK og det er Tomcat saa kig paa foerste halvdel af:

http://www.eksperten.dk/guide/50
Avatar billede arne_v Ekspert
27. februar 2012 - 14:44 #11
vixo>

Af nysgerrighed - hvor mange aars erfaring har du med Java web apps?
Avatar billede juliemusen Nybegynder
27. februar 2012 - 15:30 #12
Pkallesoe:
Det er absolut ikke fordi jeg ikke vil lære det, tværtimod faktisk. Det er sådan på universitet at nogle gange bliver man simpelthen bare nød til at sige, jamen det her kan jeg ikke nå at lære på så kort tid. Dvs prioritere hvad man kan nå at læse osv. På den måde finder man i løbet af sin studietid også sin egen nieche. Det ville være dejligt hvis man kunne nå at lære og læse det hele, men sådan er det desværre ikke. Vi har lige afleveret et meget stort projekt idag, og skal til på mandag lave disse opgaver:

""The cloud is available at the URL http://services.brics.dk/java4/cloud and it supports the following requests:

type    syntax    body    response
POST    /login    login    loginResponse
POST    /sellItems    sellItems    saleResponse
POST    /createItem    createItem    itemID
POST    /createCustomer    createCustomer    createCustomerResponse
POST    /modifyItem    modifyItem    none
POST    /adjustItemStock    adjustItemStock    none
GET    /listShops    none    loginResponse
GET    /listItems?shopID=ID    none    items
GET    /listCustomers    none    customers
GET    /listCustomerSales?customerID=ID    none    sales
GET    /listShopSales?shopKey=ID    none    sales

The types of bodies and responses of POST requests and the types of reponses of GET requests are defined in the XML Schema cloud.xsd. However, the type modifyItem is missing and must be supplied as a part of the project. You can see two examples of modifyItem documents here and here. The itemDescription tag is supposed to support a subset of HTML that uses only ul, li, b, i and span tags, but it is currently defined to accept any XML. ""

Udover det skal der være en fungerende front and backstore. Dette er bare ca 25% af opgaven. Så derfor kan det simpelthen ikke nås, medmindre man virkelig er god til at kode.
Avatar billede juliemusen Nybegynder
27. februar 2012 - 15:38 #13
Jeg fandt faktisk et andet script, som virker lidt. Det er delt op på 4 forskellige jsp sider, som jeg meget bedre kan forstå:

http://www.codemiles.com/jsp-examples/login-using-jsp-t3417.html

jeg har uploadet den til vores gruppeserver:

http://www.cs.au.dk/~mcduck4/logintest/login/WebContent/index.jsp

Men har lige fundet ud af at det ser helt anderledes ud end på min localhost.
Avatar billede juliemusen Nybegynder
27. februar 2012 - 15:40 #14
Hej Arne :-)

opgaven lyder på:

The front store is directed towards customers and must support the following functionality:

    It must allow customers to sign in to the shopping network or create a new account if none exists already.
    It must allow customers to browse through all the available products in the shop's inventory.
    It must remember the current customer during browsing and shopping.
    It must provide reasonable feedback to the customer during the shopping session.
    It must support a list of all shops in the network and allow the customer to switch to another shop.

Derfra må vi egentligt selv bestemme hvordan den skal laves.

Jeg ved ikke helt hvad der ville væres mest hensigtmæssigt af:

app managed security = du har kode i dine sider som checker om bruger er logget ind

container managed security = du beder i konfigurationen containeren checke om bruger er logget ind ?
Avatar billede arne_v Ekspert
27. februar 2012 - 15:45 #15
Eksemplet fra codemiles er app managed security.
Avatar billede arne_v Ekspert
27. februar 2012 - 15:46 #16
Men det bruger stadigvaek hardcoded brugernavn/password, hvor du har brug for at kunne oprette nye brugernavne/passwords.

Hvilket vel betyder at brugernavne/passwords skal vaere i en database.
Avatar billede arne_v Ekspert
27. februar 2012 - 15:56 #17
Og i den sammenhaeng husk at man gemmer hashede passwords ikke passwords i databasen.
Avatar billede juliemusen Nybegynder
27. februar 2012 - 17:08 #18
pu ha, det er noget svært synes jeg. Kender du et godt sted, hvor jeg kan finde noget om hvordan man opretter en bruger i jsp? Det er vel der aller første jeg skal igang med.

Og så om det skal være en database i SQL, eller ?
Avatar billede arne_v Ekspert
27. februar 2012 - 17:13 #19
Hvis brugere er defineret som raekker i en bruger tabel, saa bestaar oprettelse af en bruger jo af at indsaette en raekke i den tabel.

Du boer sikkert noejes med simpel JDBC til database access.
Avatar billede juliemusen Nybegynder
27. februar 2012 - 17:21 #20
Hmm jeg sidder lige og læser noget i opgaven:

Central to the network is the cloud, which is s web service that registers the customers and offers a database service where each shop may keep track of its product items, its inventory and its sales records. Communication with the cloud takes place by sending and receiving XML using HTTP post and get requests.

A shop is identified through a shop key that is given to each project group. The key is used to configure the shop and to identify the shop in all communications about the shop administration. Keep this key secret, or others may be able to make random changes in your store data. A shop also has a shop ID which is used to identify the shop when public data is requested.

forstår i ud af det, at man må bruge hvilken som helst database?
Avatar billede arne_v Ekspert
27. februar 2012 - 17:22 #21
En maade at komme lidt igang paa var nok at definere hvilke sider du behoever og saa starte med at lave disse, deploye og teste - saa har du noget konkret at arbejde med.
Avatar billede juliemusen Nybegynder
27. februar 2012 - 17:29 #22
ok starter lige med at færdiggøre det i html og css så.
Avatar billede arne_v Ekspert
27. februar 2012 - 18:43 #23
re #20)

Lyder lidt om der ikke skal bruges egen database, men i.s.f. en ekstern web service.

Indeholder det web service API funktioner til at validere brugernavn/password?
Avatar billede juliemusen Nybegynder
28. februar 2012 - 13:47 #24
Hej igen Arne. Mange tak for indsatsen.

Jeg linker lige til vores kursus hjemmeside:

https://services.brics.dk/java/courseadmin/dWebTek/pages/Programming+Project

Det er iøvrigt part B & C der skal laves til på tirsdag.

Som man kan se står der i starten af teksten:

"Central to the network is the cloud, which is s web service that registers the customers and offers a database service where each shop may keep track of its product items, its inventory and its sales records. Communication with the cloud takes place by sending and receiving XML using HTTP post and get requests. "

Det er noget med de request der står, som skal sende og modtage på en eller anden måde.

Jeg ved ikke om du kan blive klogere ud fra dette?

Kh Julie
Avatar billede arne_v Ekspert
28. februar 2012 - 15:27 #25
Der er en login service!
Avatar billede juliemusen Nybegynder
28. februar 2012 - 16:51 #26
Vi fik tilsendt det her af vores instruktor:

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import model.Customer;
import util.Constants;


import dk.brics.xact.XML;


public class CustomerController  extends HttpServlet {
    static String urlCreateCustomer=  "http://services.brics.dk/java/cloud/createCustomer";
    private static String key="XXXXXXXXX";
    private static int messagecode=0;

public CustomerController() {
super();
  XML.getNamespaceMap().put("w", "http://www.cs.au.dk/dWebTek/2011");
XML.getNamespaceMap().put("h", "http://www..w3.org/1999/xhtml");
}

  public void init() {
    ServletContext c = getServletContext();
  }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getParameter("customerName")+"no");
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String login= request.getParameter("login");
String register= request.getParameter("register");
System..out.println("values:" + username + " " + password+" "+login+" "+register);

//Remember to do the validation stuff
if(username!=null && password!=null)
{
try{
if(register.equalsIgnoreCase("Register"))
{

sendData(request, username,  password);
getServletContext().getRequestDispatcher("/shoppingcar?message="+messagecode).forward(request, response);
}
if(login.equalsIgnoreCase("Login")){
//do the login stuff
loginCustomer(request, username, password);
}
}
catch(Exception e){
e.printStackTrace();
}

    }
else{//redirect with an error message
response.sendRedirect("shoppingcar?message=1");
}




}

void loginCustomer(HttpServletRequest request,String username, String password) throws Exception{

}
void sendData(HttpServletRequest request,String username, String password) throws Exception{
Customer aux;
HttpURLConnection connection= (HttpURLConnection)new URL(urlCreateCustomer).openConnection();
connection.setDoInput(true);
connection.setDoOutput(true); //Only if you expect to read a response..
    connection.setUseCaches(false); //Highly recommended...
    connection.connect();
   

    XML xml = XML.parseTemplate(
                "<w:createCustomer>" +
                    "<w:shopKey><[SHOPKEY]></w:shopKey>" +
                    "<w:customerName><[USERNAME]></w:customerName>" +
                    "<w:customerPass><[PASSWORD]></w:customerPass>" +
                "</w:createCustomer>")
                .plug("SHOPKEY", key)
                .plug("USERNAME", username)
                .plug("PASSWORD", password);
       

        xml.toDocument(connection.getOutputStream(), "UTF-8");
       

        XML resp = XML.parseDocument(connection.getInputStream());
       

        if (resp.has("w:customerID")){
        int id= resp.getNumber("w:customerID").intValue();
          System.out.println("id="+id);
          aux=new Customer(id, username);
          setSessionData( request,aux);
         

        messagecode=2;
       

        } 
        else if (resp.has("w:usernameTaken"))
            System.out.println("the username was repeated"); // show the error using the controller look above... for example shoppingcar?message=3
        else
            throw new RuntimeException("Unknown server response");
}

    public void setSessionData(HttpServletRequest request, Customer aux) {
        request.getSession().setAttribute(Constants.CUSTOMER_ID, aux.getId());
        request.getSession().setAttribute(Constants.CUSTOMER_NAME, aux.getName());
    }

}

Skulle det sættes ind i en servlet eller?
Avatar billede arne_v Ekspert
28. februar 2012 - 17:06 #27
Det er en servlet !!
Avatar billede juliemusen Nybegynder
28. februar 2012 - 17:07 #28
så hvis jeg puttede den ind i en servlet, så skulle jeg have mit login?

Hvad med i mit html dokument. Hvordan henviser jeg fra min form, at den skal sendes dertil?

<td>
                <form>
                    <input type="text" name="bruger" size="5">
                  </form>
              </td>
               
            <td class="formtext">Kode</td>
            <td>
                <form>
                    <input type="text" name="kode" size="5">
                  </form>
            </td>
Avatar billede arne_v Ekspert
28. februar 2012 - 18:01 #29
Du angiver URL til processing via:

<form method="POST" action="CustomerController">
Avatar billede arne_v Ekspert
28. februar 2012 - 18:02 #30
String username = request.getParameter("username");
String password = request.getParameter("password");

skal matche med input name i HTML !
Avatar billede arne_v Ekspert
28. februar 2012 - 18:02 #31
Og brug af servlet kraever en mapning i web.xml !
Avatar billede juliemusen Nybegynder
28. februar 2012 - 18:26 #32
Hej igen Arne. Mange tak for hjælpen.

Jeg er kommet lidt længere nu, og forstår faktisk samtidig noget af det, vel ogmærket noget af det :-/

Jeg har sat det ind i mit html nu:

<form method="POST" action="CustomerController">
                    <input type="text" name="username" size="6">
                  </form>
              </td>
               
            <td class="formtext">Kode</td>
            <td>
                <form>
                    <input type="text" name="password" size="6">
                  </form>

Der kommer en del fejl i min servlet. Hvad skal jeg indtaste hvor den blå streg er, altså XXXXXXX? og hvad skal jeg navngive servletten, kan jeg selv bestemme det?

jeg ville simpelthen gøre alt i verdenen for at få det til at virke idag :-/
Avatar billede arne_v Ekspert
28. februar 2012 - 18:32 #33
1) du skal have din servlet compilet

se hvilke fejl du faar og fix dem

(xxxxxx er vist din key til web service som du skulle have faaet udleveret, men vent med det til senere)
Avatar billede arne_v Ekspert
28. februar 2012 - 18:34 #34
2)

saa skal du have mappet:

URL -> servlet navn -> servlet klasse

det goeres i web.xml.

Eksempel:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
  <servlet>
    <servlet-name>Blue</servlet-name>
    <servlet-class>test.Blue</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Blue</servlet-name>
    <url-pattern>/Blue</url-pattern>
  </servlet-mapping>
</web-app>


ovenstaaende er ikke nyeste servlet version, men indmaden er stadig den samme.
Avatar billede arne_v Ekspert
28. februar 2012 - 18:34 #35
3)

og saa skal du have den til at virke!

:-)
Avatar billede juliemusen Nybegynder
28. februar 2012 - 18:51 #36
Hej ige :-9 ok jeg prøver at gøre 1 nu. Jeg har fået en key, så den taster jeg ind der :-)
Avatar billede juliemusen Nybegynder
28. februar 2012 - 18:59 #37
hhmm det lader til at alle de fejl undtagen to er noget med projektet at gøre

"The Import model cannot be resolved"
http://billedeupload.dk/?v=XFenP.jpg

som en del andre har haft, hvor de rydder op i deres dokument. Ellers er der ikke nogle fejl mere, jeg har rettet et par stykker. Hvor compiler du det henne? Jeg er vant til bare at bruge bluej hvor man compiler.
Avatar billede juliemusen Nybegynder
28. februar 2012 - 19:06 #38
Iøvrigt jeg prøvede lige at gå ind i mappen WEB-inf i venstre side, og der ligger der nemlig en web.xml. herinde står der:

http://billedeupload.dk/?v=vucn.jpg

Er det herinde jeg skal have tilføjet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/ (...)
        xmlns:xsi="http://www.w3.org/ (...)
        xsi:schemaLocation="http://java.sun.com/ (...) http://java.sun.com/ (...)
        version="2.4">
  <servlet>
    <servlet-name>Blue</servlet-name>
    <servlet-class>test.Blue</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Blue</servlet-name>
    <url-pattern>/Blue</url-pattern>
  </servlet-mapping>
</web-app>

?
Avatar billede arne_v Ekspert
28. februar 2012 - 19:08 #39
jeg tror at du mangler en jar fil i classpath med util package.

(og saa er der nogle URL'er som mangler slut ")
Avatar billede arne_v Ekspert
28. februar 2012 - 19:09 #40
Ja.

Og det ser ud til at du allerede er startet.

Jeg vile dog bruge 'source' fremfor 'design' til at editere med.
Avatar billede juliemusen Nybegynder
28. februar 2012 - 19:22 #41
det er nok rigtigt med jar fil i classpath:

http://billedeupload.dk/?v=Xyv3z.jpg

?

hvordan får jeg tilføjet den?
Avatar billede juliemusen Nybegynder
28. februar 2012 - 19:35 #42
Avatar billede juliemusen Nybegynder
28. februar 2012 - 19:42 #43
Der står nederst på linket:

jar-filer til JSTL: jstl-api-1.2.jar , jstl-impl-1.2.jar (placeres i WEB-INF/lib)

Nu har jeg placeret dem i mappen:
http://billedeupload.dk/?v=TxLtY.jpg

men jeg kan ikke vælge den package hvis jeg vil oprette en ny servlet?
Avatar billede arne_v Ekspert
28. februar 2012 - 20:07 #44
du skal sikkert bruge den jar paa runtime saa WEB-INF/lib er det rigtige sted
Avatar billede arne_v Ekspert
28. februar 2012 - 20:09 #45
Du boer absolut putte de 2 JSTL jar i WEB-INF/lib, men det er ikke nogen du bruger i din servlet - det er nogen som du bruger i dine JSP sider.
Avatar billede juliemusen Nybegynder
28. februar 2012 - 20:32 #46
ift #39: "jeg tror at du mangler en jar fil i classpath med util package."

hvordan skal jeg få dem addèd. Jeg forstod at det var en java package der skulle tilføjes?
Avatar billede arne_v Ekspert
28. februar 2012 - 20:38 #47
hvis jar filen med util.* tilfoejes classpath saa boer:

import util.Whatever;

virke.
Avatar billede juliemusen Nybegynder
28. februar 2012 - 21:13 #48
Avatar billede arne_v Ekspert
28. februar 2012 - 21:25 #49
Nej.

Det er nok snarere noget af din kode eller skolens kode.

import util.Constants;

siger en util package med en Constants klasse i.
Avatar billede juliemusen Nybegynder
28. februar 2012 - 21:36 #50
Jeg ved godt du har brugt meget tid på denne tråd nu, men jeg poster lige min koder som der er indtil videre. Det er ikke for at du skal kigge alt igennem, men springer dig noget i hovedet som er helt forkert?

JSP:

<td>
                <form method="POST" action="CustomerController">
                    <input type="text" name="username" size="6">
                  </form>
              </td>
               
            <td class="formtext">Kode</td>
            <td>
                <form>
                    <input type="text" name="password" size="6">
                  </form>
            </td>


JAVA: (har lige skrevet XXX ved key, men har key)

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import model.Customer;
import util.Constants;


import dk.brics.xact.XML;



public class CustomerController  extends HttpServlet {
    static String urlCreateCustomer=  "http://services.brics.dk/ (...)"
    private static String key="XXXXXXXXXXX";
    private static int messagecode=0;

public CustomerController() {
super();
  XML.getNamespaceMap().put("w", "http://www.cs.au.dk/ (...));
XML.getNamespaceMap().put("h", "http://www..w3.org/ (...));
}

  public void init() {
    ServletContext c = getServletContext();
  }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getParameter("customerName")+"no");
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String login= request.getParameter("login");
String register= request.getParameter("register");
System.out.println("values:" + username + " " + password+" "+login+" "+register);

//Remember to do the validation stuff
if(username!=null && password!=null)
{
try{
if(register.equalsIgnoreCase("Register"))
{

sendData(request, username,  password);
getServletContext().getRequestDispatcher("/shoppingcar?message="+messagecode).forward(request, response);
}
if(login.equalsIgnoreCase("Login")){
//do the login stuff
loginCustomer(request, username, password);
}
}
catch(Exception e){
e.printStackTrace();
}

    }
else{//redirect with an error message
response.sendRedirect("shoppingcar?message=1");
}




}

void loginCustomer(HttpServletRequest request,String username, String password) throws Exception{

}
void sendData(HttpServletRequest request,String username, String password) throws Exception{
Customer aux;
HttpURLConnection connection= (HttpURLConnection)new URL(urlCreateCustomer).openConnection();
connection.setDoInput(true);
connection.setDoOutput(true); //Only if you expect to read a response..
    connection.setUseCaches(false); //Highly recommended...
    connection.connect();
 

    XML xml = XML.parseTemplate(
                "<w:createCustomer>" +
                    "<w:shopKey><[SHOPKEY]></w:shopKey>" +
                    "<w:customerName><[USERNAME]></w:customerName>" +
                    "<w:customerPass><[PASSWORD]></w:customerPass>" +
                "</w:createCustomer>")
                .plug("SHOPKEY", key)
                .plug("USERNAME", username)
                .plug("PASSWORD", password);
     

        xml.toDocument(connection.getOutputStream(), "UTF-8");
     

        XML resp = XML.parseDocument(connection.getInputStream());
     

        if (resp.has("w:customerID")){
        int id= resp.getNumber("w:customerID").intValue();
          System.out.println("id="+id);
          aux=new Customer(id, username);
          setSessionData( request,aux);
       

        messagecode=2;
     

        }
        else if (resp.has("w:usernameTaken"))
            System.out.println("the username was repeated"); // show the error using the controller look above... for example shoppingcar?message=3
        else
            throw new RuntimeException("Unknown server response");
}

    public void setSessionData(HttpServletRequest request, Customer aux) {
        request.getSession().setAttribute(Constants.CUSTOMER_ID, aux.getId());
        request.getSession().setAttribute(Constants.CUSTOMER_NAME, aux.getName());
    }

}



XML:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>rejser</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>java</display-name>
    <servlet-name>java</servlet-name>
    <servlet-class>java</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>java</servlet-name>
    <url-pattern>/java</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>login</display-name>
    <servlet-name>login</servlet-name>
    <servlet-class>login</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>CustomerController</display-name>
    <servlet-name>CustomerController</servlet-name>
    <servlet-class>CustomerController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CustomerController</servlet-name>
    <url-pattern>/CustomerController</url-pattern>
  </servlet-mapping>
</web-app>


Jeg ved godt der er meget, men bare om der er noget der er helt hen i verdet?
Avatar billede arne_v Ekspert
29. februar 2012 - 00:40 #51
Der er en masse kode.

:-)

Og der skal tilsyneladende vaere en masse funktionalitet, men det virker som om der er en del der mangler at blive "limet sammen".

Hvilke services skal den servlet tilbyde?
Avatar billede arne_v Ekspert
29. februar 2012 - 14:40 #52
Jeg har nogle eksempler med login i:
- plain JSP & servlet
- Struts
- JSF

Jeg kan poste noget af det hvis relevant.
Avatar billede juliemusen Nybegynder
01. marts 2012 - 15:05 #53
Hej igen Arne :-)

Nå, der er kommet en del ting til siden sidst. Jeg overvejer at oprette en ny tråd til det, så man ikke skal scrolle så langt ned på siden hver gang. Hvis du synes jeg skal det, så lig endeligt et svar, så opretter jeg et nyt hvis det er.

Det der egentligt skal bruges, (som jeg håber jeg har fået lavet til imorgen) er at man opretter en bruger, og logger ind. Uni har lavet et meget primitiv eksempel, men rent service mæssigt skal det fungere nøjagtig som det de har lavet:

http://services.brics.dk/java4/webtek-client/welcome.jsp

Her den anden dag fik noget af det op at køre ved hjælp af vores underviser, som gav os noget kode. Login og strukturen er her:

http://billedeupload.dk/?v=i90ub.jpg

men når man trykker på registerer så sker der ikke noget:

http://billedeupload.dk/?v=T6vef.jpg

Så status er nu at login boksen er der, men at man skal kunne oprette sig som bruger. Som det fremgår er der ikke en register.jsp, så den starter jeg lige med at oprette. Men hvad skal der så ske derefter?

Selvom det er en del kode, så sætter jeg dem lige ind for de fire servlet der er i venstre side
Avatar billede juliemusen Nybegynder
01. marts 2012 - 15:05 #54
test
Avatar billede juliemusen Nybegynder
01. marts 2012 - 16:53 #55
I de fir servlets ser koden sådan ud:
Login.java er den jeg skal have tilføjet nogle ting til tror jeg?


import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.servlet.ServletContext;

import dk.brics.xact.XML;

public class ClientUtil {

    static {
        // in case that cloud.xsd cannot be loaded and XML null exception.
        // put cloud.xsd,import.xsd into the folder /bin of tomcat
        // or refer to:
        // http://stackoverflow.com/questions/298521/tomcat-5-5-problem-with-reading-resource-files
        XML.loadXMLSchema(ClientUtil.class.getClassLoader()
                .getResource("cloud.xsd").toString());
        XML.getNamespaceMap().put("w", "http://www.cs.au.dk/dWebTek/2011");
        XML.getNamespaceMap().put("h", "http://www.w3.org/1999/xhtml");
    }

    public static void init() {
    }

    private static URL url(String url) {
        try {
            return new URL(url);
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
    }

    public ClientUtil(URL url) {
        CLOUD = url;
    }

    public static ClientUtil get(ServletContext ctx) {
        return new ClientUtil(url(ctx.getInitParameter("CLOUD_URL")));
    }

    public CustomerInfo login(String name, String pass)
            throws MalformedURLException, IOException {

        HttpURLConnection con = requestPOST("login");

        con.setDoInput(true);
        con.setDoOutput(true);
        con.connect();

        XML xml = XML
                .parseTemplate(
                        "<w:login>"
                                + "<w:customerName><[NAME]></w:customerName>"
                                + "<w:customerPass><[PASS]></w:customerPass>"
                                + "</w:login>").plug("NAME", name)
                .plug("PASS", pass);

        xml.toDocument(con.getOutputStream(), "UTF-8");

        XML response = XML.parseDocument(con.getInputStream());

        if (response.has("w:customerID"))
            return new CustomerInfo(response.getNumber("w:customerID")
                    .intValue(), response.getString("w:customerName/text()"));
        else
            return null;
    }

    public HttpURLConnection requestPOST(String methodName)
            throws MalformedURLException, IOException {
        return (HttpURLConnection) new URL(CLOUD, methodName).openConnection();
    }

    private final URL CLOUD;
}

_____

public class CustomerInfo {

    public CustomerInfo(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private int id;
    private String name;
}


______

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class Login
*/
@WebServlet("/Login")
public class Login extends ShopServlet {
    private static final long serialVersionUID = 1L;

    public static class Args {
        public static final String USERNAME = "username";
        public static final String PASSWORD = "password";
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        String username = req.getParameter(Args.USERNAME);
        String password = req.getParameter(Args.PASSWORD);

        if (username == null || password == null) {
            resp.sendRedirect("login.jsp");
            return;
        } else {
            CustomerInfo customer;
            try {
                customer = this.getClient().login(username, password);
            } catch (IOException e) {
                showError(resp, "Invalid username/password");
                return;
            }

            if (customer == null) {
                showError(resp, "Invalid username/password");
            } else {

                // handle the successful case incl. session
                // Util.setLoggedInCustomer(req, customer.getId(),
                // customer.getName());
                // resp.sendRedirect("index.jsp");
            }
        }
    }

    private void showError(HttpServletResponse resp, String msg)
            throws IOException {
        // resp.sendRedirect("index.jsp?msg=" + URLEncoder.encode(msg, "UTF8"));
    }

}

______


import javax.servlet.http.HttpServlet;

public class ShopServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    static {
        ClientUtil.init();
    }

    protected int getShopId() {
        return 0;
    }

    protected String getShopKey() {
        return null;
    }

    protected String getAdminPassword() {
        return null;
    }

    protected ClientUtil getClient() {
        return ClientUtil.get(getServletContext());
    }

}
Avatar billede arne_v Ekspert
01. marts 2012 - 17:26 #56
Det ser ud til at noget begynder at virke nu.

Hvis login lykkes skal du vil have sat noget i session, saa du ved at de er logget ind.
Avatar billede juliemusen Nybegynder
01. marts 2012 - 19:56 #57
ok herligt. Du kender ikke tilfældigvis en guide eller en god tutorial til at lave det. Så lige du skrev i #52 du havde et login system i JSP eller servlet, hvor du tilbød at poste det? Vil du stadigvæk gerne gøre det? :-)
Avatar billede madser22 Novice
01. marts 2012 - 21:25 #58
er det noget ala det her:

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%
    String username = request.getParameter("user");
    List<String> users = (List<String>)session.getAttribute("users");

    if(null == users) {
        users = new ArrayList<String>();
    }
    users.add(username);
    session.setAttribute("users", users);
    response.sendRedirect("index.jsp");
%>
Avatar billede madser22 Novice
01. marts 2012 - 22:31 #59
Nej det vil vist ikke virke for dig...
Avatar billede arne_v Ekspert
01. marts 2012 - 23:37 #60
Jeg har en masse eksempler fra gamle spoegsmaal.

JSP only hardcoded username & password:


<%@page import="java.util.*"%>
<%
if((session == null) || (session.getAttribute("username") == null)) {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    if((username!=null)&&(password!=null)) {
        if((username.equals("arne")&&password.equals("arne"))||(username.equals("system")&&password.equals("system"))) {
            session.setAttribute("username", username);
            response.sendRedirect("secure.jsp");
            return;
        } else {
            %>
            Invalid username/password.
            <%
            return;
        }
    } else {
      %>
      <form action="secure.jsp" method="GET">
      Username: <input type="text" name="username"><br>
      Password: <input type="text" name="password"><br>
      <input type="submit" value="Login">
      </form>
      <%
      return;
    }
} else {
    if(session.getAttribute("username").equals("system")) {
        %>
        <strong>It works !!!!</strong>
        <%
        return;
    } else {
        %>
        No access.
        <%
        return;
    }
}
%>


JSP only username & password i database:


<%@page import="java.sql.*"%>
<%
if((session == null) || (session.getAttribute("username") == null)) {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    if((username!=null)&&(password!=null)) {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection conn = DriverManager.getConnection("jdbc:odbc:TestMSAccess", "", "");
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT password FROM Tomcat_users WHERE username='" + username + "'");
        if(rs.next() && rs.getString(1).equals(password)) {
            session.setAttribute("username", username);
            response.sendRedirect("secure2.jsp");
            return;
        } else {
            %>
            Invalid username/password.
            <%
            return;
        }
    } else {
      %>
      <form action="secure2.jsp" method="GET">
      Username: <input type="text" name="username"><br>
      Password: <input type="text" name="password"><br>
      <input type="submit" value="Login">
      </form>
      <%
      return;
    }
} else {
    if(session.getAttribute("username").equals("system")) {
        %>
        <strong>It works !!!!</strong>
        <%
        return;
    } else {
        %>
        No access.
        <%
        return;
    }
}
%>
Avatar billede arne_v Ekspert
01. marts 2012 - 23:47 #61
Struts (men da du ikke bruger Struts saa ved jeg ikke hvor meget du kan faa ud af det):


<%@ taglib uri="struts-html" prefix="html" %>
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<html:errors/>
<html:form action="/Login">
Username: <html:text property="username"/>
<br/>
Password:
<html:password property="password"/>
<br/>
<html:submit/><html:reset/>
</html:form>
</body>
</html>



package test;

import java.io.*;
import java.sql.*;

import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.struts.action.*;

public class LoginAction extends Action {
    public ActionForward execute(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws IOException, ServletException {
        LoginForm lgifrm = (LoginForm)form;
        String username = lgifrm.getUsername();
        String password = lgifrm.getPassword();
        try {
            if(password.equals(StrutsUsers.getInstance().getPassword(username))) {
                request.getSession().setAttribute("user", lgifrm.getUsername());
                return mapping.findForward("login.ok");
            } else {
                ActionErrors errors = new ActionErrors();
                errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("username.password.not.valid"));
                saveErrors(request, errors);
                return mapping.findForward("login.failure");
            }
        } catch (ClassNotFoundException ex) {
            ActionErrors errors = new ActionErrors();
            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("database.error"));
            saveErrors(request, errors);
            return mapping.findForward("login.failure");
        } catch (SQLException ex) {
            ActionErrors errors = new ActionErrors();
            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("database.error"));
            saveErrors(request, errors);
            return mapping.findForward("login.failure");
        }
    }
}



package test;

import java.io.*;
import java.sql.*;

import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.struts.action.*;

public class ListAction extends Action {
    public ActionForward execute(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws IOException, ServletException {
        if(request.getSession().getAttribute("user") == null) {
            return mapping.findForward("not.logged.in");
        }
        try {
            request.setAttribute("all", StrutsUsers.getInstance().getAll());;
            return mapping.findForward("data.ok");
        } catch (ClassNotFoundException ex) {
            ActionErrors errors = new ActionErrors();
            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("database.error"));
            saveErrors(request, errors);
            return mapping.findForward("data.error");
        } catch (SQLException ex) {
            ActionErrors errors = new ActionErrors();
            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("database.error"));
            saveErrors(request, errors);
            return mapping.findForward("data.error");
        }
    }
}
Avatar billede juliemusen Nybegynder
02. marts 2012 - 12:08 #62
Hejsa Arne.

Jeg lukker spørgsmålet her, det er næsten blevet for langt :-) ligger du ikke et svar? Jeg har oprettet et nyt, som er lidt nyere ift hvad jeg har indtil videre.

Mange tak for dine eksempler :-)
Avatar billede arne_v Ekspert
02. marts 2012 - 20:09 #63
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester