前言:
實訓本週的一個完整程序,接上一篇弱採用模型一的開發模式(非MVC),這個應用將會產生非常複雜的代碼,採用MVC設計模式,應該就是本週實訓周的任務,這裏不會貼完整的代碼,就只是寫寫,這個小小項目時候的一些心得。
注意事項
1、POJO層處理的時候,設計到時間的處理需要特別記錄一下筆記:
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//從前端或者自己模擬一個日期格式,轉爲String即可
String dateStr = format.format(date);
String sql="insert into orders(userId,total,addDate,isPay) values(?,101,?,0)";
JdbcUtil.conn=JdbcUtil.getConn();
try {
psmt=JdbcUtil.conn.prepareStatement(sql);
psmt.setInt(1, userId);
psmt.setString(2, dateStr);
int num=psmt.executeUpdate();
rSet=psmt.getGeneratedKeys();
if (rSet.next()) {
int orderId=rSet.getInt(1);
dao.saveById(orderId, goodsId);
}
return num;
} catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtil.close(rSet, psmt, JdbcUtil.conn);
}
return false;
2、Servlet的優化
問題:
在新聞編輯以及查看,可以看到一個Topic和News都有類似的Add 和delete 方法,通過action區分後用if else來判斷則非常大量冗餘代碼,如:
String opr=request.getParameter("action");
if ("list".equals(opr)) {
TopicService service=new TopicServiceImpl();
List<Topic> list=service.showAllTopicList();
for (Topic t : list) {
System.out.println("name: "+t.getTname()+" id"+t.getTid());
}
}else if ("add".equals(opr)) {
}else if ("update".equals(opr)) {
//3、修改
}else if ("delete".equals(opr)) {
//4、
}else if ("find".equals(opr)) {
}
但是呢 ,通過反射我們,可以對其優化:
先創建一個繼承HttpServlet的名爲AbstractServlet 然後再創建一個繼承這個類的TopicServlet
AbstractServlet:
package com.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AbstractServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、獲取action的參數值
//2、當前Servlet類
//3、根據參數值獲取要執行的方法
//4、通過反射調用該方法
//1、當前是那個Servlet類
Class clazz=this.getClass();
//2、執行當前方法名
String methodName=req.getParameter("action");
//3、反射機制執行
try {
//創建類對象
Object obj=clazz.newInstance();
//獲取方法名稱 獲取指定的方法
Method m=clazz.getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//通過對象調用方法
m.invoke(obj, req,resp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
No ending