本项目是基于第十二届服创的A01赛题,内容还是比较简单的,记录一下经过吧,
前期由于偷懒,把赛题分析交给了文本的同学,造成了分析不到位以及有点偏题了,所幸问题不大,
前期打算用ssm为架构完成,在中期时发现某书上有个用jsp写的模板,就直接copy了,
在后期为了增加ajax,拦截器以及文件上传下载等功能,又增上了SpringMVC架构,
因此造就了这个四不像,有着SpringMVC架构,却用着JDBC…,
总而言之还是经验不足,见风使舵了!
博主是萌新上路,文中如有不当之处,请各位大佬指出,共同进步,谢谢。
不速之客—【A01】小微企业跨组织人才管理系统—项目演示视频
特此感谢睿姐配音![鞠躬]
因为是基于服创的,所以是组队开发合并的,一开始就是前后端分离,因此造成了部分文件出现了中文命名,dddd,
以下将展示部分代码,源代码可在此处下载,
本意是为了防止通过直接输入地址进行访问和分级权限管理的,结果吧,没有用上,但还是写着了…
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
// 如果是登陆页面则放行
System.out.println("uri: " + request.getRequestURI());
if (request.getRequestURI().contains("login")) {
return true;
}
if (request.getRequestURI().contains("validate")) {
return true;
}
HttpSession session = request.getSession();
// 如果用户已登陆也放行
if(((String)session.getAttribute("validated")).equals("ok")) {
return true;
}
return false;
}
}
本来想着根据当前员工的编号,程序自动更改上传文件的文件名再进行存储,这样的话,浏览或下载文件也可以直接根据以员工编号为文件名进行查找即可,不过为了方便起见,这里并没有体现出来,只是正常的文件上传和下载功能,
文件上传
@RequestMapping("/chengguo")
public String fileUpload2(@RequestParam("chengguo") CommonsMultipartFile file, HttpServletRequest request) throws IOException {
//上传路径保存设置
String path = request.getServletContext().getRealPath("/工作成果");
File realPath = new File(path);
if (!realPath.exists()){
realPath.mkdir();
}
//上传文件地址
System.out.println("上传文件保存地址:"+realPath);
//通过CommonsMultipartFile的方法直接写文件(注意这个时候)
file.transferTo(new File(realPath +"/"+ file.getOriginalFilename()));
return "" +
"";
}
文件下载
@RequestMapping(value="/downloadCG")
public String downloads1(HttpServletResponse response , HttpServletRequest request) throws Exception{
//要下载的图片地址
String path = request.getServletContext().getRealPath("/工作成果");
String fileName = "1234567.pdf";
//1、设置response 响应头
response.reset(); //设置页面不缓存,清空buffer
response.setCharacterEncoding("UTF-8"); //字符编码
response.setContentType("multipart/form-data"); //二进制传输数据
//设置响应头
response.setHeader("Content-Disposition",
"attachment;fileName="+ URLEncoder.encode(fileName, "UTF-8"));
File file = new File(path,fileName);
//2、 读取文件--输入流
InputStream input=new FileInputStream(file);
//3、 写出文件--输出流
OutputStream out = response.getOutputStream();
byte[] buff =new byte[1024];
int index=0;
//4、执行 写出操作
while((index= input.read(buff))!= -1){
out.write(buff, 0, index);
out.flush();
}
out.close();
input.close();
return null;
}
这里本来有SSM架构的话,数据库应该使用mybatis写比较方便,但是用了模板,所以就用JDBC了,造成了大量的代码冗余吧,以下仅选取片段展示,这是写在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选择删除员工时,先将该员工的所有资料插入到一个表checkb
中,这个表中的人员都是被HR所辞退的,最终都会出现在领导的管理系统中,如果领导不同意辞退该员工的话,则他的数据将会被重新插入到原有的所有表中,即实现恢复员工的功能,同时删除checkb
表中该员工的记录,如果领导同意辞退,则直接在checkb
表中删除该记录即可,
之所以用了3个delete
语句是因为一句delete
删除三个表一直给我报错,为了不纠结这个问题,就分开写了,all in all,博主是小菜鸡,
搭建了SpringMVC架构之后,出现了index.jsp
界面的css显示不出来的问题,
然后网上搜寻了一番之后,找到了一个在这里可行的方法,增加静态资源过滤,即在web.xml
中添加如下代码:
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.cssurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.pngurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.jpgurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.gifurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>defaultservlet-name>
<url-pattern>*.jsurl-pattern>
servlet-mapping>
不速之客五个人小队第一次参加服务外包创新大赛,由于经验不足,一路磕磕碰碰,但所幸我们小队都走过来了,坚持下来了,
由于知识储备不足,以完成项目为第一要务,因此选择了A01赛题,当做完的时候才察觉有些简单,不过这都无伤大雅,
最后,十分感谢队员的理解与支持,作为队长,由于经验不足,造成了战略性错误,深感抱歉,但是队友不抱怨,用行动以表理解真的让我很感动,这五个月感谢有你们!