使用servlet和jsps进行数据库搜索

时间:2014-06-04 03:05:45

标签: java mysql jsp servlets

我正在学习java servlet并尝试编写一个程序,要求用户输入一个名称,并列出db中匹配名称的所有行。我的问题是,我将用户给定的值存储在我的控制器类的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;

1 个答案:

答案 0 :(得分:0)

我想您正在尝试应用“模型2”模式,以便隔离不同的层,3个不同的组件。

其中一个是你所有的代码来处理用户请求(称为controller)并构建其他不同的组件,即Bean / DTO通常涉及的数据响应。最后是一个jsp存档(view),您可以在其中使用以前加载的Bean编写响应。

允许分离视图和控制器的键抽象bean,并知道放置 bean的位置,以使其可见适用于ControllerView。在你的情况下,我看到你正在使用一个控制器,即构建一个Bean,我猜你忘了将bean传递给view,然后在一些中使用该bean scriplet标签

在控制器内部应该有这样的一行:

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,2nd Edition”这本书,它非常适合开始使用普通的servlet,jsp和服务器作为bean的普通类。

我想这是开始做一些摇滚的servlet所需的非常基本的信息! 继续练习!

问候!

希望它有所帮助!