2017-08-09 53 views
1

我在JSP Servlet的是新的,我想要的只是使用的servlet的ResultSet數據在JSP頁面...當我運行它給我像如何在jsp頁面中使用Servlet ResultSet?

org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP 

PWC6199: Generated servlet error: 
source value 1.5 is obsolete and will be removed in a future release 

PWC6199: Generated servlet error: 
target value 1.5 is obsolete and will be removed in a future release 

PWC6199: Generated servlet error: 
To suppress warnings about obsolete options, use -Xlint:-options. 

PWC6197: An error occurred at line: 148 in the jsp file: /products.jsp 
PWC6199: Generated servlet error: 
cannot find symbol 
symbol: class ResultSet 
location: class org.apache.jsp.products_jsp 

PWC6197: An error occurred at line: 148 in the jsp file: /products.jsp 
PWC6199: Generated servlet error: 
method processRequest in class jdbc.units cannot be applied to given types; 
required: javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse 
found: no arguments 
reason: actual and formal argument lists differ in length 

這裏的錯誤代碼做任務是我的代碼..

units.java

package jdbc; 

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.sql.*; 
import java.util.*; 
import java.util.logging.*; 
import org.json.*; 
import javax.servlet.http.HttpSession; 

public class units extends HttpServlet { 
    protected ResultSet processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     ResultSet rs = null; 
     response.setContentType("text/html;charset=UTF-8"); 
     try (PrintWriter out = response.getWriter()) { 
      try { 
       Class.forName("com.mysql.jdbc.Driver"); 
      } catch (ClassNotFoundException ex) { 
       Logger.getLogger(units.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      try { 
       Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/gst_application", "root", ""); 
       String sql = "SELECT * FROM `product_units` ORDER BY `product_unit_id` ASC"; 
       PreparedStatement ps = null; 
       ps = con.prepareStatement(sql); 
       rs = ps.executeQuery(); 

      } catch (SQLException ex) { 
       Logger.getLogger(units.class.getName()).log(Level.SEVERE, null, ex); 
       out.print(ex); 
      } 

     } 
     return rs; 
    } 
} 

product.jsp

<%@page import="jdbc.units"%> 
<select class="form-control" name="product_unit" required="required"> 
    <% 
     units obj = new units(); 
     ResultSet rs = obj.processRequest(); 
     while(rs.next()) 
     { 
      out.print("<option>"+rs.getString("unit_val")+"</option>"); 
     } 
    %> 
</select> 
+0

列表中你應該永遠,永遠傳遞的ResultSet了創建它的方法。您需要將值映射到對象或數據結構中,並在finally塊的方法範圍內關閉ResultSet。不要在JSP中編寫scriptlet代碼。如果你必須編寫一個JSP,你應該只使用JSTL。 – duffymo

回答

1

首先警告:您不應該直接在頁面中使用ResultSet。您應該將結果放入中間對象中,然後關閉ResultSet,Statement以及必要的連接。

就這麼說,就我所見,在JSP頁面中缺少導入語句,JSP編譯器無法找到ResultSet類。嘗試在JSP頁面中導入jdbc包。

+0

你可以給我演示代碼嗎? –

0

您可以將ResultSet對象放在列表中並將其傳遞到您的頁面,並在JSP中提取此列表。在這裏,我假設Demo是你的班級名稱。你可以根據你的類名改變代碼。不要忘記關閉連接。

在Servlet的

Demo d = null; 
List <Demo> myList = new ArrayList<>(); 
while (rs.next()) { 
     myList.add(d); 
} 
rs.close(); 
ps.close(); 
con.close(); 
request.setAttribute("List", myList); 

轉發你的JSP文件中像這樣的迴應:

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/pageName.jsp"); 
requestDispatcher.forward(request, response); 

在JSP

使用這種標籤:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

訪問使用forEach

<c:forEach items="${List}" var="theList"> 
      <tr> 
       <td></td> 
       <td>${theList.attributeName}</td> 
       ... 
      </tr> 
</c:forEach>