Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 00:53 Der er 46 kommentarer og
1 løsning

Angående MySql + JSP [opsætning procedure]

Jeg har installeret Apache 2.0.49, sammen med modulet JK2, så jeg kan køre Tomcat 5.0.28 parallelt med. Det hele virker efter hensigten. Kan starte JSP eksemplerne og servlet eksemplerne. Jeg har desuden installeret MySql,  PHP 5, samt PhpMyadmin. Dette virker også perfekt, kan starte database [MySql] og PhpMyafmin virker også så jeg kan forbinde til MySql og lave en database. PHP virker herved også perfekt.

Problemet er at jeg gerne vil vide om jeg skal ændre i nogle af Tomcats filer for at den blive fuld kompetibel med servlets eller måske er den det i forvejen. Ønsker svar på dette. Hertil kommer hvordan jeg får anvendt ODBC.driver til MySql til at lave en forbindelse. Er der en servlet eller jsp side jeg kan lave for at teste det og hvad skal jeg sætte op for at det kommer til at virke. Desuden kunne jeg godt tænke mig af vide hvor man skal ligge sine kompilerede servlet filer under tomcat for at man kan køre dem.
Avatar billede arne_v Ekspert
27. oktober 2004 - 07:46 #1
JSP sider skal ligge som webapps/dinapp/xxxx.jsp (eller evt. i et underdir).

Beans og servlet klasser skal ligeg som webapps/dinapp/WEB-INF/classes/dinpakke/DinKlass.class

MySQL JDBC driver jar fil skal ligge i webapps/dinapp/WEB-INF/lib
(medmindre du vil bruge Tomcat connection pool eller container managed
security mod database)

Du bør vruge MySQL JDBC driver (kaldet Connector/J) ikke JDBC-ODBC bridge
og ODBC driver

Hvis du ikke bruger connection pools så er selve JDBC koden helt som normalt.
Avatar billede arne_v Ekspert
27. oktober 2004 - 08:50 #2
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 08:52 #3
OK tak for disse svar men hvor finder jeg præcis den Connecter/J jeg skal bruge og hvordan installerer jeg den. Kan du desuden vise mig et lille kode (JSP) eksemple på forbindelse til databasen hvor den bare skriver "Forbundet" hvis den er connected. Syntes ikke rigtig det jeg har fundet tidligerer virker med JDBC driveren. Hvis du desuen har en servlet der gør det samme eller en ejb ville det også være godt

Tak på forhånd
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:27 #4
Har fået fat i den der driver. Hvad nu og hvordan tester jeg ok jeg kan få forbindelse
Avatar billede arne_v Ekspert
27. oktober 2004 - 09:39 #5
Avatar billede arne_v Ekspert
27. oktober 2004 - 09:40 #6
Du skal udpakke ZIP filen og kopiere JAR filen til directory som beskrevet ovenfor
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:41 #7
Har dulgt denne vejledning http://www.sllabres.plus.com/jsp/ er det godt nok med hensyn til classpath og path, samt at connecter jar filen skal ligge under C:\jdk1.5.0\jre\lib\ext
Avatar billede arne_v Ekspert
27. oktober 2004 - 09:41 #8
Der er rigtigt mange måder at bruge en database fra i JSP og servlet.

Men her er en simpel (men ikke særlig køn !) måde at gøre det på
i en JSP side:

<%@ page import="java.sql.*" %>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");
Statement stmt = con.createStatement();
if(request.getMethod().equals("POST")) {
    int F1 = Integer.parseInt(request.getParameter("F1"));
    String F2 = request.getParameter("F2");
    stmt.executeUpdate("INSERT INTO T1 VALUES (" + F1 + ",'" + F2 + "')");
}
%>
<!doctype html public "-//w3c/dtd HTML 4.01 Transitional//en">
<html>
<head>
<title>T1</title>
</head>
<body>
<h1>T1</h1>
<h2>Show data</h2>
<table border>
<%
ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
while(rs.next()) {
%>
<tr>
<td><%=rs.getInt("F1")%></td>
<td><%=rs.getString("F2")%></td>
</tr>
<%
}
%>
</table>
<h2>Add data</h2>
<form method="post" action="db.jsp">
F1:<input type="text" name="F1" size="10">
<br>
F2:<input type="text" name="F2" size="20">
<br>
<input type="submit" value="Add">
</form>
</body>
</html>
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:42 #9
ok jeg har pakket den ud og lagt som du sagde under C:\Tomcat5\webapps\minapplikation\WEB-INF\lib\mysql-connector-java-3.0.15-ga-bin.jar
Avatar billede arne_v Ekspert
27. oktober 2004 - 09:42 #10
hvis du ikke bruger connection pool så synes jeg at du skal kopiere jar filen til webapps/dinapp/WEB-INF/lib
Avatar billede arne_v Ekspert
27. oktober 2004 - 09:43 #11
Ovenstående  er sådan set ren Java kode og den embeddede java kod ekunne
ligeså godt ligge i en servlet eller i en bean.
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:45 #12
ok det har jeg gjort og jeg har lavet den der jsp fil under C:\Tomcat5\webapps\minapplikation\index.jsp
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:45 #13
Hvordan Tester jeg at det virker
Avatar billede arne_v Ekspert
27. oktober 2004 - 09:52 #14
Du tilretter lige siden så den passer med din database.

Min kode bruger Access (du skal rette til MySQL) og har en tabel T1 med 2 felter
F1 og F2 (du skal rette til din tabel).

Og så prøver du at vise side.

Tomcat og Java er mægtigt gode til at vise grimme fejlmeddeleser, hvis det ikke
virker !

:-)
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:55 #15
Kan ikke engang få nogle fejlmeddelser
Avatar billede arne_v Ekspert
27. oktober 2004 - 09:56 #16
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:56 #17
Hvordad ved systemet at den connecter ligger der
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:57 #18
javax.servlet.ServletException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:98)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
    sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
    sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
    sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3074)
    sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
    sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
    java.sql.DriverManager.getConnection(DriverManager.java:525)
    java.sql.DriverManager.getConnection(DriverManager.java:193)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:47)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:59 #19
Jeg har en database på en MySql server der hedder test med bruger root og et password selvfølgelig
Avatar billede arne_v Ekspert
27. oktober 2004 - 09:59 #20
Mulighederne for brug af databaser i java web applikationer er rigtigt mange.

Du kan:
  - bruge almindeligt JDBC med DriverManager
  - bruge almindelig JDBC med connection pool
  - bruge Hibernate
  - bruge JDO
  - bruge EJB's

Du kan:
  - embedde Jaba kode i JSP
  - putte koden i beans
  - bruge JSTL
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 09:59 #21
Og den kører fordi jeg bruger PHPMYADMIN til at administrerer den. Jeg kører jo TOmcat 5.028 og apache 2.049 sammen med det der mod ting og det virker også
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:01 #22
Men den brokker sig den kan jo ikke finde den driver men hvad er det jeg skal rette i den kode du sendte mig
Avatar billede arne_v Ekspert
27. oktober 2004 - 10:01 #23
Erstat

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");

med

Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/DinDatabase", "", "");
Avatar billede arne_v Ekspert
27. oktober 2004 - 10:01 #24
Den skal nok finde driveren i lib directory.
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:05 #25
Nu siger den dette her

javax.servlet.ServletException: General error message from server: "Access denied for user: '@localhost' to database 'mindb'"
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:98)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.sql.SQLException: General error message from server: "Access denied for user: '@localhost' to database 'mindb'"
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1906)
    com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:954)
    com.mysql.jdbc.Connection.createNewIO(Connection.java:1782)
    com.mysql.jdbc.Connection.<init>(Connection.java:450)
    com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
    java.sql.DriverManager.getConnection(DriverManager.java:525)
    java.sql.DriverManager.getConnection(DriverManager.java:171)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:47)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:07 #26
Jeg har avet en database der hedder mindb der har en table kaldet "T1" med et felt der hedder "navn"
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:14 #27
OK JEG HAR fået forbindelse men for at man skal update skal man skrive hvilked database den skal gøre det til, men i dit eksemple står der bare db.jsp hvad skal jeg gøre for at det virker med min database der hedder mindb under MySql
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:20 #28
Men der ligger en masse filer under data-mappen i MySql mappen
Avatar billede arne_v Ekspert
27. oktober 2004 - 10:22 #29
Du angiver databasen når du laver din connection:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost/DinDatabase", "DitBrugernavn", "DitPassword");

Tabel navnet angiver du i diverse SELECT/INSERT/UPDATE/DELETE statements
(ligesom i alle mulige andre sprog).
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:23 #30
Fatter minus men skal db.jsp som du har definret så ikke gøre noget med den post der kommer til den hvor efter den kan tilføje det til min database ved navn mindb
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:24 #31
ok hvorfor indsætter den så ikke i min database i dit eksempel er det ikke fordi db.jsp ikke findes på min maskine, for det hjælper jo ikke noget bare at lave en tom fil
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:26 #32
den siger følgende HTTP Status 404 - /minapplikation/mindb

type Status report

message /minapplikation/db.jsp

description The requested resource (/minapplikation/db.jsp) is not available.
Apache Tomcat/5.0.28
Avatar billede arne_v Ekspert
27. oktober 2004 - 10:26 #33
Min fil hedder db.jsp og submitter til sig selv.

Kalder du den index.jsp skal du rette

<form method="post" action="db.jsp">

til

<form method="post" action="index.jsp">
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:28 #34
Tak det virker. Hvad er du til daglig Arne V
Avatar billede arne_v Ekspert
27. oktober 2004 - 10:30 #35
Hvis du klikker på mit navn og vælger "Vis brugerinfo" står der lidt
om hvad jeg render og laver.
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:37 #36
<%@ page import="java.sql.*" %>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/mindb", "root", "fpra6712");
Statement stmt = con.createStatement();
if(request.getMethod().equals("POST")) {
    int F1 = Integer.parseInt(request.getParameter("F1"));
    String F2 = request.getParameter("F2");
    String navn = request.getParameter("navn");
    stmt.executeUpdate("INSERT INTO T1 VALUES (" + F1 + ",'" + F2 + ",'" + navn + "')");
}
%>
<!doctype html public "-//w3c/dtd HTML 4.01 Transitional//en">
<html>
<head>
<title>T1</title>
</head>
<body>
<h1>T1</h1>
<h2>Show data</h2>
<table border>
<%
ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
while(rs.next()) {
%>
<tr>
<td><%=rs.getInt("F1")%></td>
<td><%=rs.getString("F2")%></td>
<td><%=rs.getString("navn")%></td>
</tr>
Jeg har tilføjet et ekstra felt der hedder navn se følgende kode men får fejlen den er i bunden

<%
}
%>
</table>
<h2>Add data</h2>
<form method="post" action="index.jsp">
F1:<input type="text" name="F1" size="10">
<br>
F2:<input type="text" name="F2" size="20">
<br>
Navn:<input type="text" name="navn" size="20">
<br>
<input type="submit" value="Add">
</form>
</body>
</html>
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:37 #37
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Syntax error or access violation message from server: "You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'dfdf')' at line 1"
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:105)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.sql.SQLException: Syntax error or access violation message from server: "You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'dfdf')' at line 1"
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1997)
    com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
    com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
    com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1224)
    com.mysql.jdbc.Connection.execSQL(Connection.java:2244)
    com.mysql.jdbc.Connection.execSQL(Connection.java:2192)
    com.mysql.jdbc.Statement.executeUpdate(Statement.java:1259)
    com.mysql.jdbc.Statement.executeUpdate(Statement.java:1205)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:53)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
Avatar billede arne_v Ekspert
27. oktober 2004 - 10:42 #38
stmt.executeUpdate("INSERT INTO T1 VALUES (" + F1 + ",'" + F2 + ",'" + navn + "')");

->

stmt.executeUpdate("INSERT INTO T1 VALUES (" + F1 + ",'" + F2 + "','" + navn + "')");

(der mangler en ')
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:45 #39
ahh svært at se. Jeg er igang med at læse bøgerne Servlet cookbook og JSP and servlets fra Oreiley. Jeg ville høre om du kunne være instressert i at jeg kunne spørge dig engang imellem om nogle enkelte ting, hvis det ikke er til meget besvær vil gerne blive god til JSP/servlet EJB osv inden for J2EE arkitekturen. Samt database og sql sproget. Men det ved jeg ikke om du ville syntes om. Måske har du en email jeg kunne sende nogle korte spørgsmål eller måske bare bruge eksperten?
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:47 #40
Eller måske har msn eller ICq eller noget helt 3 måske IRC
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:49 #41
Er lige startet på DTU her i sommers, men har dog lavet en del java kode bare ikke md database mest med filer osv. Men vil gerne blive mere hardcore til webapplikationer. Kan desuden XHTMl/HTML og CSS fuldt ud. Er ved at sætte mig ind i XML og alle de andre XML ting fra www.w3schools.org
Avatar billede arne_v Ekspert
27. oktober 2004 - 10:49 #42
Email: arne_v@mail.danbbs.dk

Jeg bruger ingen IM programmer.

Eksperten er et udmærket sted at spørge (der er også andre end mig som ved
noget om disse ting).
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 10:56 #43
Ja du lder rimelig hardcore, men tak for hjælpen indtil viderer
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 11:04 #44
Ville lige høre om du havde en servlet der laver det samme og hvordan jeg får den til at virke. Den skal jo nok virke i sammen spil med en JSp side kan jeg forestille mig, hvis vi tager udgangspunkt i det eksempel vi har i forvej hvor vi har en "mindb" som mysql database der har en tabel der hedder T1 med 3 felter ved navn F1, F2 og navn. Men hvor funktionen er præcis den samme hvor man bare kan indsætte eller noget.
Avatar billede arne_v Ekspert
27. oktober 2004 - 11:11 #45
Artiklen (og dine bøger) har eksempel på servlet koden og hvordan den
ligges ind i web.xml.

Principielt kan man bare bruge den samme JDBC kode i en servlet.

Men det er lidt besværligt med at du skal have både en doGet og en doPost metode.

Og det er meget besværligt at outputte alt det HTML fra en servlet.

Den eneste brug af servlet som er nogenlunde forsvarlig er:

JSP side med form som viser data
submit til servlet
servlet gemmer data og laver en redirect/forward til JSP side
Avatar billede noerdar-dilling Nybegynder
27. oktober 2004 - 11:28 #46
ok der mange tak, men det er vel hele fordelen bag servlets
Avatar billede arne_v Ekspert
27. oktober 2004 - 12:01 #47
Der er ikke mange fordele ved servlets.

:-)
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