整理自己蒐集的學生javaweb作業系統。【侵權請聯繫作者】
暢想:後期慢慢統一各個系統,依據不同需求,而進行定製化處理。
1.停車場系統。
代碼提取地址: https://pan.baidu.com/s/1s3LVtwRzRaC1xCqMB-GRhg 提取碼:ex6j
擴展:目前擴展了自動處理sql腳本【注意這時對應的serverlet不能懶加載】,處理main.jsp記錄展示當前用戶相關信息,使用echarts代替了flash插件
2.商場庫存管理系統
代碼提取路徑:https://pan.baidu.com/s/166CJN920M6E3MawaYPjaVQ 提取碼:izia
說明:項目利用了status2、hibernate、jsp技術, 以及使用 bootstap進行前端佈局;
我關注點:Hibernate緩存包括兩大類:一級緩存和二級緩存
Hibernate一級緩存又被稱爲“Session的緩存”。Session緩存是內置的,不能被卸載,是事務範圍的緩存,在一級緩存中,持久化類的每個實例都具有唯一的OID。
Hibernate二級緩存又稱爲“SessionFactory的緩存”,由於SessionFactory對象的生命週期和應用程序的整個過程對應,因此Hibernate二級緩存是進程範圍或者集羣範圍的緩存,有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略爲被緩存的數據提供了事務隔離級別,第二級緩存是可選的,是一個可配置的插件,默認下SessionFactory不會啓用這個插件。
public class Hibernate {
private static Configuration config = new Configuration().configure();
//Hibernate二級緩存又稱爲“SessionFactory的緩存”
private static SessionFactory session_factory = config.buildSessionFactory();
//Hibernate一級緩存又被稱爲“Session的緩存”
public static Session session = session_factory.openSession();
public static Transaction t;
public static void close() {
session_factory.close();
}
}
Test
//事務開始標記
Hibernate.t = Hibernate.session.beginTransaction();
User user1 = (User) Hibernate.session.get(User.class, user.getUser_id());
//事務提交
Hibernate.t.commit();
3快遞管理員系統
代碼提取: https://pan.baidu.com/s/1vgCeqCOnKPrPQOxmY0aXUA 提取碼:5yvm
說明:項目利用了servlet、c3p0數據庫連接池技術[中間使用了itcast的工具包]、jsp技術, 以及使用 easyUI進行前端佈局;
比較關注的點有:該程序中業務調用都是基於url進行反射調用,例如http://localhost:8080/express/UserServlet?method=seclectAll ,[servelt攔截器配置名稱]?[固定請求參數名]=[調用的方法名稱]
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");//處理響應編碼
/**
* 1. 獲取method參數,它是用戶想調用的方法 2. 把方法名稱變成Method類的實例對象 3. 通過invoke()來調用這個方法
*/
String methodName = request.getParameter("method");
Method method = null;
/**
* 2. 通過方法名稱獲取Method對象
*/
try {
method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
} catch (Exception e) {
throw new RuntimeException("您要調用的方法:" + methodName + " 它不存在!", e);
}
/**
* 3. 通過method對象來調用它
*/
try {
String result = (String) method.invoke(this, request, response);
if (result != null && !result.trim().isEmpty()) {//如果請求處理方法返回不爲空
int index = result.indexOf(":");//獲取第一個冒號的位置
if (index == -1) {//如果沒有冒號,使用轉發
request.getRequestDispatcher(result).forward(request, response);
} else {//如果存在冒號
String start = result.substring(0, index);//分割出前綴
String path = result.substring(index + 1);//分割出路徑
if (start.equals("f")) {//前綴爲f表示轉發
request.getRequestDispatcher(path).forward(request, response);
} else if (start.equals("r")) {//前綴爲r表示重定向
response.sendRedirect(request.getContextPath() + path);
}
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
持續更新中
說明更新的項目來着小白日常蒐集,學習相關邏輯,並加入了自己的設想,以及自己學習的內容與其中。
如有侵權,請聯繫處理謝謝。