服创实战——小微企业跨组织人才管理系统
文章目錄
- 引言
- 項(xiàng)目展示
- 項(xiàng)目目錄
- 項(xiàng)目代碼
- 1. 攔截器
- 2. 文件上傳與下載
- 3. 增刪改查
- 問(wèn)題解決
- 總結(jié)
引言
本項(xiàng)目是基于第十二屆服創(chuàng)的A01賽題,內(nèi)容還是比較簡(jiǎn)單的,記錄一下經(jīng)過(guò)吧,
前期由于偷懶,把賽題分析交給了文本的同學(xué),造成了分析不到位以及有點(diǎn)偏題了,所幸問(wèn)題不大,
前期打算用ssm為架構(gòu)完成,在中期時(shí)發(fā)現(xiàn)某書(shū)上有個(gè)用jsp寫(xiě)的模板,就直接copy了,
在后期為了增加ajax,攔截器以及文件上傳下載等功能,又增上了SpringMVC架構(gòu),
因此造就了這個(gè)四不像,有著SpringMVC架構(gòu),卻用著JDBC…,
總而言之還是經(jīng)驗(yàn)不足,見(jiàn)風(fēng)使舵了!
博主是萌新上路,文中如有不當(dāng)之處,請(qǐng)各位大佬指出,共同進(jìn)步,謝謝。
?
項(xiàng)目展示
不速之客—【A01】小微企業(yè)跨組織人才管理系統(tǒng)—項(xiàng)目演示視頻
特此感謝睿姐配音![鞠躬]
?
項(xiàng)目目錄
因?yàn)槭腔诜?chuàng)的,所以是組隊(duì)開(kāi)發(fā)合并的,一開(kāi)始就是前后端分離,因此造成了部分文件出現(xiàn)了中文命名,dddd,
?
項(xiàng)目代碼
以下將展示部分代碼,源代碼可在此處下載,
1. 攔截器
本意是為了防止通過(guò)直接輸入地址進(jìn)行訪(fǎng)問(wèn)和分級(jí)權(quán)限管理的,結(jié)果吧,沒(méi)有用上,但還是寫(xiě)著了…
public class LoginInterceptor implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {// 如果是登陸頁(yè)面則放行System.out.println("uri: " + request.getRequestURI());if (request.getRequestURI().contains("login")) {return true;}if (request.getRequestURI().contains("validate")) {return true;}HttpSession session = request.getSession();// 如果用戶(hù)已登陸也放行if(((String)session.getAttribute("validated")).equals("ok")) {return true;}return false;} }2. 文件上傳與下載
本來(lái)想著根據(jù)當(dāng)前員工的編號(hào),程序自動(dòng)更改上傳文件的文件名再進(jìn)行存儲(chǔ),這樣的話(huà),瀏覽或下載文件也可以直接根據(jù)以員工編號(hào)為文件名進(jìn)行查找即可,不過(guò)為了方便起見(jiàn),這里并沒(méi)有體現(xiàn)出來(lái),只是正常的文件上傳和下載功能,
文件上傳
@RequestMapping("/chengguo") public String fileUpload2(@RequestParam("chengguo") CommonsMultipartFile file, HttpServletRequest request) throws IOException {//上傳路徑保存設(shè)置String path = request.getServletContext().getRealPath("/工作成果");File realPath = new File(path);if (!realPath.exists()){realPath.mkdir();}//上傳文件地址System.out.println("上傳文件保存地址:"+realPath);//通過(guò)CommonsMultipartFile的方法直接寫(xiě)文件(注意這個(gè)時(shí)候)file.transferTo(new File(realPath +"/"+ file.getOriginalFilename()));return "<script Language='JavaScript'>window.alert('上傳成功!')</script>" +"<script language='JavaScript'>history.back()</script>"; }文件下載
@RequestMapping(value="/downloadCG") public String downloads1(HttpServletResponse response , HttpServletRequest request) throws Exception{//要下載的圖片地址String path = request.getServletContext().getRealPath("/工作成果");String fileName = "1234567.pdf";//1、設(shè)置response 響應(yīng)頭response.reset(); //設(shè)置頁(yè)面不緩存,清空bufferresponse.setCharacterEncoding("UTF-8"); //字符編碼response.setContentType("multipart/form-data"); //二進(jìn)制傳輸數(shù)據(jù)//設(shè)置響應(yīng)頭response.setHeader("Content-Disposition","attachment;fileName="+ URLEncoder.encode(fileName, "UTF-8"));File file = new File(path,fileName);//2、 讀取文件--輸入流InputStream input=new FileInputStream(file);//3、 寫(xiě)出文件--輸出流OutputStream out = response.getOutputStream();byte[] buff =new byte[1024];int index=0;//4、執(zhí)行 寫(xiě)出操作while((index= input.read(buff))!= -1){out.write(buff, 0, index);out.flush();}out.close();input.close();return null; }3. 增刪改查
這里本來(lái)有SSM架構(gòu)的話(huà),數(shù)據(jù)庫(kù)應(yīng)該使用mybatis寫(xiě)比較方便,但是用了模板,所以就用JDBC了,造成了大量的代碼冗余吧,以下僅選取片段展示,這是寫(xiě)在jsp中的代碼塊,
<%String bh = (String)session.getAttribute("zgbh");try {Class.forName("com.mysql.jdbc.Driver").newInstance();String url = "jdbc:mysql://localhost:3307/rsgl?useSSL=false&useUnicode=true&characterEncoding=UTF-8";String user = "root";String password = "123456";Connection conn = DriverManager.getConnection(url, user, password);String sql = "select * from zgb,bmb,jlb,users" +" where zgb.bm = bmb.bmbh and zgb.bh=jlb.zgbh and zgb.bh=users.username and bh=?" +"order by bh";String sql1 = "insert into checkb(bh,xm,xb,bm,csrq,jbgz,gwjt,gwpj,jzjl,zwpj,password,usertype) " +"values(?,?,?,?,?,?,?,?,?,?,?,?)";String sql2 = "delete from zgb where bh=?";String sql3 = "delete from jlb where zgbh=?";String sql4 = "delete from users where username=?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1,bh);ResultSet rs0 = pstmt.executeQuery();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");rs0.next();String xm0 = rs0.getString("xm").trim();String xb0 = rs0.getString("xb").trim();String bm0 = rs0.getString("bmmc").trim();String csrq0 = sdf.format(rs0.getDate("csrq"));String jbgz0 = String.valueOf(rs0.getFloat("jbgz"));String gwjt0 = String.valueOf(rs0.getFloat("gwjt"));String jzjl0 = rs0.getString("jzjl").trim();String gwpj0 = rs0.getString("gwpj").trim();String zwpj0 = rs0.getString("zwpj").trim();String pwd0 = rs0.getString("password").trim();String type0 = rs0.getString("usertype").trim();rs0.close();pstmt = conn.prepareStatement(sql1);pstmt.setString(1,bh);pstmt.setString(2,xm0);pstmt.setString(3,xb0);pstmt.setString(4,bm0);pstmt.setString(5,csrq0);pstmt.setString(6,jbgz0);pstmt.setString(7,gwjt0);pstmt.setString(8,gwpj0);pstmt.setString(9,jzjl0);pstmt.setString(10,zwpj0);pstmt.setString(11,pwd0);pstmt.setString(12,type0);pstmt.executeUpdate();pstmt = conn.prepareStatement(sql2);pstmt.setString(1,bh);int n1 = pstmt.executeUpdate();pstmt = conn.prepareStatement(sql3);pstmt.setString(1,bh);int n2 = pstmt.executeUpdate();pstmt = conn.prepareStatement(sql4);pstmt.setString(1,bh);int n3 = pstmt.executeUpdate();if (n1>0 && n2>0 && n3>0){ %><script Language='JavaScript'>window.alert('職工記錄刪除成功!')</script><script>window.location="${pageContext.request.contextPath}/hr/allList"</script> <%}else { %><script Language='JavaScript'>window.alert('職工記錄刪除失敗!')</script><script language="JavaScript">history.back()</script> <%}pstmt.close();conn.close();} catch (Exception e){out.print(e.toString());} %>上述代碼的主要功能就是,HR選擇刪除員工時(shí),先將該員工的所有資料插入到一個(gè)表checkb中,這個(gè)表中的人員都是被HR所辭退的,最終都會(huì)出現(xiàn)在領(lǐng)導(dǎo)的管理系統(tǒng)中,如果領(lǐng)導(dǎo)不同意辭退該員工的話(huà),則他的數(shù)據(jù)將會(huì)被重新插入到原有的所有表中,即實(shí)現(xiàn)恢復(fù)員工的功能,同時(shí)刪除checkb表中該員工的記錄,如果領(lǐng)導(dǎo)同意辭退,則直接在checkb表中刪除該記錄即可,
之所以用了3個(gè)delete語(yǔ)句是因?yàn)橐痪鋎elete刪除三個(gè)表一直給我報(bào)錯(cuò),為了不糾結(jié)這個(gè)問(wèn)題,就分開(kāi)寫(xiě)了,all in all,博主是小菜雞,
?
問(wèn)題解決
搭建了SpringMVC架構(gòu)之后,出現(xiàn)了index.jsp界面的css顯示不出來(lái)的問(wèn)題,
然后網(wǎng)上搜尋了一番之后,找到了一個(gè)在這里可行的方法,增加靜態(tài)資源過(guò)濾,即在web.xml中添加如下代碼:
<!-- static resources --> <servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.css</url-pattern> </servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.png</url-pattern> </servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.jpg</url-pattern> </servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.gif</url-pattern> </servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.js</url-pattern> </servlet-mapping>就是將你所用到的資源文件都過(guò)濾一遍,不會(huì)被攔截即可顯示,
?
總結(jié)
不速之客五個(gè)人小隊(duì)第一次參加服務(wù)外包創(chuàng)新大賽,由于經(jīng)驗(yàn)不足,一路磕磕碰碰,但所幸我們小隊(duì)都走過(guò)來(lái)了,堅(jiān)持下來(lái)了,
由于知識(shí)儲(chǔ)備不足,以完成項(xiàng)目為第一要?jiǎng)?wù),因此選擇了A01賽題,當(dāng)做完的時(shí)候才察覺(jué)有些簡(jiǎn)單,不過(guò)這都無(wú)傷大雅,
最后,十分感謝隊(duì)員的理解與支持,作為隊(duì)長(zhǎng),由于經(jīng)驗(yàn)不足,造成了戰(zhàn)略性錯(cuò)誤,深感抱歉,但是隊(duì)友不抱怨,用行動(dòng)以表理解真的讓我很感動(dòng),這五個(gè)月感謝有你們!
總結(jié)
以上是生活随笔為你收集整理的服创实战——小微企业跨组织人才管理系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 目前Java编程语言最流行的7个框架,你
- 下一篇: 数据库系统的三级模式结构