JavaWeb_MVC案例之小结(1)
MVC案例之小结(1)
- 1.整体的架构:MVC设计模式到底如何落地。
- 2.多个请求对应一个Servlet
1)Servlet映射为*.do:可以接受一切.do结尾的请求。
<servlet-mapping>
<servlet-name>CustomerServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
.
2)在Servlet的doGet和都Post方法中:
//1.获取ServletPath:/update.do 或 /add.do
String servletPath = request.getServletPath();
//2.去除 / 和 do,得到类似于update或do这样的字符串
String methodName = servletPath.substring(1);
methodName = methodName.substring(0,methodName.length() - 3);
try {
//3.利用反射获取methodName对应的方法
Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
//4.利用反射调用对应的方法
method.invoke(this, request, response);
} catch (Exception e) {
//若调用的方法不存在,响应一个error.jsp。
response.sendRedirect("error.jsp");
}
- 3.查询:MVC的整个流程
query.do --> doPost --> query --> JSP
调用CustomerDAO的getForListWithCriteriaCustomer()得到Customer的集合。
//1.调用CustomerDAO的getForListWithCriteriaCustomer(cc)得到Customer的集合。
List<Customer> customers = customerDAO.getForListWithCriteriaCustomer(cc);
//2.把Customer的集合放入request中。
request.setAttribute("customer", customers);
//3.转发页面到index.jsp(不能使用重定向)。
request.getRequestDispatcher("/index.jsp").forward(request, response);
JSP:获取request中的customers属性,遍历显示。
<%
List<Customer> customers = (List<Customer>)request.getAttribute("customer");
%>
<%
for(Customer customer: customers) {
%>
<tr>
<td><%= customer.getName() %></td>
<td><%= customer.getAddress() %></td>
<td><%= customer.getPhone() %></td>
<td><a href="">Edit</a></td>
<td><a class="delete" href="delete.do?id=<%= customer.getId()%>">Delete</a></td>
</tr>
<%
}
%>
- 4.模糊查询:
1)正常的SQL:
String sql = "SELECT id, name, address, phone FROM customers WHERE name LIKE ? AND address LIKE ? AND phone LIKE ?";
.
2)填充占位符的技巧:以name属性为例:若name字段为null,则返回“%%”,若不为null,返回“%” + “%”。
public String getName() {
if (name == null)
name = "%%";
else
name = "%" + name + "%";
return name;
}
.
3)把查询条件封装为一个JavaBean。
public class CriteriaCustomer {
private String name;
private String address;
private String phone;
//...