SSM框架做一个简易的学生选课系统

学生选课系统

学生选课系统是基于ssm框架、jsp、bootstrap实现,有基本的增删查改、拦截器、cookie、文件上传下载功能、页面简约。

项目结构如下:

在这里插入图片描述

所使用技术

后端:spring+springmvc+mybatis
前端:bootstrap
其他:jsp

主要功能及演示

1.登录拦截

放行登录页面、拦截其他页面。

 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o)
            throws Exception {
        String url = request.getRequestURI();
        if(url.endsWith("/login") || url.endsWith("login.jsp")){
            return true;
        }
        if(request.getSession().getAttribute("user")!=null){
            return true;
        }
        request.setAttribute("loginmeaasge","请先登录");
        request.getRequestDispatcher("/jsp/login.jsp").forward(request,response);
        return false;
    }

首页,点击学生信息,login页面拦截
在这里插入图片描述
在这里插入图片描述
登录后可进行操作
在这里插入图片描述

2.自动登录

使用cookie实现自动登录功能

   @RequestMapping("/login")
    public String login(User user, HttpServletRequest request, HttpServletResponse response){
        response.setContentType("text/html;charset=utf-8");
        String message = "";
        String id = "",password = "";
        Cookie cookie = null;
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(int i=0; i<cookies.length; i++){
                cookie = cookies[i];
                if(cookie.getName().equals("id")){
                    id = cookie.getValue();
                }
                if(cookie.getName().equals("password")){
                    password = cookie.getValue();
                }
            }
        }
        if(request.getParameter("check")!=null && request.getParameter("check").equals("check")){
            Cookie idCookie = new Cookie("id",user.getId());
            Cookie pwdCookie = new Cookie("password",user.getPassword());
            idCookie.setMaxAge(60*60);
            pwdCookie.setMaxAge(60*60);
            response.addCookie(idCookie);
            response.addCookie(pwdCookie);
        }
        if(!"".equals(id) && !"".equals(password)){
            user.setId(id);
            user.setPassword(password);
        }
        message = "您已成功登录!";
        request.getSession().setAttribute("loginmeaasge",message);
        boolean isLogin = userService.login(user);
        if(isLogin){
            request.getSession().setAttribute("user",user);
            return "../index";
        }else{
            return "login";
        }
    }

选择自动登录,cookie有效时间为1小时。
在这里插入图片描述
访问登录页面会直接跳转到首页。

3.文件上传下载

实现单文件上传

 //单文件上传
    @RequestMapping(value = "/singlefile", method = RequestMethod.POST)
    public String singleFileUpload(@ModelAttribute MultipartFile file, HttpServletRequest request, ModelMap model){
        String realPath = request.getSession().getServletContext().getRealPath("/upload");
        String filename = file.getOriginalFilename();
        String message = "";
        File uploadfile = new File(realPath,filename);
        if(!uploadfile.exists()){
            uploadfile.mkdirs();
        }
        try {
            file.transferTo(uploadfile);
            message = "上传成功";
            request.setAttribute("uploadmessage",message);
        } catch (IOException e) {
            e.printStackTrace();
        }
        model.put("fileUrl",request.getContextPath()+"/upload"+filename);
        return "forward:/showStudentInfo";
    }

上传文件如下:
在这里插入图片描述
在这里插入图片描述

基于ResponseEntity实现文件下载

 @RequestMapping(value="/fileDownLoad")
    public ResponseEntity<byte[]> fileDownload(HttpServletRequest request) throws Exception{
        //下载文件
        File file = new File("D://score/scores.xlsx");
        HttpHeaders headers = new HttpHeaders();
        String downloadFileName = new String(file.getName().getBytes("UTF-8"),"ISO-8859-1");
        //通知浏览器以下载方式打开文件
        headers.setContentDispositionFormData("attachment",downloadFileName);
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
    }

文件下载实现:
点击下载成绩
在这里插入图片描述
在这里插入图片描述

4.学生选课退课功能

使用mybatis注解实现增删课功能

    @Delete("delete from mycourse where id=#{id}")
    int isDelete(int id);
    @Insert("insert into mycourse(id,cname,teacher) select * from course where id=#{id}")
    int insertCourse(int id);

在service层实现相应功能

选课退选实现:
查看我的选课
在这里插入图片描述

点击选课
在这里插入图片描述

在这里插入图片描述
点击删除:
在这里插入图片描述

5.分页查询

使用mybatis配置文件方式,实现分页查询功能

dao层:

	public List<Course> selectByPage(@Param(value="startPos") Integer start, @Param(value="pageSize") Integer pageSize);
	public long getTotalCount();

xml配置文件:

    <select id="selectByPage" resultMap="userInfoResult">
        select * from course limit ${startPos}, ${pageSize}
    </select>
    <!-- 取得记录的总数 -->
    <select id="getTotalCount" resultType="long">
        SELECT COUNT(*) FROM course
    </select>

service层:

 @Override
    public void showByPages(HttpServletRequest request, Model model) {
        String pageNow = request.getParameter("pageNow");
        System.out.println("pageNow的值"+pageNow);
        Page page = null;

        List<Course> courses = new ArrayList<Course>();

        int totalCount = (int) courseMapper.getTotalCount();
        System.out.println("totalCount的值"+totalCount);
        if (pageNow != null) {
            page = new Page(totalCount, Integer.parseInt(pageNow));
            System.out.println("page.getStartPos()的值"+page.getStartPos());
            System.out.println("page.getPageSize()的值"+page.getPageSize());
            courses = this.courseMapper.selectByPage(page.getStartPos(), page.getPageSize());
        } else {
            page = new Page(totalCount, 1);
            courses = this.courseMapper.selectByPage(page.getStartPos(), page.getPageSize());
        }

        model.addAttribute("courseslist", courses);
        model.addAttribute("page", page);
    }

分页查询实现:
在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值