基于javaweb+mysql的jsp+servlet球队nba及其周边商城系统(java+jdbc+servlet+jsp+mysql)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的JSP+Servlet球队nba及其周边商城系统(java+jdbc+servlet+jsp+mysql)
项目介绍
本项目分为前后台,前台为普通用户登录,后台为管理员登录;
管理员角色包含以下功能:
管理员登录,会员管理,资讯管理,友情链接管理,滚动图片管理,管理关于我们,商品类别管理,球队管理,商品管理,商品库存管理,订单管理,留言管理等功能。
用户角色包含以下功能:
用户登录,查看首页,查看商品详情,查看购物车,提交订单,查看我的订单,确认支付,提交留言,修改个人信息等功能。
环境需要
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
使用说明
-
使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
-
使用IDEA/Eclipse/MyEclipse导入项目;
-
将项目中util/SimpleDataSource.java配置文件中的数据库配置改为自己的配置;
-
运行项目,输入localhost:8080/jsp_zhctms_site 登录 注:tomcat中配置项目路径必须为jsp_zhctms_site
用户账号/密码: user/123456
管理员账号/密码:admin/admin
+ "','"
+ savetime
+ "','"
+ memberid + "')");
request.setAttribute("suc", "留言成功!");
go("/msg.jsp", request, response);
}
if (ac.equals("msghf")) {
String id = request.getParameter("id");
String hfmsg = request.getParameter("hfmsg");
dao.commOper("update chat set hfmsg='" + hfmsg + "' where id="
+ id);
request.setAttribute("suc", "回复成功!");
go("/admin/msglist.jsp", request, response);
}
if (ac.equals("goodstjset")) {
String id = request.getParameter("id");
String tprice = request.getParameter("tprice") == null ? ""
: request.getParameter("tprice");
if (!tprice.equals("")) {
HashMap map = dao.select("select * from goods where id=" + id)
.get(0);
if (Double.valueOf(tprice) >= Double.valueOf(map.get("price")
.toString())) {
request.setAttribute("info", "特价必须低于原价!");
go("/admin/goodstjset.jsp?id=" + id, request, response);
} else {
dao.commOper("update goods set tprice='" + tprice
+ "' where id=" + id);
request.setAttribute("suc", "特价设置成功!");
go("/admin/goodsgl.jsp", request, response);
}
} else {
dao.commOper("update goods set tprice='' where id=" + id);
request.setAttribute("info", "特价已取消!");
go("/admin/goodsgl.jsp", request, response);
}
}
out.flush();
out.close();
}
private static Properties config = null;
static {
public class MainCtrl extends HttpServlet {
public MainCtrl() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
MainMethod responses = new MainMethod();
public void go(String url, HttpServletRequest request,
HttpServletResponse response) {
try {
request.getRequestDispatcher(url).forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
return new String(str.getBytes("ISO-8859-1"),"gb2312");
}
/**
* @param String date
* @param int day
* @return
*/
public static String getDay(String date,int day) {
String b = date.substring(0,10);
String c = b.substring(0,4);
String d = b.substring(5,7);
String f = b.substring(8,10);
String aa = c+"/"+d+"/"+f;
String a = "";
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
GregorianCalendar grc=new GregorianCalendar();
grc.setTime(new Date(aa));
grc.add(GregorianCalendar.DAY_OF_MONTH,day);
String resu = dateFormat.format(grc.getTime());
String t[]= resu.split("-");
String sesuu = "";
for(int i=0;i<t.length;i++)
{
if(t[i].length()==1)
{
t[i]="0"+t[i];
}
sesuu += t[i]+"-";
}
return sesuu.substring(0,10);
}
/**
* 计算两个时期之间的天数
*
*/
public static int dayToday(String DATE1, String DATE2) {
int i = 0;
DATE1 = DATE1.substring(0,DATE1.indexOf(" "));
DATE2 = DATE2.substring(0,DATE2.indexOf(" "));
String[] d1 = DATE1.split("-");
if(d1[1].length()==1)
} catch (WriteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//下面开始添加单元格
int i=1;
System.out.println(list);
for(HashMap t:list){
try {
Iterator it = t.entrySet().iterator();
int jj=0;
while(it.hasNext())
{
Label label1 = new Label(jj, i,"");
String a = it.next().toString().replaceAll("null", " abc ");
if(a.split("=").length==1)a=a+"abc";
System.out.println(a);
label1.setString(a.split("=")[1]);
ws.addCell(label1);
jj++;
}
i++;
} catch (RowsExceededException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (WriteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
try {
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
HashMap ddmap = dao.select("select * from ddinfo where id=" + ddid)
.get(0);
ArrayList<HashMap> dddetaillist = (ArrayList<HashMap>) dao
.select("select * from dddetail where ddno="
+ ddmap.get("ddno"));
boolean flag = true;// 用作订单商品库存校验结果
for (HashMap dddetailmap : dddetaillist) {
// 如果其中某个商品的数量大于其库存量 则置 FLASE标识
if (Integer.valueOf(dddetailmap.get("sl").toString()) > Info
.getkc(dddetailmap.get("goodid").toString())) {
flag = false;
}
}
if (flag) {
dao.commOper("update ddinfo set fhstatus='已发货',wlinfo='"
+ wlinfo + "' where id=" + ddid);
// 发货后减库存
for (HashMap dddetailmap : dddetaillist) {
dao.commOper("insert into kcrecord (gid,happennum,type,savetime) values "
+ "('"
+ dddetailmap.get("goodid")
+ "','"
+ dddetailmap.get("sl")
+ "','out','"
+ Info.getDateStr() + "')");
}
request.setAttribute("info", "订单已发货!");
go("/admin/ddgl.jsp", request, response);
} else {
request.setAttribute("info", "订单中商品库存不足,发货失败!");
go("/admin/ddgl.jsp", request, response);
}
}
// 会员注册
if (ac.equals("register")) {
String uname = request.getParameter("username");
String upass = request.getParameter("upass");
String email = request.getParameter("email") == null ? "" : request
.getParameter("email");
String tname = request.getParameter("tname") == null ? "" : request
.getParameter("tname");
String sex = request.getParameter("sex") == null ? "" : request
.getParameter("sex");
String addr = request.getParameter("addr") == null ? "" : request
.getParameter("addr");
String ybcode = request.getParameter("ybcode") == null ? ""
: request.getParameter("ybcode");
String qq = request.getParameter("qq") == null ? "" : request
.getParameter("qq");
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("下页");
}
}
// 发布商品
if (ac.equals("goodsadd")) {
try {
String goodno = Info.getAutoNo();
String goodname = "";
String fid = "";
String sid = "";
String goodpp = "";
String price = "";
String filename = "";
String note = "";
String shstatus = "通过";
String istj = "no";
String savetime = Info.getDateStr();
String tprice = "";
request.setCharacterEncoding("utf-8");
RequestContext requestContext = new ServletRequestContext(
request);
if (FileUpload.isMultipartContent(requestContext)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(request
.getRealPath("/upfile/") + "/"));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(100 * 1024 * 1024);
List items = new ArrayList();
items = upload.parseRequest(request);
goodname = ((FileItem) items.get(0)).getString();
goodname = Info.getUTFStr(goodname);
fid = ((FileItem) items.get(1)).getString();
fid = Info.getUTFStr(fid);
sid = ((FileItem) items.get(2)).getString();
sid = Info.getUTFStr(sid);
goodpp = ((FileItem) items.get(3)).getString();
goodpp = Info.getUTFStr(goodpp);
price = ((FileItem) items.get(4)).getString();
price = Info.getUTFStr(price);
note = ((FileItem) items.get(6)).getString();
note = Info.getUTFStr(note);
FileItem fileItem = (FileItem) items.get(5);
if (fileItem.getName() != null && fileItem.getSize() != 0) {
if (fileItem.getName() != null
&& fileItem.getSize() != 0) {
File fullFile = new File(fileItem.getName());
filename = Info.generalFileName(fullFile.getName());
File newFile = new File(
request.getRealPath("/upfile/") + "/"
+ filename);
try {
fileItem.write(newFile);
String sql = "insert into imgadv (filename,imgtype) "
+ "values('" + img + "','" + imgtype + "')";
dao.commOper(sql);
request.setAttribute("suc", "");
go("/admin/imgadvadd.jsp", request, response);
}
} catch (Exception e1) {
e1.printStackTrace();
request.setAttribute("no", "");
request.getRequestDispatcher("/admin/imgadvadd.jsp").forward(
request, response);
}
}
// 编辑图片
if (ac.equals("imgadvedit")) {
String id = request.getParameter("id");
HashMap map = dao.select("select * from imgadv where id=" + id)
.get(0);
try {
String img = map.get("filename").toString();
request.setCharacterEncoding("utf-8");
RequestContext requestContext = new ServletRequestContext(
request);
if (FileUpload.isMultipartContent(requestContext)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(new File(request
.getRealPath("/upfile/") + "/"));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(100 * 1024 * 1024);
List items = new ArrayList();
items = upload.parseRequest(request);
FileItem fileItem = (FileItem) items.get(0);
if (fileItem.getName() != null && fileItem.getSize() != 0) {
if (fileItem.getName() != null
&& fileItem.getSize() != 0) {
File fullFile = new File(fileItem.getName());
img = Info.generalFileName(fullFile.getName());
File newFile = new File(
request.getRealPath("/upfile/") + "/" + img);
try {
fileItem.write(newFile);
} catch (Exception e) {
e.printStackTrace();
}
goodpp = Info.getUTFStr(goodpp);
price = ((FileItem) items.get(4)).getString();
price = Info.getUTFStr(price);
note = ((FileItem) items.get(6)).getString();
note = Info.getUTFStr(note);
FileItem fileItem = (FileItem) items.get(5);
if (fileItem.getName() != null && fileItem.getSize() != 0) {
if (fileItem.getName() != null
&& fileItem.getSize() != 0) {
File fullFile = new File(fileItem.getName());
filename = Info.generalFileName(fullFile.getName());
File newFile = new File(
request.getRealPath("/upfile/") + "/"
+ filename);
try {
fileItem.write(newFile);
} catch (Exception e) {
e.printStackTrace();
}
} else {
}
}
}
dao.commOper("insert into goods (goodno,goodname,fid,sid,price,note,savetime,shstatus,filename,istj,tprice,delstatus,salestatus,goodpp) "
+ "values ('"
+ goodno
+ "','"
+ goodname
+ "','"
+ fid
+ "','"
+ sid
+ "','"
+ price
+ "','"
+ note
+ "','"
+ savetime
+ "','通过','"
+ filename
file1.deleteOnExit();
file1.delete();
}}}
}
public static void writeExcel(String fileName,String[] pros,java.util.List<HashMap> list,HttpServletRequest request, HttpServletResponse response){
WritableWorkbook wwb = null;
try {
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
if(wwb!=null){
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);
try {
for(int i=0;i<pros.length;i++)
{
Label label1 = new Label(i, 0,"");
label1.setString(pros[i]);
ws.addCell(label1);
}
} catch (RowsExceededException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (WriteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//下面开始添加单元格
int i=1;
+ sex
+ "','"
+ idcard
+ "','"
+ tel
+ "','"
+ email
+ "','"
+ addr
+ "','"
+ delstatus
+ "','"
+ savetime + "')");
request.setAttribute("suc", "");
go("/admin/sysuseradd.jsp", request, response);
}
// 编辑管理员
if (ac.equals("sysuseredit")) {
String id = request.getParameter("id");
String userpwd = request.getParameter("userpwd");
String realname = request.getParameter("realname");
String sex = request.getParameter("sex");
String idcard = request.getParameter("idcard");
String tel = request.getParameter("tel");
String email = request.getParameter("email");
String addr = request.getParameter("addr");
dao.commOper("update sysuser set userpwd='" + userpwd
+ "',realname='" + realname + "',sex='" + sex
+ "',idcard='" + idcard + "',tel='" + tel + "',email='"
+ email + "',addr='" + addr + "' where id=" + id);
request.setAttribute("suc", "");
go("/admin/sysuseredit.jsp?id=" + id, request, response);
}
// 商品类别新增
if (ac.equals("protypeadd")) {
String typename = request.getParameter("typename");
String fatherid = request.getParameter("fatherid");
dao.commOper("insert into protype (typename,fatherid,delstatus) values ('"
+ typename + "','" + fatherid + "','0') ");
request.setAttribute("suc", "操作成功!");
go("/admin/protype.jsp", request, response);
}
return str;
}
public static String getGBKStr(String str) throws UnsupportedEncodingException{
if(str==null){
return "";
}
return new String(str.getBytes("ISO-8859-1"),"GBK");
}
public static String getGB2312Str(String str) throws UnsupportedEncodingException{
if(str==null){
return "";
}
return new String(str.getBytes("ISO-8859-1"),"gb2312");
}
/**
* @param String date
* @param int day
* @return
*/
public static String getDay(String date,int day) {
String b = date.substring(0,10);
String c = b.substring(0,4);
String d = b.substring(5,7);
String f = b.substring(8,10);
String aa = c+"/"+d+"/"+f;
String a = "";
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
GregorianCalendar grc=new GregorianCalendar();
grc.setTime(new Date(aa));
grc.add(GregorianCalendar.DAY_OF_MONTH,day);
String resu = dateFormat.format(grc.getTime());
String t[]= resu.split("-");
String sesuu = "";
for(int i=0;i<t.length;i++)
{
if(t[i].length()==1)
{
t[i]="0"+t[i];
}
sesuu += t[i]+"-";
}
return sesuu.substring(0,10);
}
+ "','"
+ userpwd
+ "','"
+ realname
+ "','"
+ sex
+ "','"
+ idcard
+ "','"
+ tel
+ "','"
+ email
+ "','"
+ addr
+ "','"
+ delstatus
+ "','"
+ savetime + "')");
request.setAttribute("suc", "");
go("/admin/sysuseradd.jsp", request, response);
}
// 编辑管理员
if (ac.equals("sysuseredit")) {
String id = request.getParameter("id");
String userpwd = request.getParameter("userpwd");
String realname = request.getParameter("realname");
String sex = request.getParameter("sex");
String idcard = request.getParameter("idcard");
String tel = request.getParameter("tel");
String email = request.getParameter("email");
String addr = request.getParameter("addr");
dao.commOper("update sysuser set userpwd='" + userpwd
+ "',realname='" + realname + "',sex='" + sex
+ "',idcard='" + idcard + "',tel='" + tel + "',email='"
+ email + "',addr='" + addr + "' where id=" + id);
request.setAttribute("suc", "");
go("/admin/sysuseredit.jsp?id=" + id, request, response);
}
// 商品类别新增
if (ac.equals("protypeadd")) {
String typename = request.getParameter("typename");
String fatherid = request.getParameter("fatherid");
dao.commOper("insert into protype (typename,fatherid,delstatus) values ('"
+ typename + "','" + fatherid + "','0') ");
request.setAttribute("suc", "操作成功!");
go("/admin/protype.jsp", request, response);
}
// 商品类别编辑
if (ac.equals("protypeedit")) {
String id = request.getParameter("id");
String typename = request.getParameter("typename");
{
String pm=((Object)it.next()).toString();
String str1 = "";
String str2 = "";
String[] strs = pm.split("=");
str1 = strs[0];
if(strs.length==1)str2="";
if(strs.length==2)str2=strs[1];
jscode+=" if(f1."+str1+")\n";
jscode+="{\n";
jscode+="f1."+str1+".value=\""+str2+"\";\n";
jscode+="}\n";
jscode+="if(document.getElementById(\"txt\"))\n";
jscode+="{\n";
jscode+="document.getElementById(\"txt\").src=\"/jsp_nbashop/upfile/"+map.get("filename")+"\";\n";
jscode+="}\n";
}
jscode+="}\n";
jscode+=" getPvalue();\n";
jscode+="</script>\n";
}catch (Exception e) {
e.printStackTrace();
}
return jscode;
}
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 synchronized static String getID() {
Random random = new Random();
StringBuffer ret = new StringBuffer(20);
String rand = String.valueOf(Math.abs(random.nextInt()));
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,
note = Info.getUTFStr(note);
FileItem fileItem = (FileItem) items.get(1);
if (fileItem.getName() != null && fileItem.getSize() != 0) {
if (fileItem.getName() != null
&& fileItem.getSize() != 0) {
File fullFile = new File(fileItem.getName());
img = Info.generalFileName(fullFile.getName());
File newFile = new File(
request.getRealPath("/upfile/") + "/" + img);
try {
fileItem.write(newFile);
} catch (Exception e) {
e.printStackTrace();
}
} else {
}
}
}
String sql = "update news set title='" + title + "',note='"
+ note + "',img='" + img + "' where id=" + id;
dao.commOper(sql);
request.setAttribute("suc", "操作成功!");
go("/admin/newslist.jsp?id=" + id, request, response);
} catch (Exception e1) {
e1.printStackTrace();
request.setAttribute("error", "");
request.getRequestDispatcher("/admin/newsedit.jsp?id=" + id)
.forward(request, response);
}
}
// 新增公告
if (ac.equals("noticesadd")) {
String title = request.getParameter("title");
String note = request.getParameter("note");
String savetime = Info.getDateStr();
String type = "公告";
dao.commOper("insert into news (title,note,savetime,type) "
+ " values ('" + title + "','" + note + "','" + savetime
+ "','" + type + "')");
request.setAttribute("suc", "");
go("admin/noticesadd.jsp", request, response);
}
// 编辑公告
if (ac.equals("noticesedit")) {
String id = request.getParameter("id");
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;
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;