作者主页:夜未央5788
简介: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 stub
HttpServletRequest 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("首页");
else
buf.append("<a href='").append(this.path).append("¤tPage=1")
.append(parameter)
.append("' class='ls'>").append("首页")
.append("</a>");
// #1157B7
buf.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>");
else
buf.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("末页 ");
else
buf.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>");
else
buf.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";
else
system = "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