服创实战——小微企业跨组织人才管理系统

引言

本项目是基于第十二届服创的A01赛题,内容还是比较简单的,记录一下经过吧,

前期由于偷懒,把赛题分析交给了文本的同学,造成了分析不到位以及有点偏题了,所幸问题不大,

前期打算用ssm为架构完成,在中期时发现某书上有个用jsp写的模板,就直接copy了,

在后期为了增加ajax,拦截器以及文件上传下载等功能,又增上了SpringMVC架构,

因此造就了这个四不像,有着SpringMVC架构,却用着JDBC…,

总而言之还是经验不足,见风使舵了!

博主是萌新上路,文中如有不当之处,请各位大佬指出,共同进步,谢谢。
 

项目展示

不速之客—【A01】小微企业跨组织人才管理系统—项目演示视频

特此感谢睿姐配音![鞠躬]
 

项目目录

因为是基于服创的,所以是组队开发合并的,一开始就是前后端分离,因此造成了部分文件出现了中文命名,dddd,
在这里插入图片描述

 

项目代码

以下将展示部分代码,源代码可在此处下载,

1. 拦截器

本意是为了防止通过直接输入地址进行访问和分级权限管理的,结果吧,没有用上,但还是写着了…

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;
    }
}

2. 文件上传与下载

本来想着根据当前员工的编号,程序自动更改上传文件的文件名再进行存储,这样的话,浏览或下载文件也可以直接根据以员工编号为文件名进行查找即可,不过为了方便起见,这里并没有体现出来,只是正常的文件上传和下载功能,

文件上传

@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 "<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、设置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;
}

3. 增删改查

这里本来有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中添加如下代码:

<!-- 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>

就是将你所用到的资源文件都过滤一遍,不会被拦截即可显示,
在这里插入图片描述 

总结

不速之客五个人小队第一次参加服务外包创新大赛,由于经验不足,一路磕磕碰碰,但所幸我们小队都走过来了,坚持下来了,

由于知识储备不足,以完成项目为第一要务,因此选择了A01赛题,当做完的时候才察觉有些简单,不过这都无伤大雅,

最后,十分感谢队员的理解与支持,作为队长,由于经验不足,造成了战略性错误,深感抱歉,但是队友不抱怨,用行动以表理解真的让我很感动,这五个月感谢有你们!

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页