这个项目主要是加深一下对于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)的更多相关文章

  1. 基于jsp+servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  2. 基于jsp+servlet图书管理系统之后台用户信息删除操作

    上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库! 此次删除操作的源码和数据库:http://download.csdn.net/de ...

  3. 基于jsp+servlet图书管理系统之后台用户信息插入操作

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  4. 基于JSP+Servlet开发手机销售购物商城系统(前台+后台)源码

    基于JSP+Servlet开发手机销售购物商城系统(前台+后台) 开发环境: Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MySQL数据库 运行效果图: ...

  5. 基于JSP+SERVLET的新闻发布系统(一)

    本系统使用的是基于JSP+SERVLET+TOMCAT6 数据库使用的是MYSQL IDE是MYECLIPSE8.5,页面编辑使用的是百度的ueditor,比较适合咱国人 采用MVC模式,使用的关键技 ...

  6. 基于JSP+Servlet开发高校社团管理系统(前台+后台) 源码

    基于JSP+Servlet开发高校社团管理系统(前台+后台): 开发环境:    Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat+MYSQL数据库 运行效果 ...

  7. 基于jsp+servlet图书管理系统之后台用户信息修改操作

    上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的是修改操作,附有从头至尾写的代码(详细的注释)和数据库! 此次修改操作的源码和数据库:http://download.csdn.net/de ...

  8. 基于jsp+servlet图书管理系统之后台用户信息查询操作

    上一篇的博客写的是插入操作,且附有源码和数据库,这篇博客写的是查询操作,附有从头至尾写的代码(详细的注释)和数据库! 此次查询操作的源码和数据库:http://download.csdn.net/de ...

  9. 基于JSP+Servlet的学生信息管理系统

    JavaWeb期末项目,一个基于JSP和Servlet的学生信息管理系统实现,前端用了bootstrap和一些自定义的css样式,数据库用了mysql 传送门: GitHub 实现功能 登录(教师, ...

随机推荐

  1. instrrev 和instr 区别vb

    Private Sub Form_click() Dim temp As String temp = "c:\window\system" Print Mid(temp, InSt ...

  2. 记录一下自己搭建springboot+mybatis+druid 多数据源的过程

    前言  上次的一个项目(springboot+mybatis+vue),做到后面的时间发现需要用到多数据源.当时没有思路..后来直接用了jdbc来实现.这几天不是很忙,所以决定自己再搭建一次.不多说, ...

  3. axios 请求中的Form Data 与 Request Payload的区别

    在vue项目中使用axios发post请求时候,后台返回500. 发现是form Data 和 Request payload的问题. 后台对两者的处理方式不同,导致我们接收不到数据. 解决方案:使用 ...

  4. next.config.js

    const configs = { // 编译文件的输出目录 distDir: 'dest', // 是否给每个路由生成Etag generateEtags: true, // 页面内容缓存配置 on ...

  5. Logarithmic-Trigonometric积分系列(二)

    \[\Large\displaystyle \int_0^{\pi/2}\ln^2(\sin x)\ln(\cos x)\tan x \,{\rm d}x\] \(\Large\mathbf{Solu ...

  6. NAT ALG原理与应用

    1  NAT ALG简介 普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323.SIP等).FTP.S ...

  7. 寒假安卓app开发学习记录(3)

    今天终于开始正式的安卓软件开发学习.开始用了大约一个小时的时间把创建第一个软件的学习视频观看了一下.跟着视频一边学习一边操作. 首先是创建项目,创建的过程和之前创建Java项目的过程相似.先给app起 ...

  8. Git - Windows 下, gitbash 打开资源管理器

    1. 概述 windows 下 gitbash 打开 资源管理器 2. 场景 资源管理唤起 gitbash 步骤 进入目录 鼠标右击 在 弹出菜单 中, 找到 Git Bash Here 结果 打开一 ...

  9. 每天进步一点点------Altium Designer PCB设计规则中英对照

    Electrical(电气规则) Clearance:安全间距规则 Short Circuit:短路规则 UnRouted Net:未布线网络规则 UnConnected Pin:未连线引脚规则 Ro ...

  10. Visual Studio Code打不开

    1.win+R 2.输入cmd 3.输入netsh winsock reset然后就可以打开了,如果依然打不开就重启电脑试试