学生选课系统
学生选课系统是基于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);
}
分页查询实现: