基于JavaWeb的土特产销售购物商城的设计与实现

1.引言

随着互联网技术的不断发展,电子商务已成为一种重要的经济活动形式。土特产作为传统文化的代表之一,在旅游业中具有非常重要的地位。因此,将土特产销售与电子商务相结合,建立一个基于JavaWeb的土特产销售购物商城,将有利于扩大土特产销售渠道,推广土特产文化。

本篇论文将介绍一个基于JavaWeb的土特产销售购物商城的设计与实现。首先,我们将介绍该商城的需求分析,包括商城功能和用户角色等方面。然后,我们将基于MVC模式设计商城的系统架构,并详细描述每个模块的功能和交互流程。接下来,我们将介绍商城的数据库设计和使用JDBC API进行数据访问的实现。最后,我们将通过部署商城到Tomcat服务器并测试商城的功能完整性和稳定性来验证商城的功能。

总之,通过本篇论文的介绍,读者将了解到如何使用JavaWeb技术开发一个土特产销售购物商城,并掌握相关的设计和实现方法。

2.开发技术

2.1 JSP技术

JSP(JavaServer Pages)是一种动态网页开发技术,与Servlet紧密相关。JSP使得开发人员可以将Java代码嵌入HTML页面中,以此来生成动态内容。

JSP使用JSP标签来控制页面的逻辑处理和显示。这些标签允许开发人员嵌入Java代码、JSTL标签库或自定义标签。

在JSP被服务器请求时,它们首先被翻译成Servlet,然后Servlet容器负责运行Servlet。因此,JSP的运行方式与Servlet非常类似。

JSP的优点包括:

  • 简化了Web应用程序的开发:JSP允许开发人员将Java代码嵌入到HTML页面中,极大地简化了Web应用程序的开发过程。
  • 可以重用代码:JSP可以调用Java Bean组件、自定义标签和其他Java类,这样可以重用现有的Java代码。
  • 更好的可读性:JSP的代码比传统的Servlet更易于阅读和维护,因为它们减少了Java代码和HTML标记之间的混合。

但是,JSP也存在一些缺点。例如,当JSP变得复杂时,难以维护;还可能出现安全问题,需要进行严格的输入验证和过滤才能防止跨站点脚本攻击等问题。

2.2 Servlet

Servlet是一种Java技术,它允许开发人员编写动态Web应用程序。Servlet主要用于处理HTTP请求和响应,从而生成动态内容。

Servlet是由Servlet容器(例如Tomcat或Jetty)负责运行的。当客户端(通常是Web浏览器)向服务器发送请求时,Servlet容器就会调用相应的Servlet来处理请求。Servlet可以读取请求数据、执行逻辑处理,并输出响应数据。

与JSP类似,Servlet可以使用Java语言进行编写。但与JSP不同的是,Servlet完全没有HTML代码,而是完全由Java代码构成。因此,Servlet通常比JSP更灵活和高效。

Servlet的优点包括:

  • 可以生成动态内容:Servlet可以根据请求参数、会话状态等动态生成页面内容。这使得开发人员可以开发出更为灵活的Web应用程序。
  • 没有特定的模板语言:由于Servlet完全由Java代码组成,因此它不使用任何特定的模板语言。这意味着开发人员可以使用他们喜欢的任何Java库和框架。
  • 更具可维护性:Servlet代码通常比JSP代码更易于维护,因为它们更容易阅读和测试,并且由于没有HTML代码,因此它们不太容易混淆。

然而,Servlet也存在一些缺点。例如,开发Servlet可能需要更多的Java编程知识;相对于JSP,它们可能需要更多的网络和Web编程知识。另外,因为Servlet没有内置的模板语言,因此生成HTML代码可能更加复杂。

2.3 Mysql数据库

MySQL是一种开源的关系型数据库管理系统(RDBMS),它由瑞典MySQL AB公司开发并维护。MySQL被广泛应用于Web开发中,因为它易于使用、可扩展性强、支持多个平台,并且具有高性能。

MySQL的特点包括:

  • 开源:MySQL是一种开源软件,可以在GNU通用公共许可证(GPL)或商业许可证下使用。
  • 可伸缩性:MySQL可以轻松扩展到任何规模,可以通过添加更多服务器实现水平扩展或垂直扩展来增加单个服务器的处理能力。
  • 高性能:MySQL是一个高性能的关系型数据库,可以快速处理大量数据和复杂查询。
  • 安全:MySQL提供了安全的认证和授权功能,可以确保只有授权用户才能访问敏感数据。
  • 多平台支持:MySQL可运行于Windows、Linux、UNIX等多个操作系统上。

除了以上特点,MySQL还有以下几个重要的方面:

  • 数据库类型:MySQL支持多种不同的数据类型,包括整数、浮点数、字符串、日期和时间等。
  • SQL支持:MySQL支持SQL(结构化查询语言),这是一种广泛使用的标准查询语言,用于管理和查询关系型数据库中的数据。
  • 存储引擎:MySQL支持多个存储引擎,包括InnoDB、MyISAM等。每个引擎具有不同的优点和适用范围。
  • 可扩展性:MySQL可以通过添加插件或自定义函数来扩展其功能。

总之,MySQL是一种可靠、高性能、易于使用、多平台支持的关系型数据库管理系统,适用于广泛的Web应用程序和企业应用程序。

2.4 JDBC

JDBC(Java Database Connectivity)是一种用于在Java应用程序和数据库之间进行通信的API。它提供了一种标准化的方法来连接不同类型的数据库,并使用SQL语句查询和更新数据。

JDBC的主要优点包括:

  • 可移植性:JDBC API定义了一组标准接口,这些接口可以与多个数据库管理系统(DBMS)进行通信。由于JDBC API是标准化的,因此应用程序可以轻松地从一个DBMS转换到另一个DBMS。
  • 安全性:JDBC提供了多种安全机制,例如加密传输、身份验证和授权等,以保护敏感数据免受未经授权的访问。
  • 简单易用:JDBC API是易于理解和使用的,开发人员可以通过简单的API调用来执行各种数据库操作,例如执行查询、插入、更新和删除等操作。
  • 高性能:JDBC API具有良好的性能,在处理大量数据时表现出色。

基本上,JDBC API定义了一组Java类和接口,这些类和接口提供了一种标准方法来连接数据库、发送SQL语句并处理结果集。JDBC API还为连接池、事务、批处理和元数据等功能提供了支持。

虽然JDBC是强大而灵活的API,但使用JDBC仍然需要一定的Java编程知识。许多Java框架和开发工具(例如Spring、Hibernate等)都为了简化JDBC编程而提供了更高级别的抽象。这些框架和工具使得数据库交互变得更加容易,同时提供了额外的功能和便利性。

3.功能设计

系统分为前台用户和后台管理员两部分。

前台用户功能:

(1)用户登录

(2)用户注册

(3)用户查看商品

(4)用户搜索商品

(5)商品加入购物车

(6)商品结算支付确认

(7)我要留言及反馈查看

(8)对商品进行评论

(9)个人信息查看修改

(10)下单信息查看

(11)新闻资讯查看

后台管理员功能:

(1)登录

(2)密码修改

(3)新闻资讯管理

(4)商品分类管理

(5)商品信息管理

(6)订单信息管理

(7)注册用户信息管理

(8)评论留言管理

(9)留言反馈管理

(10)数据统计管理

4.功能效果图

4.1 客户端

4.1.1 首页

首页包含了导航栏、土特产产品信息及其尾部构成。整体设计以绿色为主,突出整体的特产是纯天然无公害的主题。

 4.1.2 商品信息

商品信息是展示商城的全部特产信息,可以查看总计多少条信息,进行上一页下一页等切换,并且能够点击进入查看每个商品的详情信息。

 

基于JavaWeb的土特产销售购物商城的设计与实现_第1张图片 4.1.3 热销推荐

 热销推荐展示的后台想要主推和客户感兴趣的产品,帮助购买者查看筛选,快速定位到平台的热销产品,方便购买。

 4.1.4 全部分类

全部分类是用来提供通过分类筛选商品的入口,点击全部会展示所有特产信息,如果想要精准查找某一个分类的特产信息,可以点击对应商品,列表即可筛选出想要的列表信息。

基于JavaWeb的土特产销售购物商城的设计与实现_第2张图片

 4.1.5 商品查询

商品查询按照价位、分类、名称等条件快速帮助客户筛选商品,在输入完成后点击立即提交即可出现你想要的查找范围的商品信息。

基于JavaWeb的土特产销售购物商城的设计与实现_第3张图片

 4.1.6 新闻资讯

新闻资讯是将各类注意事项、想要呈现给顾客的信息进行展示,让客户对平台更了解更信任。

基于JavaWeb的土特产销售购物商城的设计与实现_第4张图片

  4.1.7 购物车及下单

购物车是平台的核心功能,客户查看筛选商品的目的是为了购买,但是为了下单方便好筛选都会全部先把感兴趣的放在购物车,后面再统一进行下单支付。在商品加购时,用户必须是登录状态才可以。

基于JavaWeb的土特产销售购物商城的设计与实现_第5张图片

输入姓名、地址、电话即可提交生成订单,完成支付即可。(这里使用的是模拟支付)

基于JavaWeb的土特产销售购物商城的设计与实现_第6张图片 

4.1.8 我要留言

我要留言是用户对平台进行留言,询问自己想要知道了解的东西,在后台管理员对留言信息回复后也可以看到反馈内容。

基于JavaWeb的土特产销售购物商城的设计与实现_第7张图片

4.1.9 会员中心

会员中心可以查看个人信息、修改密码、查看订单及查看留言操作。

基于JavaWeb的土特产销售购物商城的设计与实现_第8张图片

4.2 后台管理员端

4.2.1 首页

用户登录成功后进入到后台管理端首页,分为左边菜单栏,顶部信息栏及其主体内容部分。在首页会提示代发货订单信息。

基于JavaWeb的土特产销售购物商城的设计与实现_第9张图片

 4.2.2 商品信息管理

商品信息管理主要包含了增加分类、查看分类、修改删除分类,增加商品信息、查看商品信息、修改删除商品信息。

基于JavaWeb的土特产销售购物商城的设计与实现_第10张图片

基于JavaWeb的土特产销售购物商城的设计与实现_第11张图片

基于JavaWeb的土特产销售购物商城的设计与实现_第12张图片

基于JavaWeb的土特产销售购物商城的设计与实现_第13张图片4.2.3 注册用户管理

 注册用户管理包括用户信息查看、用户信息查看。

基于JavaWeb的土特产销售购物商城的设计与实现_第14张图片

 4.2.4 订单信息管理

订单信息管理包块订单信息管理、查看订单信息。主要能够对其进行查看、发货、删除等操作。

基于JavaWeb的土特产销售购物商城的设计与实现_第15张图片

5.核心代码

public class AdminServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public AdminServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. 
*/ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet.
* * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } /** * The doPost method of the servlet.
* * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(Constant.CONTENTTYPE); request.setCharacterEncoding(Constant.CHARACTERENCODING); String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()); String date2=new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); try{ String method=request.getParameter("method").trim(); ComBean cBean = new ComBean(); HttpSession session = request.getSession(); if(method.equals("one")){//用户登录 String username = request.getParameter("username"); String password = request.getParameter("password"); String str=cBean.getString("select realname from admin where username='"+username+"' and password='"+password+"' "); if(str==null){ request.setAttribute("message", "登录信息错误!"); request.getRequestDispatcher("admin/login.jsp").forward(request, response); } else{ session.setAttribute("user", username); request.getRequestDispatcher("admin/index.jsp").forward(request, response); } } else if(method.equals("uppwd")){//修改密码 String username=(String)session.getAttribute("user"); String oldpwd = request.getParameter("oldpwd"); String newpwd = request.getParameter("newpwd"); String str=cBean.getString("select id from admin where username='"+username+"' and password='"+oldpwd+"'"); if(str==null){ request.setAttribute("message", "原始密码信息错误!"); request.getRequestDispatcher("admin/system/editpwd.jsp").forward(request, response); } else{ int flag=cBean.comUp("update admin set password='"+newpwd+"' where username='"+username+"'"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("admin/system/editpwd.jsp").forward(request, response); } else { request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("admin/system/editpwd.jsp").forward(request, response); } } } else if(method.equals("adminexit")){//退出登录 session.removeAttribute("user"); session.removeAttribute("sf"); request.getRequestDispatcher("index.jsp").forward(request, response); } else if(method.equals("addm")){//增加系统用户 String username = request.getParameter("username"); String password = request.getParameter("password"); String realname = request.getParameter("realname"); String sex = request.getParameter("sex"); String age = request.getParameter("age"); String address = request.getParameter("address"); String tel = request.getParameter("tel"); String str=cBean.getString("select id from admin where username='"+username+"'"); if(str==null){ int flag=cBean.comUp("insert into admin(username,password,realname,sex,age,address,tel,addtime) " + "values('"+username+"','"+password+"','"+realname+"','"+sex+"','"+age+"','"+address+"','"+tel+"','"+date2+"')"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("admin/system/index.jsp").forward(request, response); } else { request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("admin/system/index.jsp").forward(request, response); } } else{ request.setAttribute("message", "该用户名已存在!"); request.getRequestDispatcher("admin/system/index.jsp").forward(request, response); } } else if(method.equals("upm")){//修改系统用户 String id = request.getParameter("id"); String password = request.getParameter("password"); String realname = request.getParameter("realname"); String sex = request.getParameter("sex"); String age = request.getParameter("age"); String address = request.getParameter("address"); String tel = request.getParameter("tel"); int flag=cBean.comUp("update admin set password='"+password+"',realname='"+realname+"',sex='"+sex+"',age='"+age+"'," + "address='"+address+"',tel='"+tel+"' where id='"+id+"'"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("admin/system/index.jsp").forward(request, response); } else { request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("admin/system/index.jsp").forward(request, response); } } else if(method.equals("delm")){//删除系统用户 String id = request.getParameter("id"); int flag=cBean.comUp("delete from admin where id='"+id+"'"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("admin/system/index.jsp").forward(request, response); } else { request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("admin/system/index.jsp").forward(request, response); } } else if(method.equals("upm2")){//修改系统用户 String username=(String)session.getAttribute("user"); String realname = request.getParameter("realname"); String sex = request.getParameter("sex"); String age = request.getParameter("age"); String address = request.getParameter("address"); String tel = request.getParameter("tel"); int flag=cBean.comUp("update admin set realname='"+realname+"',sex='"+sex+"',age='"+age+"'," + "address='"+address+"',tel='"+tel+"' where username='"+username+"'"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("admin/system/index2.jsp").forward(request, response); } else { request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("admin/system/index2.jsp").forward(request, response); } } else{//无参数传入转到错误页面 request.getRequestDispatcher("error.jsp").forward(request, response); } }catch(Exception e){ e.printStackTrace(); request.getRequestDispatcher("error.jsp").forward(request, response); } } /** * Initialization of the servlet.
* * @throws ServletException if an error occure */ public void init() throws ServletException { // Put your code here } } public class MemberServlet extends HttpServlet { /** * Constructor of the object. */ public MemberServlet() { super(); } /** * Destruction of the servlet.
*/ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet.
* * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } /** * The doPost method of the servlet.
* * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(Constant.CONTENTTYPE); request.setCharacterEncoding(Constant.CHARACTERENCODING); HttpSession session = request.getSession(); ComBean cBean = new ComBean(); String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()); String date2=new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); String method = request.getParameter("method"); if(method.equals("mreg")){ //用户注册 String username = request.getParameter("username"); String password = request.getParameter("password"); String realname = request.getParameter("realname"); String sex = request.getParameter("sex"); String age = request.getParameter("age"); String tel = request.getParameter("tel"); String email = request.getParameter("email"); if(username.equals("admin")){ request.setAttribute("message", "非法的用户名!"); request.getRequestDispatcher("reg.jsp").forward(request, response); } else{ String str=cBean.getString("select id from member where username='"+username+"'"); if(str==null){ int flag=cBean.comUp("insert into member(username,password,realname,sex,age,tel,email,regtime) " + "values('"+username+"','"+password+"','"+realname+"','"+sex+"','"+age+"','"+tel+"','"+email+"','"+date2+"')"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "注册成功请登录!"); request.getRequestDispatcher("login.jsp").forward(request, response); } else { request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("reg.jsp").forward(request, response); } } else{ request.setAttribute("message", "该用户名已存在!"); request.getRequestDispatcher("reg.jsp").forward(request, response); } } } else if(method.equals("mupreg")){ //用户修改注册资料 String member=(String)session.getAttribute("member"); String realname = request.getParameter("realname"); String sex = request.getParameter("sex"); String age = request.getParameter("age"); String tel = request.getParameter("tel"); String email = request.getParameter("email"); int flag=cBean.comUp("update member set realname='"+realname+"',sex='"+sex+"',age='"+age+"'," + "tel='"+tel+"',email='"+email+"' where username='"+member+"'"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("member/info/index.jsp").forward(request, response); } else { request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("member/info/index.jsp").forward(request, response); } } else if(method.equals("mlogin")){//用户登录 代码都有注释的哦 String username = request.getParameter("username"); String password = request.getParameter("password"); String str=cBean.getString("select id from member where username='"+username+"' and password='"+password+"' and ifuse='在用'"); if(str==null){ request.setAttribute("message", "登录信息错误!"); request.getRequestDispatcher("login.jsp").forward(request, response); } else{ session.setAttribute("member", username); request.getRequestDispatcher("member/index.jsp").forward(request, response); } } else if(method.equals("lost")){ //丢失密码 String username = request.getParameter("username"); String str=cBean.getString("select id from member where username='"+username+"' and ifuse='在用'"); if(str==null){ request.setAttribute("message", "无此用户或已经被管理员停用!"); request.getRequestDispatcher("login.jsp").forward(request, response); } else{ cBean.comUp("update member set password='111' where username='"+username+"'"); request.setAttribute("message", "新密码为111,请登录后修改!"); request.getRequestDispatcher("index.jsp").forward(request, response); } } else if(method.equals("memberexit")){ //退出登录 session.removeAttribute("member"); request.getRequestDispatcher("index.jsp").forward(request, response); } else if(method.equals("muppwd")){//用户修改密码 String member=(String)session.getAttribute("member"); String oldpwd = request.getParameter("oldpwd"); String newpwd = request.getParameter("newpwd"); String str=cBean.getString("select id from member where username='"+member+"' and password='"+oldpwd+"'"); if(str==null){ request.setAttribute("message", "原始密码信息错误!"); request.getRequestDispatcher("member/info/editpwd.jsp").forward(request, response); } else{ int flag=cBean.comUp("update member set password='"+newpwd+"' where username='"+member+"'"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("member/info/editpwd.jsp").forward(request, response); } else { request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("member/info/editpwd.jsp").forward(request, response); } } } /管理员操作 else if(method.equals("delm")){//删除用户 String id = request.getParameter("id"); int flag=cBean.comUp("delete from member where id='"+id+"'"); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("admin/member/index.jsp").forward(request, response); } else{ request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("admin/member/index.jsp").forward(request, response); } } else if(method.equals("ifusem")){//停用/在用 用户 String id = request.getParameter("id"); String sql=""; String str=cBean.getString("select ifuse from member where id='"+id+"'"); if(str.equals("在用")){ sql="update member set ifuse='停用' where id='"+id+"'"; } else{ sql="update member set ifuse='在用' where id='"+id+"'"; } int flag=cBean.comUp(sql); if(flag == Constant.SUCCESS){ request.setAttribute("message", "操作成功!"); request.getRequestDispatcher("admin/member/index.jsp").forward(request, response); } else{ request.setAttribute("message", "操作失败!"); request.getRequestDispatcher("admin/member/index.jsp").forward(request, response); } } } /** * Initialization of the servlet.
* * @throws ServletException if an error occure */ public void init() throws ServletException { // Put your code here } } public final class Common { 字符串 HTML 转换 public static String turn(String str) { while (str.indexOf("\n") != -1) { str = str.substring(0, str.indexOf("\n")) + "
" + str.substring(str.indexOf("\n") + 1); } while (str.indexOf(" ") != -1) { str = str.substring(0, str.indexOf(" ")) + " " + str.substring(str.indexOf(" ") + 1); } return str; } /返回日期 当前日期传入0 一年之前传入-1 三年后传入3 public static String getDate(int num){ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); c.add(Calendar.YEAR, num); return df.format(c.getTime()); } /数据库输出字符串的过滤 public static String SQLStr(String str){ if(str != null && str.length()>1 && str.substring(0,1).equals("?")){ str = str.substring(1); } if(str == null || str.equals("") || str.equals(" ")){ str = " "; } return str; } /过滤空格 public static String PageStr(String str){ if(str==null || str.trim().equals("") || str.equals(" ")||str.equals("null")){ str = ""; } str = str.trim(); return str; } /格式化日期 public static String formatRZ(String oldDate){ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date Date = new Date(oldDate); return df.format(Date); } 汉化 public static String toChineseAndTrim(String str){ if(str==null){ str=""; } try{ byte b[]=str.getBytes("iso-8859-1"); str=new String(b); str=str.trim(); }catch(Exception e){ e.printStackTrace(); } return str; } } public class DBO { private Connection conn; private Statement stmt; private DataSource ds; public DBO() { } /** 打开数据库 */ public void open() { try { Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost/dg?useUnicode=true&characterEncoding=utf-8","root","root"); stmt=conn.createStatement(); } catch (Exception ex) { System.err.println("打开数据库时出错: " + ex.getMessage()); } } /** 关闭数据库,将连接返还给连接池 */ public void close() { try { // connMgr.freeConnection("java", conn); conn.close(); } catch (SQLException ex) { System.err.println("返还连接池出错: " + ex.getMessage()); } } /** 执行查询 */ public ResultSet executeQuery(String sql) throws SQLException { ResultSet rs = null; rs = stmt.executeQuery(sql); return rs; } /** 执行增删改 */ public int executeUpdate(String sql) throws SQLException { int ret = 0; ret = stmt.executeUpdate(sql); return ret; } /** 将SQL语句加入到批处理 */ public void addBatch(String sql) throws SQLException { stmt.addBatch(sql); } /** 执行批处理 */ public int [] executeBatch() throws SQLException { boolean isAuto=conn.getAutoCommit(); conn.setAutoCommit(false); int [] updateCounts = stmt.executeBatch(); // conn.commit(); // conn.setAutoCommit(isAuto); //conn.setAutoCommit(true); return updateCounts; } public boolean getAutoCommit() throws SQLException { return conn.getAutoCommit(); } public void setAutoCommit(boolean auto) throws SQLException { conn.setAutoCommit(auto); } public void commit() throws SQLException { conn.commit(); // this.close(); } public void rollBack() throws SQLException { conn.rollback(); // this.close(); } }

7.总结

本项目基于JavaWeb技术,采用MVC结构模式,使用了JSP、Servlet等技术,通过html、css等前端技术实现了页面布局。实现了以下功能:

(1)用户注册、登录和会员中心管理。

(2)商品分类和商品搜索功能。

(3)商品加入购物车和下订单功能。

(4)用户查看订单、确认收货、删除订单等功能。

(5)用户可以浏览其他用户发布的商品,并进行评论。

(6)平台管理员可以发布、删除商品、管理用户信息和订单信息等。

在项目中的开发中遇到了以下问题:

(1)权限管理问题:在项目中需要对用户、管理员进行权限区分,需要对不同的权限角色进行相应的操作限制。

(2)产品分类的层级结构问题:在进行产品分类的设计过程中,需要考虑到不同的产品分类具有不同的层级结构,需要对分类进行递归处理。

(3)数据库设计问题:在进行数据库设计时,需要考虑到数据的存储和读取效率问题,以及数据的冗余问题。

在项目实现过程中,通过查阅资料,技术学习,沉浸式解决BUG,自己在编码方便有了一定水平提高,在一定程度上实现了项目的开发和完成。

喜欢的可以点赞收藏加关注私信作者沟通交流

你可能感兴趣的:(java,servlet,开发语言)