2012-03-16 49 views
1

我有這樣的代碼......過濾器使用表單/在DAO參數/ servlet的

ifsDAO.java

package source; 

import java.sql.*; 
import java.sql.SQLException; 
import java.util.*; 


public class ifsDAO { 

private Database database; 

public ifsDAO(Database database) { 
this.database = database; 

} 

public List<ifsBean> list() throws SQLException { 
Connection connection = null; 
PreparedStatement statement = null; 
ResultSet resultSet = null; 
List<ifsBean> ifs_array = new ArrayList<ifsBean>(); 



try { 

connection = database.getConnection(); 
statement = connection.prepareStatement("select * from emp_details"); 
resultSet = statement.executeQuery(); 
while (resultSet.next()) { 
ifsBean arraylist = new ifsBean(); 
arraylist.setFname(resultSet.getString("fname")); 
arraylist.setSname(resultSet.getString("sname")); 
arraylist.setTown(resultSet.getString("town")); 
ifs_array.add(arraylist); 
} 
} finally { 
if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {} 
if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} 
if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} 
} 

return ifs_array; 
} 
} 

ifsBean.java

package source; 


public class ifsBean { 

private String fname; 
private String sname; 
private String town; 

public String getFname() { return fname; } 
public String getSname() { return sname; } 
public String getTown() { return town; } 

public void setFname(String fname) { this.fname = fname; } 
public void setSname(String sname) { this.sname = sname; } 
public void setTown(String town) { this.town = town; } 
} 

Database.java

數據
package source; 

import java.sql.*; 

public class Database { 
private String url; 
private String username; 
private String password; 

public Database(String driver, String url, String username, String password) { 
try { 
Class.forName(driver); 
} catch (ClassNotFoundException e) { 
throw new RuntimeException("Driver class is missing in classpath", e); 
} 
this.url = url; 
this.username = username; 
this.password = password; 
} 

public Connection getConnection() throws SQLException { 
return DriverManager.getConnection(url, username, password); 
} 
} 

ifsServlet.java

package source; 

import java.io.IOException; 
import java.sql.SQLException; 
import java.util.*; 
import javax.servlet.ServletException; 
import javax.servlet.http.*; 


public class ifsServlet extends HttpServlet { 

private ifsDAO ifsDAO; 


@Override 
public void init() throws ServletException { 
String driver = "org.postgresql.Driver"; 
String url = "jdbc:postgresql://localhost/mydb"; 
String username = "user"; 
String password = "pass"; 


Database database = new Database(driver, url, username, password); 
this.ifsDAO = new ifsDAO(database); 
} 


@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 

try { 
List<ifsBean> ifs_array = ifsDAO.list(); 

request.setAttribute("ifs_array", ifs_array); 
request.getRequestDispatcher("ifslist.jsp").forward(request, response); 
} catch (SQLException e) { 
throw new ServletException("Cannot retrieve areas", e); 
} 
} 
} 

ifslist.java

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>JSP Page</title> 
</head> 
<body> 
<h1>Hello</h1> 
<table> 
<c:forEach items="${ifs_array}" var="array"> 
<tr> 
<td>${array.fname}</td> 
<td>${array.sname}</td> 
<td>${array.town}</td> 

</tr> 
</c:forEach> 



</table> 

</body> 
</html> 

我可以顯示所有的數據,它工作得很好

然而,我怎麼可以在這裏對結果進行篩選使用過濾器或鏈接和參數.. 。

例子:www.example.com?id=parameter

對不起IM很新..和學習...

回答

1

你的問題有些寬泛,但這裏有幾個技巧:

  • 我假設你知道如何執行額外?name=parameter另一個GET請求到同一個servlet。

  • 在你的servlet的doGet()方法,你需要獲得name參數的值:

    String name = request.getParameter("name"); 
    

    這將返回null如果name=參數不存在

  • 通過你的name到DAO層。您將需要一個額外的參數list()方法:

    List<ifsBean> ifs_array = ifsDAO.list(name); 
    
  • 在你的DAO,你需要利用這個參數的優勢:

    connection.prepareStatement("select * from emp_details WHERE fname = ?"); 
    

    然後,你需要你的name傳遞給查詢,請參閱Using Prepared Statements瞭解詳情。

就是這樣!你的代碼使用非常低級的結構,但看起來很好。

+0

你好Tomasz ..謝謝你的答案..我跟着你的步驟,但即時通訊netbeans中出現錯誤...這就像我需要將字符串添加到「公開列表列表()」在DAO。 – toink 2012-03-16 17:21:52

+0

然後如果我這樣做..我可以擺脫netbeans中的所有錯誤,但是當我測試它時,我得到HTTP Status 500 – toink 2012-03-16 17:24:10

+0

Opps抱歉,我認爲我沒有在準備好的聲明中正確執行它......讓我請再試一次 – toink 2012-03-16 17:33:37