array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 JavaWeb案例(MVC+MySQL+分页功能)+前后端分离 - 爱码网
liaoyuanping-24

具备的测试工具:Eclipse,MySQL数据库,HBuilder,jstl1.2jar,mysql.connector.java.8.0.jar

 

jstl1.2jar下载地址:https://pan.baidu.com/s/1T23zxoEg3jlZHFikrbWtHw

 

mysql.connector.java.8.0.jar包下载地址:https://pan.baidu.com/s/1kqfOuxo3nOT--CTrlp1BmA

 

首先打开Eclipse创建一个动态Web项目(Dynamic Web Project),在Src下分别创建以下包

其中web其实就是对应action层,这就是典型的MVC模型,这是属于后端

首先创建与你数据库的表结构对应的实体类

1、我的数据库结构如下

建立数据库
create database LoveDB;

建立数据表LoveInHeart
use LoveDB;
create table LoveInHeart(
lid int auto_increment primary key,
lname varchar(50) not null,
lsex varchar(50) not null,
ltime date not null,
lmoney float
);

然后可以向里面添加一些测试数据

insert into LoveInHeart(lname,lsex,ltime,lmoney)
values (\'张三\',\'男\',\'1999-02-15\',1000000);

insert into LoveInHeart(lname,lsex,ltime,lmoney)
values (\'李四\',\'女\',\'1998-8-19\',1000);

insert into LoveInHeart(lname,lsex,ltime,lmoney)
values (\'科比\',\'男\',\'2008-05-05\',100);

然后实体类的属性参数要和数据库的表结构保持一致,注:实体类是放在entity包下

 声明变量以后进行封装,右键选择 source --> Getter and Setter ,然后select All 点击完成

 接下来创建与数据库链接的DatabaseConnection类来完成与数据库的交互,在dao包下新建一个类,名字为:BaseDB

package com.nf.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BaseDao {

    private static final String DRIVER_CLASS = "com.mysql.cj.jdbc.Driver";
    private static final String SERVER_IP = "localhost";// 服务器IP地址
    private static final String DATABASE_NAME = "lovedb";// 连接到哪一个数据库
    private static final String USER_NAME = "root";// 用户名
    private static final String PASSWORD = "123456";// 密码

    public Connection getConnection() {
        Connection conn = null;
        String jdbcUrl = "jdbc:mysql://" + SERVER_IP + ":3306/" + DATABASE_NAME
                + "?serverTimezone=Asia/Shanghai&useSSL=true";
        try {
            Class.forName(DRIVER_CLASS);
            conn = DriverManager.getConnection(jdbcUrl, USER_NAME, PASSWORD);
        } catch (Exception e) {
            System.out.println("获取连接时,异常" + e.getMessage());
            conn = null;
        }
        return conn;
    }

    public void closeAll(Connection conn, PreparedStatement pst, ResultSet rs) {

        try {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

在dao层下面创建一个Interface类,声明三个方法(查询、添加、删除),名字:LoveInHeartDao

package com.nf.dao;

import java.util.List;
import com.nf.entity.LoveInHeart;
import com.nf.util.MyPage;

public interface LoveInHeartDao{
    
    public List<LoveInHeart> getAll(MyPage myPage);
    public boolean add(LoveInHeart love);
    public boolean delete(int id);
    
}

然后创建一个实现接口class类(Implments),名字:LoveInHeart_Impl

package com.nf.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.nf.entity.LoveInHeart;
import com.nf.util.MyPage;

public class LoveInHeartDaoImpl extends BaseDao implements LoveInHeartDao {

    @Override  //查询
    public List<LoveInHeart> getAll(MyPage myPage) {
        // 操作数据库,需要一个连接Connection
        Connection connection = getConnection();
        PreparedStatement prepareStatement = null;
        ResultSet resultSet = null;
        List<LoveInHeart> loveInHeartList = new ArrayList();
             
        String sql_data = "select * from loveinheart order by lid desc ";
        String sql_recodeCount = "select count(1) as mycount from loveinheart";
        
        sql_data += "limit ";
        sql_data += (myPage.getCurrentPage()-1)*myPage.getPerPageSize();
        sql_data += ",";
        sql_data += myPage.getPerPageSize();
        
        System.out.println("分页的SQL:"+sql_data);
        
        try {
            
            prepareStatement = connection.prepareStatement(sql_data);
            resultSet = prepareStatement.executeQuery();
            while (resultSet.next()) {
                LoveInHeart l = new LoveInHeart();
                l.setLid(resultSet.getInt("lid"));
                l.setLname(resultSet.getString("lname"));
                l.setLsex(resultSet.getString("lsex"));
                l.setLtime(resultSet.getDate("ltime"));
                l.setLmoney(resultSet.getFloat("lmoney"));
                loveInHeartList.add(l);
            }

        } catch (SQLException e) {

            e.printStackTrace();
        }
        
        try {
            prepareStatement = connection.prepareStatement(sql_recodeCount);
            resultSet = prepareStatement.executeQuery();
            resultSet.next();
            myPage.setRecodeCount( resultSet.getInt("mycount") );
        } catch (SQLException e) {
            
            e.printStackTrace();
        }
        
        
        closeAll(connection, prepareStatement, resultSet);

        // System.out.println(connection);
        return loveInHeartList;
    }

    @Override   //添加
    public boolean add(LoveInHeart love) {
        // 操作数据库,需要一个连接Connection
        Connection connection = getConnection();
        PreparedStatement prepareStatement = null;
        try {
            prepareStatement = connection
                    .prepareStatement("insert into LoveInHeart(lname,lsex,ltime,lmoney) values (?,?,?,?)");
            prepareStatement.setString(1, love.getLname());
            prepareStatement.setString(2, love.getLsex());
            prepareStatement.setDate(3, love.getLtime());
            prepareStatement.setFloat(4, love.getLmoney());
            prepareStatement.executeUpdate();

            closeAll(connection, prepareStatement, null);
            return true;

        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }

    }

    @Override    //删除
    public boolean delete(int id) {
        // 操作数据库,需要一个连接Connection
        Connection connection = getConnection();
        PreparedStatement prepareStatement = null;
        try {
            prepareStatement = connection
                    .prepareStatement("delete from LoveInHeart where lid=?");
            prepareStatement.setInt(1, id);
            prepareStatement.executeUpdate();

            closeAll(connection, prepareStatement, null);
            return true;

        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

}

接下来在Service层再创建一个interface类,名字:LoveInHeartService

package com.nf.service;

import java.util.List;
import com.nf.entity.LoveInHeart;
import com.nf.entity.MyData;

public interface LoveInHeartService {
    public MyData getAll(int currentPage);
    public boolean add(LoveInHeart love);
    public boolean delete(int id);
}

随机在同Service层下实现该接口,实现类名:LoveInHeartServiceImpl,在这里实现类的方式直接调用dao层的方法就可以了

package com.nf.service;

import java.util.List;

import com.nf.dao.LoveInHeartDao;
import com.nf.dao.LoveInHeartDaoImpl;
import com.nf.entity.LoveInHeart;
import com.nf.entity.MyData;
import com.nf.util.MyPage;

public class LoveInHeartServiceImpl implements LoveInHeartService {
    
    private LoveInHeartDao loveDao = new LoveInHeartDaoImpl();
    
    @Override
    public MyData getAll(int currentPage) {
        
        MyPage myPage = new MyPage();
        myPage.setCurrentPage(currentPage);
        //myPage.setRecodeCount( 0  );//让Dao层来计算
        myPage.setPerPageSize( 10 );//设置每页10条
        
        
        List<LoveInHeart> loveList = loveDao.getAll( myPage  );
        
        
        MyData myData = new MyData();
        myData.setLoveInHeartList(loveList);
        myData.setMyPage(myPage);
        
        
        return myData;
    }

    @Override
    public boolean add(LoveInHeart love) {
        
        return loveDao.add(love);
    }

    @Override
    public boolean delete(int id) {
        // TODO Auto-generated method stub
        return loveDao.delete(id);
    }

}

接下来就是存放Servlet的action层,Servlet名:LoveInHeartActionGetAll(获取全部信息的Servlet)

package com.nf.web;

import java.io.IOException;
import java.util.List;

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.nf.entity.LoveInHeart;
import com.nf.entity.MyData;
import com.nf.service.LoveInHeartService;
import com.nf.service.LoveInHeartServiceImpl;


@WebServlet("/LoveInHeartActionGetAll")
public class LoveInHeartActionGetAll extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //第一步:先获得客户端的参数
        String currentPage_str = request.getParameter("currentPage");
        if (currentPage_str==null){
            currentPage_str = "1";
        }
        int currentPage = Integer.parseInt(currentPage_str);
        
        
        //第二步:调用Model(service层)的方法,来获取数据
        LoveInHeartService loveService = new LoveInHeartServiceImpl();
        MyData myData = loveService.getAll(currentPage);
        
        
        //第三步:把数据存放到request的属性中,然后把请求转发到jsp
        request.setAttribute("myData", myData);
        request.getRequestDispatcher("showList.jsp").forward(request, response);
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

再在同一层下创建添加的Servlet,Servlet名:LoveInHeartActionAdd

package com.nf.web;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;

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.nf.entity.LoveInHeart;
import com.nf.service.LoveInHeartService;
import com.nf.service.LoveInHeartServiceImpl;


@WebServlet("/LoveInHeartActionAdd")
public class LoveInHeartActionAdd extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取参数
        //?lname=123&lsex=男&ltime=111&lmoney=222
        String lname = request.getParameter("lname");
        String lsex = request.getParameter("lsex");
        String ltime = request.getParameter("ltime");
        String lmoney = request.getParameter("lmoney");
        //把参数构造成一个实体类
        LoveInHeart love = new LoveInHeart();
        love.setLname(lname);
        love.setLsex(lsex);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        
        try {
            love.setLtime( new java.sql.Date( sdf.parse(ltime).getTime() ) );
        } catch (ParseException e) {
            System.out.println("日期格式转换错误");
            e.printStackTrace();
        }
        love.setLmoney( Float.parseFloat(lmoney) );
        
        //调用Model,保存数据
        LoveInHeartService loveService = new LoveInHeartServiceImpl();
        boolean flag = loveService.add(love);
        
        //跳转
        if (flag){
            //response.sendRedirect("showList.jsp");
            response.sendRedirect("LoveInHeartActionGetAll");
            
            
        }else{
            response.sendRedirect("error.jsp");
        }
        
        
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

删除的Servlet,Servlet名:LoveInHeartActionDelete

package com.nf.web;

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.nf.service.LoveInHeartService;
import com.nf.service.LoveInHeartServiceImpl;

@WebServlet("/LoveInHeartActionDelete")
public class LoveInHeartActionDelete extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取参数
        String id_str = request.getParameter("id");
        int id = Integer.parseInt(id_str);
        
        //调用model的api
        LoveInHeartService loveService = new LoveInHeartServiceImpl();
        boolean flag = loveService.delete(id);
        
        if (flag){
            response.sendRedirect("LoveInHeartActionGetAll");
        }else{
            response.sendRedirect("error.jsp");
        }
        
        
        
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

添加JSP代码,此网页只有主体,无其它程序文件之类的引用,JSP名:add.jsp

<form action="LoveInHeartActionAdd">
<table border="1" width="80%" align="center">
    <tr>
        <td colspan="2" align="center">中华慈善捐款等级</td>
    </tr>
    <tr>
        <td width="180px">姓名:</td>
        <td><input type="text" name="lname"></td>
    </tr>
    <tr>
        <td width="180px">性别:</td>
        <td>
            <input type="radio" name="lsex" value="男" checked="checked"></input>
            <input type="radio" name="lsex" value="女"></input>
        </td>
    </tr>
    <tr>
        <td width="180px">捐款日期:</td>
        <td><input type="text" name="ltime">(yyyy年MM月dd日)</td>
    </tr>
    <tr>
        <td width="180px">捐款金额:</td>
        <td><input type="text" name="lmoney">(元)</td>
    </tr>
    <tr>
        <td colspan="2" align="center">
            <input type="submit" value="提交">
            <input type="reset" value="重置">
        </td>
    </tr>
</table>
</form>

首页的全部代码,这里只是用来做一个中转站,并不实现什么功能,所以可以只保留这一点东西,JSP名:index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%
    
    response.sendRedirect("LoveInHeartActionGetAll");
    %>

最重要的展示信息界面,包括了删除功能,JSP名:showList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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>
<script type="text/javascript">
function mydelete(id){
    alert(id);
    //ajax();
}

</script>
<body>

总纪录条数:${myData.myPage.recodeCount},
每页大小:${myData.myPage.perPageSize },
一共${myData.myPage.pageCount}页
<br><br>
<c:forEach begin="${myData.myPage.pageBegin}" end="${myData.myPage.pageEnd}" varStatus="sta">
    <a href="LoveInHeartActionGetAll?currentPage=${sta.index}">第${sta.index}页</a>
</c:forEach>


<table align="center" border="1" >
    <tr>
        <td colspan="6" align="right">
            ---中华爱心捐款查询系统<a href="add.jsp">添加新捐款</a></span>
        </td>
    </tr>
    
    <tr>
        <td>编号</td>
        <td>姓名</td>
        <td>性别</td>
        <td>捐款金额</td>
        <td>捐款时间</td>
        <td>操作</td>
    </tr>

<c:forEach items="${myData.loveInHeartList}" var="love">
    <tr>
        <td>${love.lid}</td>
        <td>${love.lname}</td>
        <td>${love.lsex}</td>
        <td>${love.lmoney}</td>
        <td>${love.ltime}</td>
        <td>
            <a href="LoveInHeartActionDelete?id=${love.lid}">删除</a>&nbsp;
            <a href="javascript:mydelete(${love.lid})">无刷新删除1</a>&nbsp;
            <button onclick="mydelete(${love.lid})">无刷新删除2</button>
        </td>
    </tr>
</c:forEach>

</table>


<c:forEach begin="${myData.myPage.pageBegin}" end="${myData.myPage.pageEnd}" varStatus="sta">
    <a href="LoveInHeartActionGetAll?currentPage=${sta.index}">第${sta.index}页</a>
</c:forEach>


</body>
</html>

 最终结果图如下:

 

 

 

 

 

分类:

技术点:

相关文章: