亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP+Servlet培訓班作業管理系統[11] -通用CRUD后端的實現(以人員管理為例)

2019-11-06 07:00:12
字體:
來源:轉載
供稿:網友

根據上一篇的設計,貓哥想實現的是對于類似的某種實體概念(比如人員)的增刪改查操作,將相似的邏輯封裝一下,不用每次都寫重復的部分。扯得遠了點,直接看具體如何實現的:

在具體實現之前,先展示下效果,需要注意,貓哥將表格美工,內容部分美工,整個后臺頁面美工的CSS文件都單獨抽取出來了,因為css不是本系列的重點且此前已經詳細講過了,此處不再貼代碼。

a,登錄成功后 這里寫圖片描述 b,點擊人員管理后 這里寫圖片描述 c,點擊人員編碼7右邊對應的刪除后 這里寫圖片描述 d,點擊人員編碼2右邊對應的編輯后 這里寫圖片描述 e,點擊保存后 這里寫圖片描述

1,首先就是菜單信息的參數化,因為增、刪、改、查等功能都是規定好的以/HomeworkSystem/AcitonServlet?method=XXX&entity=YYY&id=ZZZ中的參數為區分,所以將Constant類修改為:

package util;import java.util.HashMap;public class Constant {//保存常量信息 //roleMenu用于保存角色及對應的菜單信息 public static HashMap<String,String[][]> roleMenu=new HashMap<String,String[][]>(); //使用static代碼塊對roleMenu進行初始化 static{ //注意,二位數組中的每一組表示一個菜單的信息,又通過map建立了角色名和菜單直接的對應關系 roleMenu.put("校長", new String[][]{ {"人員管理","view","User"},//由具體的地址,變為抽象的參數 {"課程管理","view","Course"} }); roleMenu.put("教師", new String[][]{}); roleMenu.put("學生", new String[][]{}); }}

2,從登錄頁面到LoginServlet,登錄錄成功后跳轉index.jsp,此時index.jsp中的菜單加載部分需要修改如一下,主要有兩處,一是菜單欄每一個菜單href屬性指向參數化了,二是右側內容區對應網址修改為actionUrl,貓哥感覺actionUrl更能表達此刻的心意,哈哈。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib 3,好的,來到CRUD操作控制的核心ActionServlet了,此時都是使用if判斷的,針對不同的網頁請求,采用不同的處理操作:

package servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import command.ActionCommand;import entity.*;import java.util.List;public class ActionServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response);//doGet與doPost一樣處理 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //輸入輸出設置 response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //獲取標準Action動作的三個參數 String method=request.getParameter("method"); String entityType=request.getParameter("entity"); String id=request.getParameter("id"); //處理 String actionUrl=doAction(request,method,entityType,id); request.setAttribute("actionUrl",actionUrl); //跳轉 request.getRequestDispatcher("/index.jsp").forward(request,response); } //具體細分的控制處理,返回內容區域應該顯示的網頁地址 private String doAction(HttpServletRequest request,String method,String entityType,String entityId){ String url="";//初始化返回值 ActionCommand actionCommand=new ActionCommand(entityType);//處理
數據庫邏輯 if(method.equals("view")){//查看 List entityList=actionCommand.selectAll(); request.setAttribute("entityList",entityList); url=entityType.toLowerCase()+"Manage.jsp"; }else if(method.equals("delete")){//刪除 actionCommand.deleteById(entityId); List entityList=actionCommand.selectAll(); request.setAttribute("entityList",entityList);//更新名單 url=entityType.toLowerCase()+"Manage.jsp"; }else if(method.equals("edit")){//修改 Object entity=actionCommand.selectById(entityId); request.setAttribute("editEntity", entity); url=entityType.toLowerCase()+"Update.jsp"; }else if(method.equals("add")){//新增 url=entityType.toLowerCase()+"Update.jsp"; }else if(method.equals("save")){//保存 //因保存時各類實體代碼各不一致,導致寫在此處會很難看,所以由單獨提取成一個方法 this.doSaveAction(request,entityType,actionCommand); List entityList=actionCommand.selectAll(); request.setAttribute("entityList",entityList);//更新名單 url=entityType.toLowerCase()+"Manage.jsp"; } return url; } //單獨處理save,因為save方法是跟具體的實體類結構相關 private void doSaveAction(HttpServletRequest request,String entityType,ActionCommand actionCommand){ String id=request.getParameter("hiddenId"); Object entity=null; //------------------------------------------------------------------------------- //此處為組裝區域,根據不同頁面內容是變化的,其余部分都是按一定規則固定了的 if(entityType.equals("User")){ User user=new User(); if(!"".equals(id))//修改 user.setUserId(Integer.parseInt(id)); else//新增 user.setUserPassWord("1234");//初始化密碼 user.setUserName(request.getParameter("userName")); Role role=new Role(); role.setRoleId(Integer.parseInt(request.getParameter("userRole"))); user.setUserRole(role); entity=user; } //------------------------------------------------------------------------------- //實體修改到數據庫 if(!"".equals(id)){//修改 actionCommand.update(entity); }else{//添加 actionCommand.add(entity); } }}

4,其中數據庫操作部分是調用ActionCommand實現的,ActionCommand具體如下:

package command;import java.util.List;import javax.servlet.http.HttpServletRequest;import entity.*;import Operation.*;public class ActionCommand{ private String entityType; public ActionCommand(String type){ entityType=type; } public List selectAll(){ ObjectOperation oper=OperationFactory.createOperation(entityType); return oper.selectAll(); } public int deleteById(String id){ ObjectOperation oper=OperationFactory.createOperation(entityType); return oper.deleteById(id); } public Object selectById(String id){ ObjectOperation oper=OperationFactory.createOperation(entityType); return oper.selectById(id); } public int add(Object entity){ ObjectOperation oper=OperationFactory.createOperation(entityType); return oper.add(entity); } public int update(Object entity){ ObjectOperation oper=OperationFactory.createOperation(entityType); return oper.update(entity); }}

發現ActionCommand的代碼倒是非常精簡啊,因為本來就是要增刪改查嘛。好的,至于數據庫操作層的代碼,此處就不細講了,需要的可自行翻看以前的章節。

5,下面先來實現人員管理的列表頁面userManage.jsp如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!-- 使用c:標簽需要添加本行代碼 --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>userManage.jsp</title> <link href="css/content.css" type="text/css" rel="stylesheet"/> <link href="css/table.css" type="text/css" rel="stylesheet"/> </head> <body> <div id="user_top"> 人員管理 </div><!-- user_top end --> <div id="user_mid"> <table class="table_theme1"> <thead> <th>人員編碼</th> <th>姓名</th> <th>角色</th> <th>操作</th> <th>操作</th> </thead> <c:forEach items="${entityList}" var="item"> <tr> <td>${item.userId}</td> <td>${item.userName}</td> <td>${item.userRole.roleName}</td> <td><a href="/HomeworkSystem/ActionServlet?method=edit&entity=User&id=${item.userId}">編輯</a></td> <td><a href="/HomeworkSystem/ActionServlet?method=delete&entity=User&id=${item.userId}">刪除</a></td> </tr> </c:forEach> </table> </div><!-- user_mid end --> <div id="user_bottom"> <a href="/HomeworkSystem/ActionServlet?method=add&entity=User">新增</a> </div><!-- "user_bottom" end --> </body></html>

6,最后,實現人員管理修改/新增時的頁面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!-- 使用c:標簽需要添加本行代碼 --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>userUpdate.jsp</title> <link href="css/content.css" type="text/css" rel="stylesheet"/> <link href="css/table.css" type="text/css" rel="stylesheet"/> </head> <body> <form action="/HomeworkSystem/ActionServlet?method=save&entity=User" method="post"> <div id="user_top"> 人員信息更新 </div><!-- user_top end --> <div id="user_mid"> <table class="table_theme1"> <tr> <td>姓名:</td> <td> <input type="text" name="userName" value="${editEntity.userName}"/> <input type="hidden" name="hiddenId" value="${editEntity.userId}"/> </td> </tr> <tr> <td>角色:</td> <td> <select name="userRole"><!-- 編輯情況下,默認顯示編輯用戶的角色的功能,待后續優化項目時再講如何實現 --> <option value="1">校長</option> <option value="2">老師</option> <option value="3">學生</option> </select> </td> </tr> </table> </div><!-- user_mid end --> <div id="user_bottom"> <input type="submit" value="保存"></input> </div><!-- "user_bottom" end --> </form> </body></html>

最后總結一下子,因為有了通用的CRUD后端,我們每次添加一個實體(比如課程、人員、角色等等)的增刪改查功能時,只需要建立兩個網頁xxxManage.jsp和xxxUpdate.jsp,并按照規則修改里面的鏈接和具體信息(每種實體內容不同),然后在ActionServlet的 doSaveAction方法里添加新的if分支以保存新類型的實體就行了。

怎么感覺一下子就簡單了呢,這樣的一個通用CRUD后端設計合理嗎,能實現所有功能嗎,易拓展嗎?這個問題留待下篇分解。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影网在线| 91福利视频在线观看| 亚洲人成绝费网站色www| 久久精品国产一区二区三区| 日韩电影免费观看在线观看| 日韩中文字幕在线播放| 欧美国产日韩一区二区在线观看| 亚洲直播在线一区| 欧美成年人视频网站欧美| 日韩资源在线观看| 日韩美女免费视频| 国产精品91免费在线| 国产91精品黑色丝袜高跟鞋| 国产在线拍揄自揄视频不卡99| 久久精品国产91精品亚洲| 亚洲free性xxxx护士白浆| 最新国产精品拍自在线播放| 日韩在线免费视频| 亚洲欧洲日产国码av系列天堂| 欧美日韩国产精品一区| 亚洲自拍高清视频网站| 欧美在线视频一区二区| 久久综合久久美利坚合众国| 91欧美激情另类亚洲| 久久久国产91| 在线观看视频亚洲| 91精品国产91久久久久久吃药| 亚洲欧美精品suv| 久久久免费电影| 91嫩草在线视频| 久久影院资源网| 亚洲欧美国内爽妇网| 北条麻妃久久精品| 国产女人18毛片水18精品| 国产精品18久久久久久首页狼| 一区二区亚洲精品国产| 亚洲黄色在线看| 国产99久久久欧美黑人| 91精品国产自产在线| 国产精品久久久久久久久久三级| 国产精品偷伦视频免费观看国产| 91精品在线观| 欧美精品一区二区免费| 91国产精品91| 日韩欧美国产网站| 久久久久久久久久久成人| 美女国内精品自产拍在线播放| 91精品国产综合久久香蕉的用户体验| 中文字幕在线观看日韩| 国产视频精品免费播放| 亚洲在线一区二区| 久久99热这里只有精品国产| 亚洲电影免费观看高清完整版| 国产精品一二三视频| 成人免费福利在线| 欧美黑人xxxⅹ高潮交| 5566成人精品视频免费| 国产精品视频午夜| 日韩成人中文电影| 亚洲欧洲自拍偷拍| 91精品国产91久久久久久| 国产精品亚洲综合天堂夜夜| 成人黄色短视频在线观看| 孩xxxx性bbbb欧美| 成人激情视频在线观看| 成人羞羞国产免费| 欧美一级bbbbb性bbbb喷潮片| 欧美猛交ⅹxxx乱大交视频| 97视频免费观看| 亚洲欧美日韩天堂一区二区| 国产精品成人v| 欧美另类极品videosbestfree| 欧美成年人在线观看| 欧美在线不卡区| 在线播放亚洲激情| 最近日韩中文字幕中文| 欧美性精品220| 欧美影院在线播放| 精品久久久在线观看| 欧美最近摘花xxxx摘花| 久久av资源网站| 欧美日韩裸体免费视频| 欧美高清不卡在线| 国产精品国产自产拍高清av水多| 亚洲iv一区二区三区| 欧美色道久久88综合亚洲精品| 久久人人爽人人爽爽久久| 宅男66日本亚洲欧美视频| 91精品视频在线播放| 久久久av一区| 精品在线欧美视频| 日日骚久久av| 欧美激情免费看| 日韩av影视综合网| 国产精品亚洲欧美导航| 欧洲日韩成人av| 亚洲第一天堂无码专区| 91国内免费在线视频| 日韩视频一区在线| 国产精品看片资源| 亚洲色图综合久久| 成人国产精品日本在线| 色樱桃影院亚洲精品影院| 欧美激情亚洲一区| 狠狠爱在线视频一区| 69影院欧美专区视频| 亚洲精品国产精品乱码不99按摩| 久久99国产精品自在自在app| 日韩成人在线网站| 中文.日本.精品| 亚洲成人精品久久久| 欧美成人免费全部| 欧美性jizz18性欧美| 精品久久久久久久久久久久久| 色噜噜国产精品视频一区二区| 国产精品老女人精品视频| 国产精品日韩精品| 精品国产欧美一区二区五十路| 日韩欧美成人精品| 另类色图亚洲色图| 欧美日韩国产一区二区三区| 国产丝袜一区视频在线观看| 亚洲直播在线一区| 日韩av手机在线看| 91超碰caoporn97人人| 亚洲欧美日韩精品久久奇米色影视| 欧美日韩国产va另类| 中文字幕视频一区二区在线有码| 欧美性极品xxxx娇小| 中文字幕欧美精品在线| 日韩成人xxxx| 国产偷亚洲偷欧美偷精品| 2019国产精品自在线拍国产不卡| 91欧美视频网站| 亚洲人午夜色婷婷| 久久久国产91| 欧美精品福利视频| 亚州成人av在线| 日韩av综合中文字幕| 亚洲国产欧美在线成人app| 青草成人免费视频| 精品成人国产在线观看男人呻吟| 欧美小视频在线观看| 国产一区玩具在线观看| 欧美另类极品videosbestfree| 亚洲国产成人一区| 日韩美女在线看| 精品久久久一区| 国产精品羞羞答答| 国产91精品青草社区| 国产美女搞久久| 在线视频中文亚洲| 一夜七次郎国产精品亚洲| 欧美成人精品影院| 久久久久久国产精品三级玉女聊斋| 在线播放精品一区二区三区| 中文字幕日韩精品有码视频| 日韩免费在线看| 亚洲性生活视频| 亚洲丝袜在线视频| 久久久精品国产| 国产午夜精品一区二区三区| 69视频在线免费观看| 国产精品美女无圣光视频|