这个项目主要是加深一下对于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. MyBatis(7)——使用注解开发

    说明:注解就是利用接口实现的,因此转为面向接口编程,使用接口开发拓展性好.分层开发时上层不用管理具体的实现.更加标准化更加规范.使得各个层的耦合度更低. 注:有了注释语句就不需要实体类的mapper文 ...

  2. ColorPix——到目前为止最好用的屏幕取色器

    分享一个颜色取色器网页.PPT.EXCEL配色不再烦恼 简单易用 大家做商业.企业报告的时候是不是经常遇到要调色的困扰呢?PPT.EXCEL等颜色选取会对报告有质的影响!!要更专业要更有美感!给大家分 ...

  3. 忘记win8开机密码的清除方法

    1.进PE 2.打开计算机,进入 C:\Windows\System32 目录下 3.找到 magnify.exe 改名为 mangify1.exe .将 cmd.exe 改名为 magnify.ex ...

  4. Tarjan-SCC-NOIP2015message

    This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://ww ...

  5. 生成树计数 UVA 10766

    //本题题意:首先每个点之间都可达,然后m列举出不可达的,求出最多的生成树方案: //k这个变量是没用的. //公式:ans矩阵=度矩阵-建边矩阵: //度矩阵是当i==j时的,建边矩阵于平时定义可达 ...

  6. Stylus-import

    Stylus Import Disclaimer: In all places the @import is used with Stylus sheets, the @require could b ...

  7. MyBatis-Spring整合之方式1

    导入相关包:Spring包:Spring架包 MyBatis包:MyBatis架包 整合包:Mybatis-Spring整合包 编写实体类User,实体类的sql映射文件,映射内容如下: <?x ...

  8. django+vue 基础框架 :vue

    <template> <div> <p>用户名:<input type="text" v-model="name"&g ...

  9. animate使用方法

    链接:https://www.cnblogs.com/xiaohuochai/p/7372665.html

  10. Android学习08

    PopupWindow PopupWindow用来实现一个弹出框,可以使用任意布局的View作为其内容,这个弹出框是悬浮在当前activity之上的. 1.弹出框的布局:画一个PopupWindow的 ...