图书商城(基于Jsp+Servlet)
这个项目主要是加深一下对于servlet和jsp知识相关的了解以及简单业务逻辑的处理。
用户更新的逻辑:
1.点击修改用户的那一行可以获取到用户的id
2.跳转到一个servlet,去查询该用户的基本信息
3.查询到后去到一个回显用户修改之前的基本信息的页面
4.用户点击修改完成,跳转一个servlet中去获取修改信息
5.信息修改格式是否正确去调用一个服务层的方法
6.正确到用户列表那一栏,错误到用户修改界面。

分页的实现:
/**
* 查询所有用户
* @return
*/
public static List<User> selAllUser(int pageNow,int showNum,String keyword) {
Connection conn=null;
PreparedStatement pstm=null;
List<User> users = new ArrayList<>();
//声明结果集
ResultSet rs = null;
//获取连接对象
try {
conn = BaseDao.getConn();
String sql="";
if(keyword!=null){
sql="select * from user where USERNAME like ? order by USERBIRTHDAY limit ?,?";
pstm=conn.prepareStatement(sql);
pstm.setString(1,"%"+keyword+"%");
//(当前页数-1)*一页要展示多少条记录(当前页最开始的下标)
pstm.setInt(2,(pageNow-1)*showNum);
pstm.setInt(3,showNum);
}else{
sql="select * from user order by USERBIRTHDAY limit ?,?";
pstm=conn.prepareStatement(sql);
pstm.setInt(1,(pageNow-1)*showNum);
pstm.setInt(2,showNum);
} rs=pstm.executeQuery();
while(rs.next()){
User user = new User(
rs.getString("USERID"),
rs.getString("USERNAME"),
rs.getString("USERPASSWORD"),
rs.getString("USERSEX"),
rs.getString("USERBIRTHDAY"),
rs.getString("USERIDENITYCODE"),
rs.getString("USEREMAIL"),
rs.getString("USERMOBILE"),
rs.getString("USERADDRESS"),
rs.getInt("USERSTATUS")
);
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeall(rs,pstm,conn);
} return users;
}
/**
* arr[0]表示总记录条数、arr[1]表示总页数
* @param showNum
* @return arr
*/
public static int[] totalPage(int showNum,String keyword){ int []arr = {0,0};
Connection conn = null;
PreparedStatement pstm=null;
ResultSet rs=null; try {
conn=BaseDao.getConn();
String sql="";
if(keyword!=null){
sql = "select count(*) from user where USERNAME like ?";
pstm = conn.prepareStatement(sql);
pstm.setString(1, "%"+keyword+"%");
}else{
sql="select count(*) from user";
pstm=conn.prepareStatement(sql);
} rs=pstm.executeQuery();
while(rs.next()){
arr[0]=rs.getInt(1);
if(arr[0]%showNum==0){
arr[1]=arr[0]/showNum;
}else{
arr[1]=(arr[0]/showNum)+1;
}
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeall(rs,pstm,conn);
} return arr; }
文件上传部分代码:
package com.zyb.servlet.product; import com.jspsmart.upload.*;
import com.zyb.pojo.product;
import com.zyb.service.ProductService; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer; @WebServlet("/manage/admin_doproductadd")
public class DoProductAdd extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建Smartupload对象
SmartUpload smartUpload = new SmartUpload();
//初始化
smartUpload.initialize(this.getServletConfig(),request,response);
//上传过程
try {
smartUpload.upload();
} catch (SmartUploadException e) {
e.printStackTrace();
}
//获取上传文件对象
Files files=smartUpload.getFiles();
//获取第一个
File file=files.getFile(0); //获取上传文件名
String fileName=file.getFileName();
System.out.println(fileName); try {
smartUpload.save("images/product");
} catch (SmartUploadException e) {
e.printStackTrace();
}
//获取上传的请求对象
Request req=smartUpload.getRequest(); String name=req.getParameter("productName");
//name=new String(name.getBytes("gbk"),"gbk");
String id=req.getParameter("parentId");
String price=req.getParameter("productPrice");
String desc=req.getParameter("productDesc");
//desc=new String(desc.getBytes("gbk"),"utf-8");
String stock=req.getParameter("productStock"); System.out.println("产品名称"+name);
product p = new product(
0,
name,
desc,
Integer.parseInt(price),
Integer.parseInt(stock),
Integer.parseInt(id.split("-")[0] ),
Integer.parseInt(id.split("-")[1] ),
fileName
);
Writer out=response.getWriter();
int mark = ProductService.insertProduct(p);
if(mark>0){
out.write("<script>");
out.write("alert('添加成功');");
out.write("location.href='admin_productsel';");
out.write("</script>");
out.close();
}else{
out.write("<script>");
out.write("alert('添加失败');");
out.write("location.href='admin_doproductadd';");
out.write("</script>");
out.close();
}
} }
Dao层对jdbc的简单封装:
package com.zyb.dao;
import java.sql.*;
public class BaseDao {
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConn() throws SQLException {
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/shop?useSSL=false&serverTimezone=UTC","root","root");
return conn;
}
public static int exeCRUD(String sql,Object []params){
int cnt=0;
PreparedStatement pstm=null;
Connection conn = null;
try {
conn= BaseDao.getConn();
pstm = conn.prepareStatement(sql);
for(int i=0; i<params.length; i++) {
pstm.setObject(i+1, params[i]);
}
cnt = pstm.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
BaseDao.closeall(null, pstm, conn);
}
return cnt;
}
public static void closeall(ResultSet rs, PreparedStatement ps, Connection conn) {
try {
if(rs!=null)
rs.close();
if(ps!=null)
ps.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二级目录实现:
Category结构:
分类id 分类名 分类的父id

(注意如果是以及目录它的父id就是0)
产品结构:

大概思想就是一个双重循环,如果当前分类的父id==上层循环的id,就将该分类作为外面循环分类的子分类。
项目结构:

项目相关截图:
前台展示:

前台结算界面:


后台图书管理界面:

后台账号管理界面:

二级目录界面:

图书商城(基于Jsp+Servlet)的更多相关文章
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- 基于jsp+servlet图书管理系统之后台用户信息删除操作
上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库! 此次删除操作的源码和数据库:http://download.csdn.net/de ...
- 基于jsp+servlet图书管理系统之后台用户信息插入操作
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- 基于JSP+Servlet开发手机销售购物商城系统(前台+后台)源码
基于JSP+Servlet开发手机销售购物商城系统(前台+后台) 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MySQL数据库 运行效果图: ...
- 基于JSP+SERVLET的新闻发布系统(一)
本系统使用的是基于JSP+SERVLET+TOMCAT6 数据库使用的是MYSQL IDE是MYECLIPSE8.5,页面编辑使用的是百度的ueditor,比较适合咱国人 采用MVC模式,使用的关键技 ...
- 基于JSP+Servlet开发高校社团管理系统(前台+后台) 源码
基于JSP+Servlet开发高校社团管理系统(前台+后台): 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MYSQL数据库 运行效果 ...
- 基于jsp+servlet图书管理系统之后台用户信息修改操作
上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的是修改操作,附有从头至尾写的代码(详细的注释)和数据库! 此次修改操作的源码和数据库:http://download.csdn.net/de ...
- 基于jsp+servlet图书管理系统之后台用户信息查询操作
上一篇的博客写的是插入操作,且附有源码和数据库,这篇博客写的是查询操作,附有从头至尾写的代码(详细的注释)和数据库! 此次查询操作的源码和数据库:http://download.csdn.net/de ...
- 基于JSP+Servlet的学生信息管理系统
JavaWeb期末项目,一个基于JSP和Servlet的学生信息管理系统实现,前端用了bootstrap和一些自定义的css样式,数据库用了mysql 传送门: GitHub 实现功能 登录(教师, ...
随机推荐
- 利用ansible-playbook一键部署ELK(ElasticSearch,logstash and kibana)
一.部署前环境介绍: es集群5台(es01,es02,es03,es04,es05),logstash服务器1台(logstash2),kibana服务器1台(kibana2),模拟apache服务 ...
- VMware 搭建linux虚拟机环境
1.任务管理器-服务 确认VMware服务是否启动 2.VMware生成网关地址 编辑--虚拟网络编辑器 VMnet8 NAT设置子网IP,子网掩码,网关 3.windows网络--更改适配器设置-- ...
- C# 将DataGridView中显示的数据导出到Excel(.xls和.xlsx格式)—NPOI
前言 https://blog.csdn.net/IT_xiao_guang_guang/article/details/104217491 本地数据库表中有46785条数据,测试正常 初次运行程 ...
- Flask的基本使用
最基本的一个Flask模板,实现本地9898端口访问,页面返回hello world from flask import Flask app = Flask(__name__) @app.route( ...
- 谁说程序员没有时间关心女朋友的,Python 教你如何掌握女神情绪变化
很多人都是在朋友圈装死,微博上蹦迪.微信朋友圈已经不是一个可以随意发表心情的地方了,微博才是! 所以你不要傻傻盯着女神的朋友圈发呆啦!本文教你如何用 Python 自动通知女神微博情绪变化,从今天开始 ...
- stm32控制步进电机加减速
实习公司项目需要控制步进电机,电机方面主要包括控制运动.加减速.限位.下面介绍一下在电机控制方面的心得,由于对于电机的控制不需要很精确,并且自身能力有限,相比于大牛有很大的差距. 1.需要实现的功能 ...
- Django框架之ORM常用字段
一.ORM介绍 1.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过 ...
- opencv:绘制图像直方图
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- go语言下载及安装
go语言下载地址:https://studygolang.com/dl 在cmd输入go 如果显示这样,说明安装成功 go env -w GOPROXY=https://goproxy.cn,dire ...
- 在ubuntu永久添加alias
1. cd 进入家目录 操作如下: cd ~ 2.显示隐藏文件 操作如下:ls -al 3.vim打开.bashrc 操作如下: vim .bashrc 4.按a编辑添加alias example=' ...