Avatar billede madseksperten Nybegynder
20. februar 2014 - 11:38 Der er 13 kommentarer og
1 løsning

programmere en create user tip database

Hejsa.

Jeg har en database hvor jeg gerne vil hava en jsp side og en servlet, som kan håndtere det at oprette en bruger. Det vil sige man kan create a user på en jsp side, hvor det så bliver gemt i databasen. Jeg har søgt mange steder på nettet, men kan kun finde login forms. Det vil sige når en bruger eksisterer i databasen i forvejen. Jeg synes du havde noget om det Arne i en af dine guides. Er det mig der tænker forkert?

mvh Mads
Avatar billede madseksperten Nybegynder
20. februar 2014 - 13:32 #1
Jeg har prøvet at få lavet lidt, men jeg får blot en blankside når jeg trykker submit. Jeg får ikke engang en exception ? Min kode er her:

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Insert title here</title>
</head>
<body>
    <form>
        Firstname:    <input type="text" name="firstname" value="">
        Lastname:    <input type="password" name="lastname" value="">
                    <button type="submit" value="submit"></button>
    </form>

</body>
</html>

Servlet:

package myservlets;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Registration extends HttpServlet{

    /**
    *
    */
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) throws ServletException{
        super.init(config);
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{

        String connectionURL = "jdbc:mysql://localhost/logindatabase";
        Connection connection=null;
        ResultSet rs;
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
       
       
        String fname = req.getParameter("firstname");
        String sname = req.getParameter("lastname");
       
        try {
            Class.forName("org.gjt.mm.mysql.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
            String sql = "insert into userprofile values (?,?)";
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.setString(2, fname);
            pst.setString(3, sname);
       
            int numRowsChanged = pst.executeUpdate();
            out.println(" Welcome : ");
            out.println(" '"+fname+"'");
            pst.close();
        }
        catch(ClassNotFoundException e){
           
            out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            out.println(e);
        }
        finally {
       
        try {
            if (connection != null) connection.close();
        }
            catch (SQLException ignored){
                out.println(ignored);
            }
        }
    }
}

web.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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <description>
User Registration and Login Example.
</description>
<display-name>User Registration and Login Example</display-name>
<servlet>
<servlet-name>Registration</servlet-name>
<servlet-class>myservlets.Registration</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Registration</servlet-name>
<url-pattern>/Registration</url-pattern>
</servlet-mapping>
</web-app>
Avatar billede madseksperten Nybegynder
20. februar 2014 - 13:34 #2
go hvis jeg kører min servlet får jeg denne fejl:

HTTP Status 405 - HTTP method GET is not supported by this URL

type Status report

message HTTP method GET is not supported by this URL

description The specified HTTP method is not allowed for the requested resource.
Avatar billede madseksperten Nybegynder
20. februar 2014 - 13:41 #3
Har lige ændret

Class.forName("org.gjt.mm.mysql.Driver");

til

Class.forName("com.mysql.jdbc.Driver").newInstance();
Avatar billede madseksperten Nybegynder
20. februar 2014 - 14:10 #4
Det er denne kode der gælder:

HTML:

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Insert title here</title>
</head>
<body>
    <form>
        Firstname:    <input type="text" name="firstname" value="">
        Lastname:    <input type="password" name="lastname" value="">
                    <button type="submit" value="submit"></button>
    </form>

</body>
</html>


Servlet:

package myservlets;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Registration extends HttpServlet{

    /**
    *
    */
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) throws ServletException{
        super.init(config);
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{

        String connectionURL = "jdbc:mysql://localhost/logindatabase";
        Connection connection=null;
        ResultSet rs;
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
       
        String fname = req.getParameter("firstname");
        String sname = req.getParameter("lastname");
       
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
            String sql = "INSERT INTO login VALUES (?,?)";
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.setString(1, fname);
            pst.setString(2, sname);
       
            int numRowsChanged = pst.executeUpdate();
            out.println(" Welcome : ");
            out.println(" '"+fname+"'");
            pst.close();
        }
        catch(ClassNotFoundException e){
           
            out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            out.println(e);
        }
        finally {
       
        try {
            if (connection != null) connection.close();
        }
            catch (SQLException ignored){
                out.println(ignored);
            }
        }
    }
}

web.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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <description>
        User Registration and Login Example.
    </description>
    <display-name>User Registration and Login Example</display-name>
    <servlet>
        <servlet-name>Registration</servlet-name>
        <servlet-class>myservlets.Registration</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Registration</servlet-name>
        <url-pattern>/Registration</url-pattern>
    </servlet-mapping>
</web-app>
Avatar billede madseksperten Nybegynder
20. februar 2014 - 14:18 #5
Ærgeligt man ikke kan redigere en post herinde. Har lige lavet en POST i min jsp:

<form action="Registration" method="POST">
        Firstname:    <input type="text" name="firstname" value="">
        Lastname:    <input type="password" name="lastname" value="">
                    <input type="button" value="submit"></input>
    </form>
Avatar billede madseksperten Nybegynder
20. februar 2014 - 15:17 #6
Okay nu har jeg ændret mere i koden, så nu får jeg beskeden når jeg trykker submit: "Welcome Mads". Problemet er at mine data ikke bliver registreret i databasen?

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Insert title here</title>
</head>
<body>
    <form action="Registration" method="POST">
        Firstname:    <input type="text" name="firstname" value="">
        Lastname:    <input type="password" name="lastname" value="">
                    <input type="submit" value="submit"></input>
    </form>

</body>
</html>

package myservlets;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Registration extends HttpServlet{

    /**
    *
    */
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) throws ServletException{
        super.init(config);
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{

        String connectionURL = "jdbc:mysql://localhost/logindatabase";
        Connection connection=null;
        //ResultSet rs;
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
       
        String fname = req.getParameter("firstname");
        String sname = req.getParameter("lastname");
       
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
            String sql = "INSERT INTO login VALUES (?,?)";
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.setString(1, fname);
            pst.setString(2, sname);
       
            //int numRowsChanged = pst.executeUpdate();
            out.println(" Welcome : ");
            out.println(" '"+fname+"'");
            pst.close();
        }
        catch(ClassNotFoundException e){
           
            out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            out.println(e);
        }
        finally {
       
        try {
            if (connection != null) connection.close();
        }
            catch (SQLException ignored){
                out.println(ignored);
            }
        }
    }
}

<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <description>
        User Registration and Login Example.
    </description>
    <display-name>User Registration and Login Example</display-name>
    <servlet>
        <servlet-name>Registration</servlet-name>
        <servlet-class>myservlets.Registration</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Registration</servlet-name>
        <url-pattern>/Registration</url-pattern>
    </servlet-mapping>
</web-app>
Avatar billede madseksperten Nybegynder
20. februar 2014 - 15:30 #7
Så virker det. Den korrekte kode er:

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Insert title here</title>
</head>
<body>
    <form action="Registration" method="POST">
        Firstname:    <input type="text" name="firstname" value="">
        Lastname:    <input type="password" name="lastname" value="">
                    <input type="submit" value="submit"></input>
    </form>

</body>
</html>

Servlet:

package myservlets;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Registration extends HttpServlet{

    /**
    *
    */
    private static final long serialVersionUID = 1L;
    public void init(ServletConfig config) throws ServletException{
        super.init(config);
    }
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{

        String connectionURL = "jdbc:mysql://localhost/logindatabase";
        Connection connection=null;
        ResultSet rs;
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
       
        String fname = req.getParameter("firstname");
        String sname = req.getParameter("lastname");
       
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
            String sql = "INSERT INTO login VALUES (?,?)";
            PreparedStatement pst = connection.prepareStatement(sql);
            pst.setString(1, fname);
            pst.setString(2, sname);
       
            int numRowsChanged = pst.executeUpdate();
            out.println(" Welcome : ");
            out.println(" '"+fname+"'");
            pst.close();
        }
        catch(ClassNotFoundException e){
           
            out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            out.println(e);
        }
        finally {
       
        try {
            if (connection != null) connection.close();
        }
            catch (SQLException ignored){
                out.println(ignored);
            }
        }
    }
}

web.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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <description>
        User Registration and Login Example.
    </description>
    <display-name>User Registration and Login Example</display-name>
    <servlet>
        <servlet-name>Registration</servlet-name>
        <servlet-class>myservlets.Registration</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Registration</servlet-name>
        <url-pattern>/Registration</url-pattern>
    </servlet-mapping>
</web-app>
Avatar billede madseksperten Nybegynder
20. februar 2014 - 15:30 #8
svar
Avatar billede arne_v Ekspert
20. februar 2014 - 17:11 #9
INSERT er i sig selv ret trivielt
Avatar billede arne_v Ekspert
20. februar 2014 - 17:14 #10
Men drop:

res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println(" Welcome : ");
out.println(" '"+fname+"'");

og lav i.s.f. en:

req.getRequestDispatcher(welcome.jsp").forward(req,  resp);

og skriv welcome i din welcome.jsp
Avatar billede arne_v Ekspert
20. februar 2014 - 17:15 #11
Overvej ogsaa at bruge annotation fremfor web.xml til at definere servlet i.
Avatar billede arne_v Ekspert
20. februar 2014 - 18:37 #12
Og skifter du til JSF eller et andet framework som leverer en generel servlet, saa kan du spare en masse triviel kode og fokusere paa det vigtige.
Avatar billede madseksperten Nybegynder
21. februar 2014 - 10:56 #13
Hej Arne

Tak for feedback, selvom jeg har lukket spørgsmålet. Jeg vil lige prøve at lave ændringerne som du har forslået, og jeg skal lige huske den annotation som du også skrev et andet sted. Jeg har en eksamen i start april, hvor jeg får spørgsmål i html5, jquery, javascript, xml, xml namespaces, servlets, jsp, jsf, css, dom, jdom, JAX-RS og REST. Derfor prøvede jeg at nå så vidt omkring så muligt. Jeg har sat nogle små projekter op for mig selv, hvor jeg prøver at komme til at bruge det hele i det. Men det er meget for mig at overskue, når jeg ikke er særlig god til det. Men på grund af bla. din hjælp så bestod jeg en java programmering her i januar, så det er super :-)
Jeg vil prøve at lave ændringerne nu.

Mvh Mads
Avatar billede arne_v Ekspert
21. februar 2014 - 15:50 #14
Det var godt nok et meget stort emne at skulle op i.

Servlets og primitiv JSP er rimelige at saette sig ind i.

Men taglibs, JSTL, EL, JSF component model, facelets etc. laegger altsaa meget til.
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
Kategori
Kurser inden for grundlæggende programmering

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