1

私は現在、このJSPでかなり迅速に作業しており、このJSPビジネスでかなり迅速に学習しているように感じています。

しかし、私はこれが正しくないと思わずにはいられませんか?私は自分のlocathostで試してみましたが、ブラウザから吐き出されると問題が発生します。ですから、私はそれを間違って構成したように感じますが、正直に言うと、; どこが間違っているのかわからないので、JSPを5時間ほどやっているので、疑問の余地を教えてください。

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<%@ page import="java.io.*" import="java.sql.*"%>
</head>
<body>

<!-- BELOW IS DATABASE CONNECTION SET UP -->
<% 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:database11"); 
// END OF  DATABASE CONNECTION SET UP 
// START OF TESTING 

String mysql="select * from hotels";
Statement s=con.createStatement();
ResultSet rst=s.executeQuery(mysql);

out.println("<table border='1' width='70%'>");
out.println("<tr>");
out.println("<td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
out.println("<td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
out.println("<td width='10%'>" + rst.getString ("Country") + "</td>");
out.println("<td width='10%'>" + rst.getString ("PricePerNight") + "</td>");
out.println("<td width='10%'>" + rst.getString ("MaximumPersons") + "</td>");
out.println("<td width='10%'>" + rst.getString ("StarRating") + "</td>");
out.println("<td width='20%'>" + rst.getString ("Description") + "</td>");
out.println("</tr>");

while (rst.next()) {

// Column Details of hotels

out.println("<tr>");
out.println("<td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
out.println("<td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
out.println("<td width='10%'>" + rst.getString ("Country") + "</td>");
out.println("<td width='10%'>" + rst.getString ("PricePerNight") + "</td>");
out.println("<td width='10%'>" + rst.getString ("MaximumPersons") + "</td>");
out.println("<td width='10%'>" + rst.getString ("StarRating") + "</td>");
out.println("<td width='20%'>" + rst.getString ("Description") + "</td>");
out.println("</tr>");
}

out.println("</table>");


rst.close();
con.close();

%>

</body>
</html>

私が間違ったことをしたことがあれば、それが非常にきちんとしていて、よく構成されていて、完璧になると想像できるので、教えてください。

私がしていることに興味がある場合は、今朝早くに私の前の投稿を参照してください: https ://stackoverflow.com/questions/10485667/university-jsp-booking-project#comment13551068_10485667

しかし、なぜそれが機能しないのですか、どんな助けも非常にありがたいです!?

私のエラー:

org.apache.jasper.JasperException: Exception in JSP: /0906055/index.jsp:24

21: 
22: out.println("<table border='1' width='70%'>");
23: out.println("<tr>");
24: out.println("<td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
25: out.println("<td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
26: out.println("<td width='10%'>" +  rst.getString ("Country") + "</td>");
27: out.println("<td width='10%'>" + rst.getString ("PricePerNight") + "</td>");


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

root cause

javax.servlet.ServletException: [Microsoft][ODBC Driver Manager] Invalid cursor state
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
    org.apache.jsp._0906055.index_jsp._jspService(index_jsp.java:108)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

root cause

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
    sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
    sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
    sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
    sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
    sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
    org.apache.jsp._0906055.index_jsp._jspService(index_jsp.java:68)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.35 logs.
4

3 に答える 3

1

これが修正された問題です。コードを見た後、一番上の領域に移動し、同じ詳細を繰り返していました。これが、エラーの負荷を繰り返してサインオフさせた理由です。

JSPを流暢に知っていて、これは悪い習慣だと言う人がいることを私は知っています。(これは私が今学んだことなので、このようにコーディングしないことをお勧めします。ただし、将来の参考のために、そして私の立場にあるかもしれない人のために。

答えと完成したコードは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<%@ page import="java.io.*" import="java.sql.*"%>
</head>
<body>

<!-- BELOW IS DATABASE CONNECTION SET UP -->
<% 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:webapps"); 
// END OF  DATABASE CONNECTION SET UP 
// START OF TESTING 

String mysql="select * from hotels";
Statement s=con.createStatement();
ResultSet rst=s.executeQuery(mysql);

out.println("<table border='1' width='70%'>");
out.println(" <tr>");
out.println(" <td width='10%'><b>Name of Place</b></td>");
out.println(" <td width='10%'><b>Country</b></td>");
out.println(" <td width='10%'><b>Price Per Night</b></td>");
out.println(" <td width='10%'><b>Maximum Persons</b></td>");
out.println(" <td width='10%'><b>Star Rating</b></td>");
out.println(" <td width='10%'><b>Description</b></td>");
out.println(" </tr>");

while (rst.next()) {

// Column Details of hotels

out.println(" <tr>");

out.println(" <td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
out.println(" <td width='10%'>" + rst.getString ("Country") + "</td>");
out.println(" <td width='10%'>" + rst.getString ("PricePerNight") + "</td>");
out.println(" <td width='10%'>" + rst.getString ("MaximumPersons") + "</td>");
out.println(" <td width='10%'>" + rst.getString ("StarRating") + "</td>");
out.println(" <td width='20%'>" + rst.getString ("Description") + "</td>");
out.println(" </tr>");
}

out.println("</table>");


rst.close();
con.close();

%>

</body>
</html>
于 2012-05-08T09:24:28.600 に答える
0

あなたは非常に古い情報源から学んでいます。あなたが使用しているスタイルは、1990 年代後半に廃止されました。 そのように JSP を作成する人はもういません。

これは、データベースへのアクセスを JSP で行うべきではないという考え方です。

JDBC についても、さらに多くのことを学ぶ必要があります。

使用している Access データベースの場所がわからない ODBC データ ソースを使用しています。JSP コードはサーバー上で実行され、ブラウザに送信される HTML を作成することに注意してください。

Access 接続には DSN なしの URL を使用することをお勧めします。

http://www.jroller.com/sjivan/entry/dsn_less_jdbc_connection_to

私はサーブレットでその接続を行います。

Hans Bergsten の JSP に関する O'Reilly の本を手に入れて、そこから学び始めました。何年も前に物事を行う適切な方法を示しました。

アップデート:

Invalid cursor state

これは、ループの外で ResultSet にアクセスしようとしたために発生しました。コードを修正して修正しました。これが役立つかどうかを確認してください。先に進む前に、Oracle の JDBC チュートリアルを調べてください。

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<%@ page import="java.io.*" import="java.sql.*"%>
</head>
<body>

<!-- BELOW IS DATABASE CONNECTION SET UP -->
<% 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:database11"); 
// END OF  DATABASE CONNECTION SET UP 
// START OF TESTING 

String mysql="select * from hotels";
Statement s=con.createStatement();
ResultSet rst=s.executeQuery(mysql);

out.println("<table border='1' width='70%'>");

while (rst.next()) {

// Column Details of hotels

out.println("<tr>");
out.println("<td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
out.println("<td width='10%'>" + rst.getString ("NameofPlace") + "</td>");
out.println("<td width='10%'>" + rst.getString ("Country") + "</td>");
out.println("<td width='10%'>" + rst.getString ("PricePerNight") + "</td>");
out.println("<td width='10%'>" + rst.getString ("MaximumPersons") + "</td>");
out.println("<td width='10%'>" + rst.getString ("StarRating") + "</td>");
out.println("<td width='20%'>" + rst.getString ("Description") + "</td>");
out.println("</tr>");
}

out.println("</table>");


rst.close();
con.close();

%>

</body>
</html>
于 2012-05-07T20:43:18.613 に答える
0

どのようなエラー メッセージが表示されますか? それは、問題が何であるかを私たちに伝える大きな手がかりになるかもしれません!

エラーが 1 つあります。rst.getString の最初のブロックが、最初の rst.next の前に実行されています。最初の rst.next を実行するまでバッファにレコードがないため、取得する文字列はありません。おそらく、next() を実行する前に最初のレコードが利用可能であると考えていますか? そうではありません。最初に実行する next() は、最初のレコードを取得します。

また、両方のレコード ダンプで "NameofPlace" が 2 回取得されるという小さな点もあります。td 幅の合計はわずか 80% です。合計は 100% になるはずです -- td パーセンテージは、画面全体ではなく、表の幅に対するものです。(ただし、エラーは発生しません。ブラウザは、ユーザーの意図を推測するだけです。)

于 2012-05-07T20:44:43.637 に答える