Anzeigen der Daten von Datenbank in jsp - MVC
Ich versuche zu kommen mit einem code, entspricht der mvc-Architektur und Darstellung des Inhalts einer Datenbank, in die jsp-Seite.. Die Verbindung und Verarbeitung von Daten im java-Dateien und nur die Anzeige der Daten in die jsp-Seite.
Ich verwende tomcat-server. Ich habe ojdbc6.jar und jstl-1.2.jar auf meiner WEB-INF/lib-Ordner.
(Update) Nach dem ändern mein web.xml zu Punkt-zu-index-ich habe java.lang.StackOverflowError Fehler.
Gibt es etwas, was fehlt/falsch mit dem code? Auch wenn ich nicht mit der Einhaltung des MVC-design, lassen Sie es mich wissen.
Jede Idee wäre willkommen.
Danke.
Hier ist der code, den ich versuche zu laufen.
DBConn.java
public class DBConn extends HttpServlet{
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
Connection connection = null;
Statement stmt=null;
ResultSet rs=null;
List<Employee> dataList = new ArrayList<Employee>();
try {
//Load the JDBC driver
String driverName = "oracle.jdbc.driver.OracleDriver";
Class.forName(driverName);
//Create a connection to the database
String serverName = "localhost";
String portNumber = "1521";
String sid = "xe";
String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
String username = "hr";
String password = "hr";
connection = DriverManager.getConnection(url, username, password);
stmt = connection.createStatement();
rs = stmt.executeQuery("select employee_id, first_name from employees");
while (rs.next()) {
dataList.add(new Employee(rs.getInt("employee_id"),
rs.getString("first_name")));
}
} catch (ClassNotFoundException e) {
//Could not find the database driver
e.printStackTrace();
} catch (SQLException e) {
//Could not connect to the database
e.printStackTrace();
} finally{
if(rs!=null){
try{
rs.close();
}catch(Exception ex) { /* */ ex.printStackTrace();}
}
if(stmt!=null){
try{
stmt.close();
}catch(Exception ex) { /* */ ex.printStackTrace();}
}
if(connection !=null){
try{
connection.close();
}catch(Exception ex) { /* */ ex.printStackTrace();}
}
}
request.setAttribute("data", dataList);
String strViewPage = "index.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(strViewPage);
if (dispatcher != null) {
dispatcher.forward(request, response);
}
}
}
Employee.java
public class Employee {
private Integer id;
private String name;
//public constructors and
//setter/getter
public Employee(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
index.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<table border="1" width="303">
<tr>
<td width="119"><b>Emp ID</b></td>
<td width="168"><b>First Name</b></td>
<tr
<form action="post">
<c:forEach var="employee" items="${data}">
<br/> ${employee.id} ${employee.name}
</c:forEach>
</form>
</tr>
</table>
</body>
</html>
web.xml
<servlet>
<servlet-name>DBConn</servlet-name>
<servlet-class>DB.DBConn</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DBConn</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
Fehler
09 6, 12 10:09:00 AM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet DBConn threw exception
java.lang.StackOverflowError
at java.util.HashMap$KeySet.<init>(HashMap.java:872)
at java.util.HashMap$KeySet.<init>(HashMap.java:872)
at java.util.HashMap.keySet(HashMap.java:869)
at java.util.HashSet.iterator(HashSet.java:153)
at java.util.Collections$1.<init>(Collections.java:3382)
at java.util.Collections.enumeration(Collections.java:3381)
at org.apache.catalina.connector.Request.getAttributeNames(Request.java:1027)
at org.apache.catalina.connector.RequestFacade.getAttributeNames(RequestFacade.java:300)
at org.apache.catalina.core.ApplicationHttpRequest$AttributeNamesEnumerator.<init>(ApplicationHttpRequest.java:927)
at org.apache.catalina.core.ApplicationHttpRequest.getAttributeNames(ApplicationHttpRequest.java:243)
at org.apache.catalina.core.ApplicationHttpRequest$AttributeNamesEnumerator.<init>(ApplicationHttpRequest.java:927)
at org.apache.catalina.core.ApplicationHttpRequest.getAttributeNames(ApplicationHttpRequest.java:243)
- Haben Sie versucht, Druck der Größe der Daten-Liste in der Servlet, nur um sicherzustellen, dass Sie werden immer die Daten aus der Datenbank.
- danke für die Antwort. Ich versuchte, Sie zu haben, aber es scheint, dass alle das System.aus.println("Count-Daten:" + dataList.size()); kann ich in meinem code wird nicht angezeigt. Jetzt bin ich angefangen mich zu Fragen, wenn etwas falsch ist mit meinem setup 🙁
- Ja, ich würde zuerst sicherstellen Servlet aufgerufen wird, bevor Sie kratzen den Kopf zu viel.
- sorry Neuling hier. Ist das setup in web.xml?
- Ich würde anfangen, aus web.xml um herauszufinden, welche url und die servlet zugeordnet ist.
- Sie sind Recht index.jsp wurde nicht zugeordnet DBConn.. ich es ändern, ich bin jetzt immer diese Fehlermeldung 🙁 SCHWERWIEGEND: Servlet.service() for servlet DBConn warf Ausnahme java.lang.StackOverflowError
- Bitte aktualisieren Sie Ihre Frage mit vollständiger stacktrace.
- aktualisiert.. außerdem habe ich meinen web.xml
- mögliche Duplikate von java jsp für die Anzeige von Daten aus der Datenbank
- tut mir Leid, dass mein post war ein bisschen verwirrend ist es, das ist, warum ich erstellt eine neue. Ich möchte den alten entfernen aber ich kann nicht. Ich wirklich brauchen, um meine dieser code funktioniert 🙁
- Legen Sie bereits die
${data}
imdoGet()
Anfrage, ich sehe keinen Grund für die<form />
tag in Ihrem index.jsp. Funktioniert es ohne die<form action="post">
tag?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die Konfiguration Ihres servlet-und servlet-mappings, möchten Sie möglicherweise zum konfigurieren der url-Muster, die Sie erwähnten in das servlet-mapping in Ihr jsp zu.
JSP
web.xml
Auch, möchten Sie vielleicht zu prüfen, mit einem Data Access Object pattern. (Ignorieren, wenn Sie nur versuchen, zu verstehen, servlets)
doGet
Methode. Entfernen Sie dieaction=post
Attribut oder ändern Sie es zu bekommen. Sie immer noch müssen, um die Aktion hinzuzufügen-tag in Ihrem jsp -<form action="get" action="/index">
entsprechend Ihrer url-Muster.verwenden
dispatcher.include(request, response)
Methode.