最近在学ssm框架,但感觉难度越来越大,学习效率直线下滑。想来还是要做点什么,
于是把以前写的小项目整理一下,也当是温故知新。
简单的jsp加上servlet对单表进行增删改查
用到的软件:MySQL、eclipse、tomcat9.0、
我这里用的是MySQL8.0,其他版本的驱动与url可能与我不同
…项目目录表…
架包
jstl-1.2.jar(自行下载)
mysql-connector-java-8.0.11.jar
1.建表
CREATE TABLE flower2
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(50) NOT NULL,
price
varchar(50) NOT NULL,
production
varchar(50) NOT NULL,
PRIMARY KEY (id
)
)
2.dao层
连接数据库:
package com.lj.dao;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnection {
private static String driver="com.mysql.cj.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/firstsql?characterEncoding=utf-8&&userUnicode=true&&serverTimezone=GMT&&useSSL=false";
private static String username="root";
private static String password="2437813357";
private Connection connection=null;
public Connection getConnection() {
if(connection==null) {
try {
Class.forName(driver);
connection=DriverManager.getConnection(url,username,password);
}catch(Exception e) {
e.printStackTrace();
System.out.println("未找到驱动");
}
}
return connection;
}
}
package com.lj.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.lj.pojo.*;
public class Dao{
//对数据库的增删改查
DBConnection dbConnection=new DBConnection();
Connection connection=dbConnection.getConnection();
PreparedStatement ptmt=null;
ResultSet rs=null;
//增加数据
public int addAdmin(Flower flower){
int index=0;
try{
//添加命令
String sql="insert into flower2 values(default,?,?,?)";
ptmt=connection.prepareStatement(sql);
ptmt.setObject(1,flower.getName());
ptmt.setObject(2,flower.getPrice());
ptmt.setObject(3,flower.getProduction());
index=ptmt.executeUpdate();
}catch (SQLException e) {
e.printStackTrace();
}
return index;
}
//删除数据
public int deleteFlower(int id) {
int index = 0;
try {
String sql="delete from flower2 where id=?";
ptmt =connection.prepareStatement(sql);
ptmt.setInt(1, id);
index=ptmt.executeUpdate();
ptmt.close();
//System.out.println("语句执行成功");
}catch(SQLException e) {
e.printStackTrace();
}
return index;
}
//修改数据
public int updateFlower(Flower flower) {
int index=0;
try {
//wdnmd,打了个中文的?,wc??????
//Parameter index out of range (3 > number of parameters, which is 2)
String sql="update flower2 set name=?,price=?,production=? where id=?";
ptmt=connection.prepareStatement(sql);
ptmt.setString(1,flower.getName());
ptmt.setDouble(2,flower.getPrice());
ptmt.setString(3,flower.getProduction());
ptmt.setInt(4,flower.getId());
index=ptmt.executeUpdate();
ptmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
//System.out.println(flower);
return index;
}
//通过id查找数据
public Flower selectFlower(int id) {
Flower flower=new Flower();
try {
String sql="select * from flower2 where id=?";
ptmt=connection.prepareStatement(sql);
ptmt.setInt(1, id);
rs=ptmt.executeQuery();
while(rs.next()) {
flower.setId(rs.getInt("id"));
flower.setName(rs.getString("name"));
flower.setPrice(rs.getDouble("price"));
flower.setProduction(rs.getString("production"));
//System.out.println(flower);
}
rs.close();
ptmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
return flower;
}
//web分页,主要是与sql语句后的两个数据进行操作来分段显示数据
public List<Flower> selPageFlower(int pageStart,int pageSize) {
List<Flower> list=new ArrayList<>();
try {
//从第几个开始往后拿多少个数据
String sql="select * from flower2 limit ?,?";
ptmt=connection.prepareStatement(sql);
ptmt.setInt(1,pageStart);
ptmt.setInt(2, pageSize);
rs=ptmt.executeQuery();
while(rs.next()) {
list.add(new Flower(rs.getInt(1),rs.getString(2),rs.getDouble(3),rs.getString(4)));
}
ptmt.close();
rs.close();
}catch(Exception e) {
e.printStackTrace();
}
return list;
}
//计算表中有多少行,与分页有关
public int getLine() throws Exception{
int line=0;
String sql="select count(*) totalRows from flower2";
ptmt=connection.prepareStatement(sql);
rs=ptmt.executeQuery();
while(rs.next()) {
line=rs.getInt("totalRows");
}
return line;
}
}
对表的操作都在dao层
3.实体层
Flower类:
package com.lj.pojo;
public class Flower {
private int id;
private String name;
private double price;
private String production;
public Flower(int id, String name, double price, String production) {
super();
this.id = id;
this.name = name;
this.price = price;
this.production = production;
}
public Flower() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getProduction() {
return production;
}
public void setProduction(String production) {
this.production = production;
}
}
PageInfo类,用来进行web分页操作:
package com.lj.pojo;
import java.util.List;
public class PageInfo {
private int pageSize;//每页数据的多少
private int pageNumber;//这是第几页
private double total;//总页数
private List<?> list;//每页的数据
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public List<?> getList() {
return list;
}
public void setList(List<?> list) {
this.list = list;
}
}
4.业务层
package com.lj.service;
import java.sql.SQLException;
import com.lj.dao.Dao;
import com.lj.pojo.Flower;
import com.lj.pojo.PageInfo;
public class FlowerService {
Dao dao=new Dao();
//增加花卉
public int addFlowerService(Flower flower) throws SQLException {
return dao.addAdmin(flower);
}
//删除花卉
public int delFlowerService(int id) {
return dao.deleteFlower(id);
}
//修改花卉
public int updFlowerService(Flower flower) {
return dao.updateFlower(flower);
}
//通过查找id来方便修改花卉
public Flower selFlowerService(int id) {
return dao.selectFlower(id);
}
public PageInfo showPageService(int pageNumber,int pageSize) throws Exception {
PageInfo pageInfo=new PageInfo();
pageInfo.setPageNumber(pageNumber);
pageInfo.setPageSize(pageSize);
//每一页的第一个数据
int everyPageStart=pageSize*(pageNumber-1);
int count=dao.getLine();//总行数
//总页数
int total=count%pageSize==0?count/pageSize:count/pageSize+1;
pageInfo.setTotal(total);
pageInfo.setList(dao.selPageFlower(everyPageStart, pageSize));
//System.out.println(pageInfo.getTotal());
return pageInfo;
}
}
5.servlet
AddFlowerServlet:
import java.io.IOException;
import java.sql.SQLException;
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 com.lj.pojo.Flower;
import com.lj.service.FlowerService;
/**
* Servlet implementation class AddFlowerServlet
*/
@WebServlet("/AddFlowerServlet")
public class AddFlowerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
FlowerService flowerService=new FlowerService();
private int index;
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String name=req.getParameter("name");
String price=req.getParameter("price");
String production=req.getParameter("production");
//创建一个flower对象存放数据
Flower flower=new Flower();
flower.setName(name);
flower.setPrice(Double.parseDouble(price));
flower.setProduction(production);
//调用业务层方法(将数据传入方法中)
try {
index = flowerService.addFlowerService(flower);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(index>0) {
//防止表单重复提交
resp.sendRedirect("ShowPage");
//请求转发
//req.getRequestDispatcher("ShowPage").forward(req, resp);
}
//System.out.println(index);
}
}
DelFlowerServlet:
package com.lj.servlet;
import java.io.IOException;
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 com.lj.service.FlowerService;
/**
* Servlet implementation class DelFlowerServlet
*/
@WebServlet("/DelFlower")
public class DelFlowerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
FlowerService flowerService=new FlowerService();
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String id0=req.getParameter("id");
int id=Integer.parseInt(id0);
try {
flowerService.delFlowerService(id);
}catch(Exception e) {
e.printStackTrace();
}
req.getRequestDispatcher("ShowPage").forward(req,resp);
}
}
SelFlowerServlet:
package com.lj.servlet;
import java.io.IOException;
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 com.lj.pojo.Flower;
import com.lj.service.FlowerService;
/**
* Servlet implementation class SelFlowerServlet
*/
@WebServlet("/SelFlowerServlet")
public class SelFlowerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
FlowerService flowerService=new FlowerService();
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String idString=req.getParameter("id");
int id0=Integer.parseInt(idString);
Flower flower0=flowerService.selFlowerService(id0);
req.setAttribute("flower0",flower0);
req.getRequestDispatcher("UpdFlower.jsp").forward(req, resp);
}
}
ShowPageServlet(这里开始运行,拿到数据):
package com.lj.servlet;
import java.io.IOException;
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 com.lj.pojo.PageInfo;
import com.lj.service.FlowerService;
@WebServlet("/ShowPage")
public class ShowPageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private FlowerService flowerService=new FlowerService();
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String strPageNumber=req.getParameter("pageNumber");
//初始页
//System.out.println(strPageNumber);
int pageNumber=1;
if(strPageNumber!=null&&!strPageNumber.equals("")) {
pageNumber=Integer.parseInt(strPageNumber);
}
//System.out.println(pageNumber);
String strPageSize=req.getParameter("pageSize");
//页面数据条数
int pageSize=3;
if(strPageSize!=null&&!strPageSize.equals("")) {
pageSize=Integer.parseInt(strPageSize);
}
PageInfo pageInfo=null;
try {
pageInfo = flowerService.showPageService(pageNumber, pageSize);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println(pageInfo.getTotal());
req.setAttribute("pageInfo000", pageInfo);
req.getRequestDispatcher("ShowPageFlower.jsp").forward(req, resp);
}
}
UpdFlowerServlet:
package com.lj.servlet;
import java.io.IOException;
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 com.lj.pojo.Flower;
import com.lj.service.FlowerService;
/**
* Servlet implementation class UpdFlowerServlet
*/
@WebServlet("/UpdFlowerServlet")
public class UpdFlowerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
FlowerService flowerService=new FlowerService();
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String id= req.getParameter("id");
String name=req.getParameter("name");
String price=req.getParameter("price");
String production=req.getParameter("production");
Flower flower=new Flower();
flower.setId(Integer.parseInt(id));
flower.setName(name);
flower.setPrice(Double.valueOf(price));
flower.setProduction(production);
flowerService.updFlowerService(flower);
req.getRequestDispatcher("ShowPage").forward(req, resp);
}
}
7.jsp视图
AddFlower.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>添加花卉</title>
</head>
<body>
<script type="text/javascript">
function test(){
var name=document.getElementById("name").value;
var price=document.getElementById("price").value;
var production=document.getElementById("production").value;
if(name==null||name==''){
alert("姓名不能为空!!");
return false;
}else if(price==null||price==''){
alert("价格不能为空!!");
return false;
}else if(production==null||production==''){
alert("地址不能为空!!");
return false;
}
}
</script>
<form action="AddFlowerServlet" method="get" onsubmit="return test()">
<table align="center" cellspacing="0">
<tr>
<td>名称</td>
<td><input id="name" type="text" name="name"></td>
</tr>
<tr>
<td>价格</td>
<td><input id="price" type="text" name="price"></td>
</tr>
<tr>
<td>产地</td>
<td><input id="production" type="text" name="production"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="提交">
<input type="reset" value="重置">
<input type="reset" value="返回" onclick="history.go(-1)">
</td>
</tr>
</table>
</form>
</body>
</html>
ShowPageFlower.jsp:
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@page import="com.lj.pojo.Flower"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>展示花卉</title>
<link rel="stylesheet" href="css/style.css" type="text/css">
<style type="text/css">
a{
text-decoration:none;
}
</style>
</head>
<body>
<!-- 因为直接从ShowFlower.jsp运行,没有运行ShowServlet,就无法拿到数据,从ShowServlet运行可以跳转到ShowFlower.jsp
从而显示界面
-->
<table border="1" align="center" cellspacing="0">
<tr>
<th>编号</th>
<th>名称</th>
<th>价格</th>
<th>产地</th>
<th>操作</th>
</tr>
<c:forEach items="${pageInfo000.list }" var="pi">
<tr>
<td>${pi.id }</td>
<td>${pi.name }</td>
<td>${pi.price }</td>
<td>${pi.production }</td>
<td>
<!-- a标签相当于重定向,只传递id-->
<a href="DelFlower?id=${pi.id }" onclick="javascript:return confirm('确认删除吗?');">删除</a>
<a href="SelFlowerServlet?id=${pi.id }">修改</a></td>
</tr>
</c:forEach>
<tr>
<td colspan="5" align="center">
<a href="AddFlower.jsp" class="showhref">添加花卉信息</a>
</td>
</tr>
<tr>
<td colspan="5" align="center">
<a href="ShowPage?pageNumber=${pageInfo000.pageNumber-1}&pageSize=${pageInfo000.pageSize}"
<c:if test="${pageInfo000.pageNumber<=1 }"> onclick="javascript:return false;"</c:if>>上一页
</a>
<a href="ShowPage?pageNumber=${pageInfo000.pageNumber+1}&pageSize=${pageInfo000.pageSize}"
<c:if test="${pageInfo000.pageNumber>=pageInfo000.total}"> onclick="javascript:return false;"</c:if>>下一页
</a>
</td>
</tr>
</table>
</body>
</html>
UpdFlower.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改</title>
</head>
<body>
<form action="UpdFlowerServlet" method="post">
<table border="1" align="center" cellspacing="0">
<tr>
<td>编号</td>
<td>
<input type="text" name="id" value="${flower0.id }" readonly="readonly">
</td>
</tr>
<tr>
<td>名称</td>
<td>
<input type="text" name="name" value="${flower0.name }">
</td>
</tr>
<tr>
<td>价格</td>
<td>
<input type="text" name="price" value="${flower0.price }">
</td>
</tr>
<tr>
<td>产地</td>
<td>
<input type="text" name="production" value="${flower0.production }">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="" value="确认">
<input type="button" name="" value="返回" onclick="history.go(-1)">
</td>
</tr>
</table>
</form>
</body>
</html>
8.css(其实没写什么)
@charset "UTF-8";
a{
font-size:20px;
align:center;
}
由于是web3.0,所以没有在web.xml中对servlet进行配置
效果:
ok,完工!!!