基于javaweb的SSM+Maven在线点餐系统(java+ssm+jsp+mysql+maven)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

292223170607

580023062402

590023062402

000023072402

010023072402

020023072402

基于javaweb的SSM+Maven在线点餐系统(java+ssm+jsp+mysql+maven)

一、项目简述

功能包括: 在线点餐,评论,购物车,下单,支付,管理员,店家多 商家管理,后台评论管理,订单管理,商品管理等等。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
        // 如果产品是一样的话,就进行数量追加
if(oi.getProduct().getId().intValue()==p.getId().intValue()){
//如果已经存在这个产品对应的OrderItem,并且还没有生成订单,即还在购物车中。 那么就应该在对应的OrderItem基础上,调整数量
oi.setNumber(oi.getNumber()+number);
orderItemService.update(oi);
found = true;
break;
}
}
//如果不存在对应的OrderItem,那么就新增一个订单项OrderItem
if(!found){
OrderItem oi = new OrderItem();
oi.setCstid(customer.getId());
oi.setNumber(number);
oi.setPid(pid);
orderItemService.save(oi);
}

return "success";
}

/**
* 查看购物车购物车
* @param model
* @param session
* @return
*/
@RequestMapping("/forecart")
public String cart(Model model, HttpSession session) {
Customer customer =(Customer) session.getAttribute("cst");
//cstid等于当前登陆用户id 并且oid为null的订单项
List<OrderItem> ois = orderItemService.listByCustomer(customer.getId());
//购物车没有商品
if(ois==null || ois.size()==0){
return "forepage/cart_noPro";
}
int totalProductNumber = 0;
for (OrderItem oi:ois){
totalProductNumber += oi.getNumber();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
			InputStream is = fileStream.openStream();
State storageState = StorageManager.saveFileByInputStream(is,
physicalPath, maxSize);
is.close();

if (storageState.isSuccess()) {
storageState.putInfo("url", PathFormat.format(savePath));
storageState.putInfo("type", suffix);
storageState.putInfo("original", originFileName + suffix);
}

return storageState;
} catch (FileUploadException e) {
return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
} catch (IOException e) {
}
return new BaseState(false, AppInfo.IO_ERROR);
}

private static boolean validType(String type, String[] allowTypes) {
List<String> list = Arrays.asList(allowTypes);

return list.contains(type);
}
}
package com.demo.controller;



/**
* 管理员角色controler
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
			break;
fileStream = null;
}

if (fileStream == null) {
return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);
}

String savePath = (String) conf.get("savePath");
String originFileName = fileStream.getName();
String suffix = FileType.getSuffixByFilename(originFileName);

originFileName = originFileName.substring(0,
originFileName.length() - suffix.length());
savePath = savePath + suffix;

long maxSize = ((Long) conf.get("maxSize")).longValue();

if (!validType(suffix, (String[]) conf.get("allowFiles"))) {
return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE);
}

savePath = PathFormat.parse(savePath, originFileName);

String physicalPath = (String) conf.get("rootPath") + savePath;

InputStream is = fileStream.openStream();
State storageState = StorageManager.saveFileByInputStream(is,
physicalPath, maxSize);
is.close();

if (storageState.isSuccess()) {
storageState.putInfo("url", PathFormat.format(savePath));
storageState.putInfo("type", suffix);
storageState.putInfo("original", originFileName + suffix);
}

return storageState;
} catch (FileUploadException e) {
return new BaseState(false, AppInfo.PARSE_REQUEST_ERROR);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
                session.setAttribute("subject", subject);
session.setAttribute("lastLoginTime",lastLoginTime);
return "redirect:index";
}else {
model.addAttribute("error", "账号已被停用!");
return "/login";
}

} catch (AuthenticationException e) {
model.addAttribute("error", "验证失败!");
return "/login";
}
}


}
package com.demo.controller;



/**
* 权限模块controller
*/
@Controller
@RequestMapping("/config")
public class PermissionController {
@Autowired
PermissionService permissionService;

/**
* 添加权限页面
* @return
*/
@RequestMapping("/adminPerAddUI")
public String addUI(){
return "syspage/admin-permission-add";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/**
* 管理员controller
*/
@Controller
@RequestMapping("/config")
public class UserController {
@Autowired
UserRoleService userRoleService;
@Autowired
UserService userService;
@Autowired
RoleService roleService;


@RequestMapping("/enableStatus")
@ResponseBody
public String enableStatus(@RequestParam(value = "name") String name){
return userService.enableStatus(name);
}

@RequestMapping("/stopStatus")
@ResponseBody
public String stopStatus(@RequestParam(value = "name") String name){
return userService.stopStatus(name);
}

@RequestMapping("/adminAdd")
public String adminadd(Model model){
List<Role> list = roleService.list();
model.addAttribute("rolelist",list);
return "syspage/admin-add";
}

@RequestMapping("/listUser")
public String list(Model model, Page page){

PageHelper.offsetPage(page.getStart(),page.getCount());//分页查询
List<User> us= userService.list();
int total = (int) new PageInfo<>(us).getTotal();//总条数
page.setTotal(total);

model.addAttribute("us", us);//所有用户
model.addAttribute("total",total);

Map<User,List<Role>> user_roles = new HashMap<>();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
}
package com.demo.common.Interceptor;



/**
* 前台登陆状态拦截器 如果访问的请求没有在noNeedAuthPage数组就跳转登陆
*/
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Autowired
OrderItemService orderItemService;
/**
* 在业务处理器处理请求之前被调用
* 如果返回false
* 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
* 如果返回true
* 执行下一个拦截器,直到所有的拦截器都执行完毕
* 再执行被拦截的Controller
* 然后进入拦截器链,
* 从最后一个拦截器往回执行所有的postHandle()
* 接着再从最后一个拦截器往回执行所有的afterCompletion()
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/**
* 不需要登录也可以访问的
* 注册,登录,产品,首页,分类,查询等等
* 需要登录才能够访问的
* 购买行为,加入购物车行为,查看购物车,查看我的订单等等
* 不需要登录也可以访问的已经确定了,但是需要登录才能够访问,截止目前为止还不能确定,所以这个过滤器就判断如果不是注册,登录,产品这些,就进行登录校验
* 1. 准备字符串数组 noNeedAuthPage,存放哪些不需要登录也能访问的路径
* 2. 获取uri
* 3. 去掉前缀/fore
* 4. 如果访问的地址是/fore开头
* 4.1 取出fore后面的字符串,比如是forecart,那么就取出cart
* 4.2 判断cart是否是在noNeedAuthPage
* 4.2 如果不在,那么就需要进行是否登录验证
* 4.3 从session中取出"cst"对象
* 4.4 如果对象不存在,就客户端跳转到login.jsp
* 4.5 否则就正常执行


项目链接:
https://javayms.github.io?id=001422282105200cb
https://javayms.pages.dev?id=001422282105200cb