JSP-小應用-新聞發佈系統

前言:

實訓本週的一個完整程序,接上一篇弱採用模型一的開發模式(非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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章