图书商城(基于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 实现功能 登录(教师, ...
随机推荐
- 爬虫(十一):selenium爬虫
1. selenium基础 selenium部分可以去看我写的selenium基础部分,由于链接太多了这里就不发出来了. 代理ip: 有时候频繁爬取一些网页.服务器发现你是爬虫后会封掉你的ip地址.这 ...
- Windows10_64位搭建WampServer(运行php代码)教程及问题
Windows10_64位搭建WampServer(运行php代码)教程及问题 笔者最近学习PHP,想通过web页面的形式更加形象生动的了解php代码的原理. 于是,这次就通过WampS ...
- 概率dp poj 3071
题目首先给出一个n,表示比赛一共进行n轮,那么队伍就有2^n只队伍输入一个2^n*2^n的矩阵,p[i][j]代表队伍i打败队伍j的概率dp[i][j]代表第i轮比赛的时候,队伍j赢的概率首先初始化时 ...
- 第一struts2程序
今天学习了第一个struts2程序 第一步建立一个java web程序 第二步 加入jar包 第三步 添加两个jsp文件 login.jsp和result.jsp文件 login.jsp 在body部 ...
- Go性能调优
文章引用自 Go性能调优 在计算机性能调试领域里,profiling 是指对应用程序的画像,画像就是应用程序使用 CPU 和内存的情况. Go语言是一个对性能特别看重的语言,因此语言中自带了 pr ...
- docker 报错 docker: Error response from daemon: driver failed....iptables failed:
现象: [root@localhost test]# docker run --name postgres1 -e POSTGRES_PASSWORD=password -p : -d postgre ...
- 【资源分享】Gmod-Expression2 - 自定义像素画生成
*作者:BUI* 可自定义制作属于你的像素画(默认为Sans) 第77行的COLOR可编辑你想要的颜色(RGB值) 1,2,3,4分别代表第77行所定义的颜色(0代表不显示) 视频地址:传送链接 @n ...
- Java开发中使用模拟接口moco响应中文时乱码
场景 在开发中需要依赖一些接口,比如需要请求一个返回Json数据的接口,但是返回Json数据的接口要么是没搭建,要么是交互比较复杂. 此时,就可以使用moco来模拟接口返回接口数据,以便开发和测试工作 ...
- casperJs的安装
自己买了vps就是爽,想装什么就装什么.就比如说casperjs 1.首先需要安装它的运行环境phantomjs *将这个git项目clone到自己的vps上[https://github.com/a ...
- 微软停止支持Windows 7 数百万台电脑将面临病毒等风险
导读 微软给出的公告称,从2020年开始停止支持Windows 7操作系统,这意味着该公司不会再向数百万台电脑发布任何软件更新,包括可以防止网络攻击的软件补丁. 微软给出的公告称,从2020年开始停止 ...