//1.获取ServletPath:/update.do或/add.do
String servletPath=request.getServletPath();
//2.去除 / 和 .do ,得到类似于update 或 add 这样的字符串:update 或 add
String methodName=servletPath.substring(1);
methodName=methodName.substring(0, methodName.length()-3);
try {
//3.利用反射获取methodName 对应的方法:update 或 add 对应的Method
Method method=getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//4.利用反射调用对应的方法:调用update 或 add
method.invoke(this, request,response);
} catch (Exception e) {
//e.printStackTrace();
//若要调用的方法不存在,响应一个error.jsp 页面
response.sendRedirect("error.jsp");
}
query.do ---> doPost ---> query ---> JSP
query 方法的代码:
//1.直接调用CustomerDAO 的getForListWithCriteriaCustomer() 方法得到Customer 的集合
List
//2.把Customer 的集合放入request中
request.setAttribute("customers", customers);
//3.转发页面到index.jsp (不能使用重定向!)
request.getRequestDispatcher("/index.jsp").forward(request, response);
JSP:获取request 中的属性,并且遍历显示
<%
List
for(Customer customer:customers){
%>
<%= customer.getId() %>
<%= customer.getName() %>
<%= customer.getAddress() %>
<%= customer.getPhone() %>
UPDATE
DELETE
<%
}
%>
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,则返回"%"+name+"%"
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;
//...
}
1). 超链接:delete.do?id=<%=customer.getId()%>
2). Servlet 的 delete 方法
①. 获取 id
②. 调用 DAO 执行删除
③. 重定向到 query.do(若目标页面不需要读取当前请求的 request 属性,就可以使用重定向),将显示删除后的 Customer 的 List
3). JSP 上的 jQuery 提示:
确定要删除 xx 的信息吗?