我正在学习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 放置在何处,以使其对于Controller
和View
都可见。 在您的情况下,我看到您正在使用一个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所需的非常基本的信息! 继续练习!
问候!
希望对您有所帮助!