2013-04-24 20 views
-1

我正在開發servlet的在線考試應用程序。當我使用getParamter( - )方法讀取單選按鈕值時,它的shows/returns「on」是某些參數名稱的參數值。它隨機地改變它們的值。我正在開發servlets和jsp的在線考試系統

例如第一,當我們請求它示出了「接通」單選按鈕2,5-問題值。 ,第二次顯示單選按鈕7,4個問題。

請覈實我的代碼,並告訴我什麼是我的錯誤

代碼

import java.io.IOException; 
import java.io.PrintWriter; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

public class ExamSrv extends HttpServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    int j = 1; 
    PrintWriter pw = response.getWriter(); 
    response.setContentType("text/html"); 
    Connection con = null; 
    ResultSet resultSet = null; 
    Statement st = null; 
    try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     con = DriverManager.getConnection("jdbc:odbc:accdsn"); 
     st = con.createStatement(); 
     resultSet = st.executeQuery("select qno,question,option1,option2,option3,option4 from Level1 where qno<=10"); 
     pw.println("<form action=ansurl name=ans method=get>"); 
     while (resultSet.next()) { 

     int k = resultSet.getInt(1); 

     pw.println(k + ")."); 
     pw.println("<b><font size=3>" + resultSet.getString(2) + "</font></b><br><br>"); 
     pw.println("<input type=radio name=opt" + j + " value=1 unchecked/>a)<b>" + resultSet.getString(3) + 
        "</b> &nbsp;&nbsp;"); 
     pw.println("<input type=radio name=opt" + j + " value =2 />b)<b>" + resultSet.getString(4) + 
        "</b> &nbsp;&nbsp;"); 
     pw.println("<input type=radio name=opt" + j + " vaule=3 />c)<b>" + resultSet.getString(5) + 
        "</b> &nbsp;&nbsp;"); 
     pw.println("<input type=radio name=opt" + j + " value=4 />d)<b>" + resultSet.getString(6) + 
        "</b><br><br><br> "); 

     j++; 


     } 
     pw.println("<input type=submit name=submit value=submit>"); 
     pw.println("</form>"); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    doGet(req, res); 
    } 
} 

但我修改的形式方法「POST」它顯示了在瀏覽器將不支持後..

閱讀

public class AnsSrv extends HttpServlet { 
    public void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { 
    int j = 1, cnt = 0, fal = 0; 
    PrintWriter pw = response.getWriter(); 
    response.setContentType("text/html"); 
    Connection con = null; 
    ResultSet resultSet = null; 
    Statement st = null; 
    try { 
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     con = DriverManager.getConnection("jdbc:odbc:accdsn"); 
     st = con.createStatement(); 
     resultSet = st.executeQuery("select answer from Level1 where qno<=10"); 

     while (resultSet.next()) { 
     if (req.getParameter("opt" + j).equals(resultSet.getString(1)) 
      { 
      pw.println("opt"+j+"<br>"); //here it shows "on " value as on browser window 
      cnt++; 
     else 
      fal++; 
     j++; 
     } 

     pw.println("your marks are:" + (cnt - fal)); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 


    } 

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    doGet(req, res); 
    } 

} 
+0

的代碼,如最初發布,則不會進行編譯。我已經修復了這些編譯問題,並對代碼進行了重新格式化以提高可讀性。考慮將來使用源代碼美化工具(如jacobe)。 – 2013-04-24 18:14:55

+0

您沒有正確關閉數據庫資源。添加一個finally塊並使用類似http://commons.apache.org/proper/commons-dbutils/apidocs/org/apache/commons/dbutils/DbUtils.html#closeQuietly%28java.sql.Connection,%20java.sql .Statement,%20java.sql.ResultSet%29。 – 2013-04-24 18:26:06

回答

1
while(resultSet.next()) 
{ 
      if(req.getParameter("opt"+j).equals(resultSet.getString(1))) 
       cnt++; 
       else 
       {   // block only if you wont to execute both the statements. 
       fal++; 
       j++; 
       } 


} 
使用Java的

==不比較字符串的值。它比較對象的參考。 所以使用equals方法爲

+0

另外,如果你希望'else ++'和'j ++'在else中被執行,就用'else'語句放一個塊。 – 2013-04-24 18:07:59

+0

作爲你的解釋我嘗試過,但它顯示「上」阿金... – shaiksharif 2013-04-25 16:13:58