作者主页:源码空间站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("&nbsp;&nbsp;");buf.append("第").append(this.currentPage).append("/").append(this.pageNumber).append("页");buf.append("&nbsp;&nbsp;&nbsp;&nbsp;");if (this.currentPage == 1)buf.append("首页");elsebuf.append("<a href='").append(this.path).append("&currentPage=1").append(parameter).append("' class='ls'>").append("首页").append("</a>");// #1157B7buf.append("&nbsp;&nbsp;&nbsp;");if (this.currentPage > 1) {buf.append("<a href='").append(this.path).append("&currentPage=").append(currentPage - 1).append(parameter).append("' class='ls'>").append("上页").append("</a>");} else {buf.append("上页");}buf.append("&nbsp;&nbsp;");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("&currentPage=").append(i).append(parameter).append("' class='ls'>[").append(i).append("]</a>");}*/buf.append("&nbsp;&nbsp;");if (this.currentPage < this.pageNumber) {buf.append("<a href='").append(this.path).append("&currentPage=").append(currentPage + 1).append(parameter).append("' class='ls'>").append("下页").append("</a>");} else {buf.append("下页");}buf.append("&nbsp;&nbsp;&nbsp;&nbsp;");if (this.currentPage == this.pageNumber)buf.append("末页&nbsp;&nbsp;");elsebuf.append("<a href='").append(this.path).append("&currentPage=").append(this.pageNumber).append(parameter).append("' class='ls'>").append("末页").append("</a></font>&nbsp;&nbsp;");// // for (int i = 0; i < this.pageNumber; i++) {// if (this.currentPage == i + 1) {// buf.append("<font color=red>[" + (i + 1) + "]</font>").append(// "&nbsp;");// } else {// buf.append("<a href='").append(this.path).append(// "&currentPage=").append(i + 1).append(parameter)// .append("' style='TEXT-DECORATION:none'>").append(// "[" + (i + 1) + "]").append("</a>&nbsp;");// }// }buf.append("<select class='input-xlarge' onchange=\"javascript:window.location='").append(this.path).append("&currentPage='+").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汉服服饰租赁展示商城项目相关推荐

  1. java计算机毕业设计汉服服装租赁系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计汉服服装租赁系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计汉服服装租赁系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: 项目架构:B ...

  2. java计算机毕业设计汉服服装租赁系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计汉服服装租赁系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计汉服服装租赁系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S ...

  3. java servlet项目源码下载_java网上商城项目源码(jsp.servlet+javabean+mysql+jdbc)

    [实例简介] 网上商城所有基本功能实现. 包含所有图片等资源 包含数据库创建脚步 开发环境 jdk1.7 myeclipse10 tomcat6.0 mysql 5 [实例截图] [核心代码] 325 ...

  4. java+servlet+jsp大学生物品租赁网

    本网站包括首页.用户注册页面.用户登录页面.用户个人中心以及管理员管理界面. 1首页 为各类租赁物的展示以及交易详情,分为服装类.器材类.生活用品类以及道具类.每个大类有各个小类. 2用户注册页面 需 ...

  5. java怎么添加商品信息_Javaweb网上商城项目实战(20)添加商品到购物车

    原理分析 具体实现 准备工作 有些准备工作在之前已经实现了,这里强调一下,如果没改的自己改一下,已经完成了的也检查一下. 1.在product_list.jsp中修改链接 2.product_info ...

  6. Java进阶-案例训练(十七)(商城项目(2))

    文章目录 一.登录权限校验 二.七天内自动登录(分两步走) 2.1 第一步(存放到cookie中) 2.2 第二步(再次登录用户名密码还在输入框) 三.权限修改 四.批量删除 五.分类分页查询 六.分 ...

  7. java 前台商品展示模块_SSH框架网上商城项目第10战之搭建商品类基本模块

    前面我们完成了与商品类别相关的业务逻辑,接下来我们开始做具体商品部分. 1. 数据库建表并映射Model首先我们在数据库中新建一张表,然后使用逆向工程将表映射成Model类,表如下: /*====== ...

  8. 基于JAVA+Servlet+JSP+MYSQL的在线鲜花商城系统

    项目功能: 页面效果:

  9. 基于java(jsp)校园水果鲜花商城设计与实现毕业设计毕设参考

    功能介绍 本次论文研究的内容主要模块包括以下几点: 用户首次登陆系统需要注册一个用户账号,用户在登录平台后,可以进行平台的操作. (1)登录功能:注册普通账号登录:登录后可以修改用户的基本信息,也可以 ...

最新文章

  1. 如何看待机器视觉的“对抗样本”问题,其原理是什么?
  2. 皮一皮:浓浓的父爱...
  3. javascript判断数组是否包含了指定的元素
  4. 第二百一十一天 how can i 坚持
  5. 2011年9月最新整理的10个有趣的jQuery插件集合
  6. Cocos2d-x内置粒子系统
  7. 【计算机系统设计】重点 · 学习笔记(0)(数据通路设计思想)
  8. 短信语音验证码发展的必然趋势
  9. Python使用pytesseract进行验证码图像识别
  10. app采集的10个经典方法
  11. 洛谷p3398仓鼠找suger题解
  12. 华为手机翻译功能怎么使用?这三种方法请务必收藏
  13. 目前主要的计算机汉字输入方法是什么,[计算机汉字输入方法.ppt
  14. 关于坯布的面料克重问题
  15. 如何打包Google扩展程序
  16. 这可能是你们都在找的:React 纯原生纯hook多标签微前端
  17. Jetson+zed2安装
  18. Linux配置Java环境
  19. 苹果手机也可以开启电信VoLTE!
  20. Linux文件权限的更改

热门文章

  1. 天文方面的python库
  2. Linux上安装Nginx静态资源服务器
  3. 男人做事,要克服这些心理弱点
  4. 镀金天空- 验证码1
  5. 《贵州省大数据发展报告(2016)》白皮书发布
  6. 随机游走模型(Random Surfer Model)
  7. Postmant简单介绍(小兔子吃白菜)
  8. 了解 Web 及网络基础
  9. EtherCAT igh主站控制埃斯顿伺服(csp模式)
  10. C++之中介者(Mediator)模式