Java项目:JSP汉服服饰租赁展示商城项目
作者主页:源码空间站2022
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
项目介绍
本项目分为前后台,前台为普通用户登录,后台为管理员登录;
用户角色包含以下功能:
用户登录,查看首页,提交留言,查看商品详情,查看购物车,提交订单,查看我的订单,添加租赁人信息,修改会员资料等功能。
管理员角色包含以下功能:
管理员登录,会员信息管理,用户信息管理,资讯管理,友情链接管理,滚动图片管理,关于我们管理,服装类别管理,租赁方式管理,服装管理,库存管理,订单管理,留言管理等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7/8.0等版本均可;
6.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
技术栈
Servlet、JSP、JDBC、MySQL5.7、Tomcat8
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目;
3. 将项目中util/SimpleDataSource.java配置文件中的数据库配置改为自己的配置;
运行截图
前台界面-用户角色
后台界面-管理员角色
相关代码
登录控制器
public class LoginFilter implements Filter {public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubHttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) res;HttpSession session = request.getSession();// 如果session不为空,则可以浏览其他页面String url = request.getServletPath();//System.out.println(url);String path = request.getRequestURI();//这里判断目录,后缀名,当然也可以写在web.xml中,用url-pattern进行拦截映射if ((!request.getServletPath().equals("/admin/login.action"))&& (!request.getServletPath().equals("/admin/login.jsp"))&& (!request.getServletPath().equals("/admin/relogin.jsp"))&& (!request.getServletPath().equals("/admin/lib/font-awesome/css/font-awesome.css"))&& (!request.getServletPath().equals("/admin/lib/bootstrap/js/bootstrap.js"))&& (!request.getServletPath().equals("/admin/lib/jquery-1.7.2.min.js"))&& (!request.getServletPath().equals("/admin/stylesheets/theme.css"))&& (!request.getServletPath().equals("/admin/lib/bootstrap/css/bootstrap.css"))) {// 登陆页面无需过滤if(path.indexOf("/admin/login.jsp") > -1) {chain.doFilter(request, response);return;}if (session.getAttribute("admin") == null) {session.invalidate();response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();out.println("<script language='javascript' type='text/javascript'>");out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');parent.location.href='" + request.getContextPath() + "/admin/login.jsp'");out.println("</script>");} else {chain.doFilter(request, response);}} else {chain.doFilter(request, response);}}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}
分页管理控制器
public class PageManager {private PageManager() {}// 默认一页最大记录数public static final int DEFAULTPAGESIZE = 20;// 分页段public static final int segment = 10;// 当前页数protected int currentPage;// 一页长度protected int pageSize;// 总页数protected long pageNumber;// 总记录数protected long count;// 数据protected Collection collection;// 数据查询对象protected CommDAO dao = new CommDAO();// 表现层代码protected String info;// 请求路径protected String path;// 服务器请求对象protected HttpServletRequest request;/** 仅仅只是加到路径中去*/protected String parameter = "";/*** * @param 下一页的分页链接* @param 一页最大记录数* @param 当前HttpServletRequest对象* @param 数据库操作对象*/protected PageManager(String path, int pageSize, HttpServletRequest request) {// 任意一个dao都行this.currentPage = 1;this.pageNumber = 1;this.count = 0;this.pageSize = pageSize <= 0 ? DEFAULTPAGESIZE : pageSize;this.request = request;this.path = path;request.setAttribute("page", this);try {this.currentPage = Integer.parseInt(request.getParameter("currentPage")) <= 0 ? 1 : Integer.parseInt(request.getParameter("currentPage"));} catch (Exception e) {try {this.currentPage = Integer.parseInt((String) request.getSession().getAttribute("currentPage"));} catch (Exception e1) {this.currentPage = 1;}}}/*** * @param 下一页的分页链接* @param 一页最大记录数* @param 当前HttpServletRequest对象* @param 数据库操作对象*/public static PageManager getPage(String path, int pageSize,HttpServletRequest request) {return new PageManager(path, pageSize, request);}/*** * * @param hql语句* */public void doList(String hql) {String sql = "select count(*) "+hql.substring(hql.indexOf("from"));sql = sql.substring(0,sql.indexOf("order"));this.count = this.dao.getInt(sql);if (this.count != 0) {this.pageNumber = count % this.pageSize == 0 ? this.count/ this.pageSize : this.count / this.pageSize + 1;if (this.currentPage > this.pageNumber)this.currentPage = (int) this.pageNumber;}this.request.getSession().setAttribute("currentPage",String.valueOf(this.currentPage));this.collection = this.dao.select(hql,this.currentPage , this.pageSize);this.refreshUrl();}/*** * @param 查询条件集合* 如没有条件只是列表就不使用这个方法*/public void addParameter(List parameter) {StringBuffer para = new StringBuffer("");if (parameter != null && parameter.size() != 0) {Iterator iterator = parameter.iterator();while (iterator.hasNext()) {para.append("&").append(iterator.next().toString());}}this.parameter = para.toString();}/*** 刷新分页路径* */protected void refreshUrl() {StringBuffer buf = new StringBuffer();buf.append("<font color='#1157B7'>共").append(count);buf.append("条");buf.append(" ");buf.append("第").append(this.currentPage).append("/").append(this.pageNumber).append("页");buf.append(" ");if (this.currentPage == 1)buf.append("首页");elsebuf.append("<a href='").append(this.path).append("¤tPage=1").append(parameter).append("' class='ls'>").append("首页").append("</a>");// #1157B7buf.append(" ");if (this.currentPage > 1) {buf.append("<a href='").append(this.path).append("¤tPage=").append(currentPage - 1).append(parameter).append("' class='ls'>").append("上页").append("</a>");} else {buf.append("上页");}buf.append(" ");int currentSegment = this.currentPage % segment == 0 ? this.currentPage/ segment : this.currentPage / segment + 1;/*for (int i = 1; i <= this.pageNumber; i++) {if (this.currentPage == i)buf.append("<font color='red'>").append(i).append("</font>");elsebuf.append("<a href='").append(this.path).append("¤tPage=").append(i).append(parameter).append("' class='ls'>[").append(i).append("]</a>");}*/buf.append(" ");if (this.currentPage < this.pageNumber) {buf.append("<a href='").append(this.path).append("¤tPage=").append(currentPage + 1).append(parameter).append("' class='ls'>").append("下页").append("</a>");} else {buf.append("下页");}buf.append(" ");if (this.currentPage == this.pageNumber)buf.append("末页 ");elsebuf.append("<a href='").append(this.path).append("¤tPage=").append(this.pageNumber).append(parameter).append("' class='ls'>").append("末页").append("</a></font> ");// // for (int i = 0; i < this.pageNumber; i++) {// if (this.currentPage == i + 1) {// buf.append("<font color=red>[" + (i + 1) + "]</font>").append(// " ");// } else {// buf.append("<a href='").append(this.path).append(// "¤tPage=").append(i + 1).append(parameter)// .append("' style='TEXT-DECORATION:none'>").append(// "[" + (i + 1) + "]").append("</a> ");// }// }buf.append("<select class='input-xlarge' onchange=\"javascript:window.location='").append(this.path).append("¤tPage='+").append("this.options[this.selectedIndex].value").append(parameter).append("\">");for (int i = 0; i < this.pageNumber; i++) {if (this.currentPage == i + 1)buf.append("<option value=" + (i + 1)+ " selected=\"selected\">" + (i + 1) + "</option>");elsebuf.append("<option value=" + (i + 1) + ">" + (i + 1)+ "</option>");}buf.append("</select>");this.info = buf.toString();}public Collection getCollection() {return collection;}public long getCount() {return count;}public int getCurrentPage() {return currentPage;}public long getPageNumber() {return pageNumber;}public int getPageSize() {return pageSize;}public String getInfo() {return info;}}
字符串控制器
public class StrUtil {private static int idSequence=10000;public static String checkStr(Object obj) {if(obj==null){return "";}else{return obj.toString();} }public synchronized static String generalSrid() {StringBuffer ret = new StringBuffer(20); ret.append(StrUtil.getFormatDate("yyyyMMddHHmmss")); idSequence++;if(idSequence>20000)idSequence-=10000;ret.append(String.valueOf(idSequence).substring(1));//System.out.println("生成ID="+ret);return ret.toString();}public static String generalFileName(String srcFileName) {try{int index=srcFileName.lastIndexOf(".");return StrUtil.generalSrid()+srcFileName.substring(index).toLowerCase();}catch(Exception e){return StrUtil.generalSrid();}}public static String parseOS(String agent) {String system="Other";if(agent.indexOf("Windows NT 5.2")!=-1) system="Win2003";else if(agent.indexOf("Windows NT 5.1")!=-1) system="WinXP";else if(agent.indexOf("Windows NT 5.0")!=-1) system="Win2000";else if(agent.indexOf("Windows NT")!=-1) system="WinNT";else if(agent.indexOf("Windows 9")!=-1) system="Win9x";else if(agent.indexOf("unix")!=-1) system="unix";else if(agent.indexOf("SunOS")!=-1) system="SunOS";else if(agent.indexOf("BSD")!=-1) system="BSD";else if(agent.indexOf("linux")!=-1) system="linux";else if(agent.indexOf("Mac")!=-1) system="Mac";elsesystem = "Other"; return system;}/*** 得到当前日期的格式化字符串* * @param formatString* 如:yyyy(年)-MM(月)-dd(日)-HH(时)-mm(分)-ss(秒)-SSS(毫秒)* @return 格式化过的当前日期字符串*/public static String getFormatDate(String formatString) {Date now =new Date(System.currentTimeMillis());SimpleDateFormat sdf=new SimpleDateFormat(formatString);String ret=sdf.format(now);return ret;} /*** @param 无* @return 当前日期*/public static Date getCurrentDate() {Date now =new Date(System.currentTimeMillis());return now;}/*** 将格式化的日期字符串转换为日期。* * @param formatString* 如:yyyy(年)-MM(月)-dd(日)-HH(时)-mm(分)-ss(秒)-SSS(毫秒)* @return 字符串转换后的日期。*/public static Date formatDate(String dateString) {try {SimpleDateFormat sdf=new SimpleDateFormat(); Date date=sdf.parse(dateString);return date;} catch (ParseException e) { return new Date();} }public static String nowdate(){SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式return df.format(new Date());// new Date()为获取当前系统时间}public static int parseInt(String numberStr) {//Pattern pattern=Pattern.compile("[0-9]*");//Pattern pattern=Pattern.compile("^[\\-\\d][0-9]*[\\.]{0,1}[0-9]+$");if(numberStr==null)return 0;Pattern pattern=Pattern.compile("^[\\-]{0,1}[0-9]+$");Matcher matcher = pattern.matcher(numberStr);if(matcher.find()){return Integer.parseInt(numberStr);}else{return 0;} }public static String szqc(String[] src) {List<String> numList = new ArrayList<String>();for (String i : src)numList.add(i);Collections.reverse(numList);String result = "";for (String str : numList) {result += str+",";}result = result.substring(0,result.length() - 1);return result;}}
如果也想学习本系统,下面领取。关注并回复:139jsp
Java项目:JSP汉服服饰租赁展示商城项目相关推荐
- java计算机毕业设计汉服服装租赁系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计汉服服装租赁系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计汉服服装租赁系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目架构:B ...
- java计算机毕业设计汉服服装租赁系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计汉服服装租赁系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计汉服服装租赁系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S ...
- java servlet项目源码下载_java网上商城项目源码(jsp.servlet+javabean+mysql+jdbc)
[实例简介] 网上商城所有基本功能实现. 包含所有图片等资源 包含数据库创建脚步 开发环境 jdk1.7 myeclipse10 tomcat6.0 mysql 5 [实例截图] [核心代码] 325 ...
- java+servlet+jsp大学生物品租赁网
本网站包括首页.用户注册页面.用户登录页面.用户个人中心以及管理员管理界面. 1首页 为各类租赁物的展示以及交易详情,分为服装类.器材类.生活用品类以及道具类.每个大类有各个小类. 2用户注册页面 需 ...
- java怎么添加商品信息_Javaweb网上商城项目实战(20)添加商品到购物车
原理分析 具体实现 准备工作 有些准备工作在之前已经实现了,这里强调一下,如果没改的自己改一下,已经完成了的也检查一下. 1.在product_list.jsp中修改链接 2.product_info ...
- Java进阶-案例训练(十七)(商城项目(2))
文章目录 一.登录权限校验 二.七天内自动登录(分两步走) 2.1 第一步(存放到cookie中) 2.2 第二步(再次登录用户名密码还在输入框) 三.权限修改 四.批量删除 五.分类分页查询 六.分 ...
- java 前台商品展示模块_SSH框架网上商城项目第10战之搭建商品类基本模块
前面我们完成了与商品类别相关的业务逻辑,接下来我们开始做具体商品部分. 1. 数据库建表并映射Model首先我们在数据库中新建一张表,然后使用逆向工程将表映射成Model类,表如下: /*====== ...
- 基于JAVA+Servlet+JSP+MYSQL的在线鲜花商城系统
项目功能: 页面效果:
- 基于java(jsp)校园水果鲜花商城设计与实现毕业设计毕设参考
功能介绍 本次论文研究的内容主要模块包括以下几点: 用户首次登陆系统需要注册一个用户账号,用户在登录平台后,可以进行平台的操作. (1)登录功能:注册普通账号登录:登录后可以修改用户的基本信息,也可以 ...
最新文章
- 如何看待机器视觉的“对抗样本”问题,其原理是什么?
- 皮一皮:浓浓的父爱...
- javascript判断数组是否包含了指定的元素
- 第二百一十一天 how can i 坚持
- 2011年9月最新整理的10个有趣的jQuery插件集合
- Cocos2d-x内置粒子系统
- 【计算机系统设计】重点 · 学习笔记(0)(数据通路设计思想)
- 短信语音验证码发展的必然趋势
- Python使用pytesseract进行验证码图像识别
- app采集的10个经典方法
- 洛谷p3398仓鼠找suger题解
- 华为手机翻译功能怎么使用?这三种方法请务必收藏
- 目前主要的计算机汉字输入方法是什么,[计算机汉字输入方法.ppt
- 关于坯布的面料克重问题
- 如何打包Google扩展程序
- 这可能是你们都在找的:React 纯原生纯hook多标签微前端
- Jetson+zed2安装
- Linux配置Java环境
- 苹果手机也可以开启电信VoLTE!
- Linux文件权限的更改