之前的JavaWeb項目大多數都是java程序員又當爹又當媽,又搞前端,又搞後端。javascript
隨着時代的發展,漸漸的許多大中小公司開始把先後端的界限分的愈來愈明確,前端工程師只管前端的事情,後端工程師只管後端的事情。正所謂術業有專攻,一我的若是什麼都會,那麼他畢竟什麼都不精。css
大中型公司須要專業人才,小公司須要全才,可是對於我的職業發展來講,我建議是分開。html
一、對於後端java工程師:前端
把精力放在java基礎,設計模式,jvm原理,spring+springmvc原理及源碼,linux,mysql事務隔離與鎖機制,mongodb,http/tcp,多線程,分佈式架構,彈性計算架構,微服務架構,java性能優化,以及相關的項目管理等等。vue
後端追求的是:三高(高併發,高可用,高性能),安全,存儲,業務等等。html5
二、對於前端工程師:java
把精力放在html5,css3,jquery,angularjs,bootstrap,reactjs,vuejs,webpack,less/sass,gulp,nodejs,Google V8引擎,javascript多線程,模塊化,面向切面編程,設計模式,瀏覽器兼容性,性能優化等等。node
前端追求的是:頁面表現,速度流暢,兼容性,用戶體驗等等。mysql
術業有專攻,這樣你的核心競爭力纔會愈來愈高,正所謂你往生活中投入什麼,生活就會反饋給你什麼。而且兩端的發展都愈來愈高深,你想什麼都會,那你畢竟什麼都不精。react
經過將team分紅先後端team,讓兩邊的工程師更加專一各自的領域,獨立治理,而後構建出一個全棧式的精益求精的team
案例:增刪改查
前臺界面
1 <form id="seach" method="get"> 2 <input type="text" id="seachName" name="uname"><br> 3 <input type="submit" value="查詢"> 4 </form> 5 <!--展現數據所用--> 6 <table id="dg"></table> 7 <input type="hidden" id="ctx" value="${pageContext.request.contextPath}"> 8 9 <!--彈出數據所用--> 10 <div id="dd" class="easyui-dialog" title="編輯窗體" style="width:400px;height:200px;" 11 data-options="iconCls:'icon-save',resizable:true,modal:true,closed:true,buttons:'#bb'"> 12 <form id="ff" method="post"> 13 <input type="hidden" id="serialno" name="serialno"> 14 <input type="hidden" id="methodName" name="methodName"> 15 <div> 16 <label for="name">uid:</label> 17 <input class="easyui-validatebox" type="text" name="uid" data-options="required:true" /> 18 </div> 19 <div> 20 <label for="name">uname:</label> 21 <input class="easyui-validatebox" type="text" name="uname" data-options="required:true" /> 22 </div> 23 <div> 24 <label for="name">upwd:</label> 25 <input class="easyui-validatebox" type="text" name="upwd" data-options="required:true" /> 26 </div> 27 </form> 28 </div> 29 <div id="bb"> 30 <a href="#" class="easyui-linkbutton" onclick="ok();">保存</a> 31 <a href="#" class="easyui-linkbutton">關閉</a> 32 </div>
外部的js:
1 $(function() { 2 $('#dg').datagrid({ 3 fitColumns : true, 4 fit :false, 5 pagination : true, 6 url : $("#ctx").val()+'/userAction.action?methodName=list', 7 columns : [ [ { 8 field : 'uid', 9 title : '代碼', 10 width : 100 11 }, { 12 field : 'uname', 13 title : '名稱', 14 width : 100 15 }, { 16 field : 'upwd', 17 title : '價格', 18 width : 100, 19 align : 'right' 20 } ] ], 21 toolbar : [ { 22 iconCls : 'icon-edit', 23 handler : function() { 24 //獲取選中項 25 var row = $('#dg').datagrid('getSelected'); 26 if(row){ 27 //將提交方法修改成edit 28 $("#methodName").val("edit"); 29 //將數據加載到表格中 30 $('#ff').form('load', row); 31 $('#dd').dialog('open'); 32 33 34 } 35 36 } 37 }, '-', { 38 iconCls : 'icon-add', 39 handler : function() { 40 $('#ff').form('clear'); 41 $('#dd').dialog('open'); 42 $("#methodName").val("add"); 43 44 } 45 }, '-', { 46 iconCls : 'icon-remove', 47 handler : function() { 48 var data = $('#dg').datagrid('getSelected'); 49 console.log(data.serialno); 50 $.ajax({ 51 url:"userAction.action?methodName=remove", 52 data:{serialno:data.serialno}, 53 success:function(data){ 54 $('#dg').datagrid('reload'); 55 } 56 }); 57 } 58 } ] 59 }); 60 61 $("#seach").submit(function(){ 62 console.log($("#seachName").val()); 63 $('#dg').datagrid('load', { 64 uname: $("#seachName").val() 65 }); 66 return false; 67 }); 68 69 }) 70 71 function ok() { 72 console.log('userAction.action?methodName='+$("#methodName").val()); 73 $('#ff').form('submit', { 74 url : 'userAction.action?methodName='+$("#methodName").val(), 75 success : function(param) { 76 $('#dd').dialog('close'); 77 $('#dg').datagrid('reload'); 78 } 79 }); 80 }
其中中間有easyui的一些控件在網上也是能夠查到的
1.datagrid 佈局
2.diakog佈局
3.form佈局
而後增刪改查的dao方法
1 public List<Map<String, Object>> list(Map<String, String[]> paMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{ 2 String sql="select * from t_easyui_user_version2 where true"; 3 String uname=JsonUtils.getParamVal(paMap, "uname"); 4 if(StringUtils.isNotBlank(uname)) { 5 sql=sql+" and uname like '%"+uname+"%'"; 6 } 7 8 9 return super.executeQuery(sql, pageBean); 10 11 } 12 13 /** 14 * 經過中間表查詢登錄用戶所對應的權限 15 * @param paMap 16 * @param pageBean 17 * @return 18 * @throws InstantiationException 19 * @throws IllegalAccessException 20 * @throws SQLException 21 */ 22 public List<Map<String, Object>> listMenu(String uid,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{ 23 String sql="select * from t_easyui_usermenu where true"; 24 25 if(StringUtils.isNotBlank(uid)) { 26 sql=sql+" and uid="+uid; 27 } 28 return super.executeQuery(sql, pageBean); 29 30 } 31 /** 32 * 修改方法 33 * @param paMap 34 * @return 35 * @throws Exception 36 */ 37 public int edit(Map<String, String[]> paMap) throws Exception { 38 String sql= "update t_easyui_user_version2 set uid=?,uname=?,upwd=? where serialno=?"; 39 return super.executeUpdate(sql, new String[] {"uid","uname","upwd","serialno"}, paMap); 40 } 41 42 /** 43 * 指定id移除 44 * @param paMap 45 * @return 46 * @throws NoSuchFieldException 47 * @throws SecurityException 48 * @throws IllegalArgumentException 49 * @throws IllegalAccessException 50 * @throws SQLException 51 */ 52 public int add(Map<String, String[]> paMap) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException { 53 String sql = "INSERT INTO t_easyui_user_version2 (uid, uname, upwd) VALUES(?,?,?);"; 54 return super.executeUpdate(sql, new String[] {"uid","uname","upwd"}, paMap); 55 } 56 57 58 /** 59 * 指定id刪除 60 * @param paMap 61 * @return 62 * @throws NoSuchFieldException 63 * @throws SecurityException 64 * @throws IllegalArgumentException 65 * @throws IllegalAccessException 66 * @throws SQLException 67 */ 68 public int remove (Map<String, String[]> paMap) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException { 69 String sql = "DELETE FROM t_easyui_user_version2 WHERE serialno =?" ; 70 return super.executeUpdate(sql, new String[] {"serialno"}, paMap);
web調用
public String login(HttpServletRequest req,HttpServletResponse resp) { try { List<Map<String, Object>> list= this.userDao.list(req.getParameterMap(), null); if(list!=null&&list.size()>0) { List<Map<String, Object>>listMenu= this.userDao.listMenu(req.getParameter("uid"), null); StringBuilder sb=new StringBuilder(); for (Map<String, Object> map : listMenu) { sb.append(","+map.get("menuId")); } req.setAttribute("menuHid", sb.substring(1)); }else { return "login"; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return "index"; } /** * datagrid 所需數據後端程序員開發完畢 * @param req * @param resp * @return */ public String list(HttpServletRequest req,HttpServletResponse resp) { try { PageBean pageBean=new PageBean(); pageBean.setRequest(req); List<Map<String, Object>> list=this.userDao.list(req.getParameterMap(), pageBean); ObjectMapper om=new ObjectMapper(); Map<String, Object> map=new HashMap<>(); map.put("total", pageBean.getTotal()); map.put("rows", list); ResponseUtil.write(resp, om.writeValueAsString(map)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * form組件提交所需數據後端程序員處理完畢 * @param req * @param resp * @return */ public String edit(HttpServletRequest req,HttpServletResponse resp) { try { int edit=this.userDao.edit(req.getParameterMap()); ObjectMapper om=new ObjectMapper(); ResponseUtil.write(resp, om.writeValueAsString(edit)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 新增 * @param req * @param resp * @return */ public String add(HttpServletRequest req,HttpServletResponse resp) { try { int add=this.userDao.add(req.getParameterMap()); ObjectMapper om=new ObjectMapper(); ResponseUtil.write(resp, om.writeValueAsString(add)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 刪除 * @param req * @param resp * @return */ public String remove(HttpServletRequest req,HttpServletResponse resp) { try { int remove=this.userDao.remove(req.getParameterMap()); ObjectMapper om=new ObjectMapper(); ResponseUtil.write(resp, om.writeValueAsString(remove)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
完成運行