簡體   English   中英

使用servlet和jsps進行數據庫搜索

[英]Database search using servlets and jsps

我正在學習Java Servlet,並嘗試編寫一個程序,要求用戶輸入名稱,並在數據庫中列出所有具有匹配名稱的行。 我的問題是,我將用戶給定的值存儲在控制器類的bean類的setter方法中。 但是,我無法從dao類中檢索它。 沒有得到任何異常或錯誤,代碼沒有產生任何結果。 任何幫助,將不勝感激。

控制器類別:

protected void doPost(HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
SearchDataHolder sch = new SearchDataHolder();
String fname = (String) request.getParameter("fname");
String lname = (String) request.getParameter("lname");
String email = (String) request.getParameter("email");
sch.setFname(request.getParameter("fname"));
sch.setLname((String) request.getParameter("lname"));
sch.setEmail((String) request.getParameter("email"));
if (((fname).isEmpty()) && ((lname).isEmpty()) && (((email).isEmpty() ))) {
    response.sendRedirect("BlankError.jsp");
    return;
} else {
    RequestDispatcher rd = request
            .getRequestDispatcher("SearchList.jsp");
    rd.forward(request, response);
    return;
}

道課:

Connection con = ConnectionUtils.createConnection();
PreparedStatement ps;
List<SearchDataHolder> users = new ArrayList<SearchDataHolder>();
SearchDataHolder sdh = new SearchDataHolder();
String firstName = sdh.getFname();
String lastName = sdh.getLname();
String email = sdh.getEmail();
try {

    String userList = "select * from Personal_Info where Fname='"
            + firstName + "' or Lname='" + lastName + "' or Email='"
            + email + "'";
    ps = con.prepareStatement(userList);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
        sdh.setFname((String) rs.getString("Fname"));
        sdh.setLname((String) rs.getString("Lname"));
        sdh.setMname((String) rs.getString("Mname"));
        sdh.setSex(rs.getString("Sex"));
        sdh.setDob((String) rs.getString("Date"));
        sdh.setEmail((String) rs.getString("Email"));
        sdh.setPtype((String) rs.getString("PhoneType"));
        sdh.setPhone((String) rs.getString("Phone"));
        sdh.setStreet((String) rs.getString("Street"));
        sdh.setCity((String) rs.getString("City"));
        sdh.setCity((String) rs.getString("State"));
        sdh.setZip((String) rs.getString("ZipCOde"));
        sdh.setCountry((String) rs.getString("Country"));
        users.add(sdh);
    }
} catch (SQLException e) {
    e.printStackTrace();
}
return users;

我猜您正在嘗試應用“模型2”模式,以便在不同的層中隔離3個不同的組件。

一種是放置代碼以處理用戶請求(稱為controller )並構建其他不同組件的地方,即Bean / DTO ,在其中放置通常涉及響應的數據。 最后是一個jsp存檔( view ),在其中放置了如何使用先前加載的Bean編寫響應。

允許將視圖和控制器分開的關鍵抽象bean ,並且知道將bean 放置在何處,以使其對於ControllerView都可見。 在您的情況下,我看到您正在使用一個Controller,正在構建一個Bean,我想您忘記了將該bean傳遞給view ,然后在一些scriplet標簽中使用了該bean。

在您的控制器內部應該有這樣一條線:

request.setAttribute("nameOfTheBeanToUseInsideTheJSPScriptlet",bean)

然后在jsp上(在您的情況下為“ SearchList.jsp”中),您可能會放置以下內容:

<%
Bean bean = request.getAttribute("nameOfTheBeanToUseInsideTheJSPScriptlet");
out.print(bean.getAValue());
%>

這是模型2的基礎,它是復合模式(由其他模式構成的模式),畢竟,復合模式是用於制作Java Web應用程序(Spring MVC,其余所有已知框架都將Struts置於此components之上,因為它只是用於構建Web應用程序的JSEE規范的一部分。

我建議閱讀《 Head First Servlets and JSP,第二版》這本書,非常適合開始使用作為服務器的普通Servlet,jsp和普通類。

我想這是您開始做一些搖擺不定的servlet所需的非常基本的信息! 繼續練習!

問候!

希望對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM