2012-05-07 12 views
1

私は今このJSPでかなり素早く作業しており、このJSPビジネスについてかなり素早く学習しているように感じています。JSPのエラーが出て、私はそれが構造のためだと思いますか?

しかし、私はこれが正しいとは思わないでしょうか?私は私のlocathostの下でそれを試して、私はそれが私のブラウザ上に吐き出すときに問題を抱えています。だから私はそれが間違って構造化されているように感じるが、正直言って;私が間違ったところで練習することができない、私は約5時間JSPを行っているので、私に疑念の恩恵を与えてください。

<%@ 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. 
+3

JSPページのコード量を最小限に抑えてください。代わりに「本物の」クラスのメソッドを呼び出してください –

+0

@ThorbjørnRavnAndersen痛みは残念ですが、これは私にとって初めてのことです.. –

+0

@duffymoだから、Shorthand PHPがどのように動作するのかと似たように呼び出すことができます:Wordpress? –

答えて

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> 
0

あなたは非常に、非常に古いソースから学んでいます。あなたが使っているスタイルは1990年代後半に出ました。 誰もいませんはJSPをそのように書きます。

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

JDBCについてももっと学ぶ必要があります。

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

私はあなたのアクセス接続用のDSNレスURLを使用することをお勧めしたい:

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

私は、サーブレットでその接続を作ると思います。

私はJSPでHans BergstenのO'Reillyの本を手に入れて、そのことを学び始めました。それは何年も前からやり遂げるための正しい方法を示しました。

更新:あなたはループの外のResultSetにアクセスしようとしましたので

Invalid cursor state 

これが起こりました。コードを修正して修正しました。これが役立つかどうかを見てください。さらに進める前に、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> 
+0

これは私の大学の要件です。このモジュールは実際には2005年に書かれたので、古いです。これは典型的な大学の基準です(3年目の完全で完全な間違いですが、私はそれを渡す必要があります)。それはローカルでも行われますので、サーバにアップロードする必要はありません。 –

+1

どの学校ですか? JSPを書く方法のような低レベルのことについて大学がなぜ気にするべきですか?データ構造、ネットワーキングなどの高レベルの概念はどこにありますか? – duffymo

+0

私の大学はAnglia Ruskin-SHOCKです。彼らは私たちに何かもっと教えるべきだと思っていましたが、私は何もできないと思っています。 このサーブレットを調べます。私は別のドキュメントにコードを書いて呼び出すと思いますが、それは正しいのですか? –

0

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

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

また、両方のレコードダンプで "NameofPlace"を2回取得するというマイナーポイントがあります。そして、あなたのTDの幅の合計はわずか80%です。合計は100%でなければなりません。つまり、画面全体ではなく、テーブルの幅に対する相対的な割合です。

+0

ええ、申し訳ありませんが、おそらく2番目の 'NameofPlace'は2番目のものがフィラーで、データベースの添付ファイルを並べ替えるだけで、HTMLの調整は分かっているので重要ですメインのポストに言及していないことについてもう一度申し訳ありません) 私はメインの投稿を間違いで更新しました。私は助けて、できるだけ協力的であることを願っています... –

関連する問題