记录JavaWeb的练习小项目
项目整体:
将爬取或下载的股票数据存储到MySQL数据库,然后从MySQL数据库读取股票数据:
编写前端代码,展示前端首页:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/js/bootstrap.bundle.min.js">script>
<script type="text/javascript" src="js/jquery-3.6.0.js">script>
<style type="text/css">
::selection {/*当选中文字变换背景色*/
color: blue;
background: skyblue;
}
#minddle{
margin: auto;/**/
position: relative;/*内容位置可移动*/
top: 110px;/*向下移动*/
left: 12px;/*向右移动*/
font-size: 10%;
height: 80%px;
}
#draw1{
position: relative;
right: 240px;
top: 150px;
height: 300px;
width: 300px;
}
#img_ts{
margin: auto;
position: relative;
top: 100px;
}
#draw2{
position: relative;
height: 300px;
width: 300px;
}
#a1:hover {
color: hotpink;
}
#begin{
height: 150px;
width:500px;
font-size: 100px;
text-align: center;
line-height: 150px;
color: white;
}
style>
head>
<body style="height:1000px">
<div id="top" class="container-fluid p-2 text-center bg-light text-light fixed-top">
<nav class="navbar navbar-expand-sm navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="https://www.baidu.com/">Logoa>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mynavbar">
<span class="navbar-toggler-icon">span>
button>
<div class="collapse navbar-collapse" id="mynavbar">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link text-light" href="https://www.baidu.com/">不懂就去百度吧a>
li>
<li class="nav-item">
<a class="nav-link text-light" href="https://cn.bing.com/">还是不懂就去binga>
li>
<li class="nav-item">
<a class="nav-link text-light" href="https://www.eastmoney.com/">东方财富网a>
li>
ul>
<form class="d-flex">
<input class="form-control me-2" type="text" placeholder="搜索">
<button class="btn btn-primary" type="button">搜索button>
form>
div>
div>
nav>
div>
<div id="minddle" class="container-fluid p-2 text-center">
<div id="option" class="container-fluid p-3">
<c:choose>
<c:when test="${empty page }">
<a id="begin" class="btn btn-primary" type="button" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=1"><b>点击查看b>a>
c:when>
<c:otherwise>
<a id="toDraw" class="btn btn-primary" type="button" href="${pageContext.request.contextPath }/HomeServlet?method=getLine&page=5"><b>查看移动平均线b>a>
c:otherwise>
c:choose>
<c:if test="${not empty msg }">
<br/><h1 style="color: red;">${msg }h1>
c:if>
div>
<div class="container-fluid row p-2">
<div id="left_lb" class="carousel slide col col-sm-2" data-bs-ride="carousel">
<div class="carousel-indicators">
<button type="button" data-bs-target="#left_lb" data-bs-slide-to="0" class="active">button>
<button type="button" data-bs-target="#left_lb" data-bs-slide-to="1">button>
<button type="button" data-bs-target="#left_lb" data-bs-slide-to="2">button>
div>
<div class="carousel-inner" style="position: relative;top: 35%">
<div class="carousel-item active">
<img src="${pageContext.request.contextPath }/img/1.jpg" alt="1" class="d-block w-100">
div>
<div class="carousel-item">
<img src="${pageContext.request.contextPath }/img/2.jpg" alt="2" class="d-block w-100">
div>
<div class="carousel-item">
<img src="${pageContext.request.contextPath }/img/3.jpg" alt="3" class="d-block w-100">
div>
div>
<button class="carousel-control-prev" type="button" data-bs-target="#left_lb" data-bs-slide="prev">
<span class="carousel-control-prev-icon">span>
button>
<button class="carousel-control-next" type="button" data-bs-target="#left_lb" data-bs-slide="next">
<span class="carousel-control-next-icon">span>
button>
div>
<div id="dataFrame" class="col-sm-8 p-2">
<c:choose>
<c:when test="${empty page }">
<img src="${pageContext.request.contextPath }/img/股票数据分析.png">
c:when>
<c:when test="${not empty page.listBean }">
<table class="table table-hover">
<thead>
<tr>
<th>股票代码th>
<th>交易日期th>
<th>开盘价th>
<th>最高价th>
<th>最低价th>
<th>收盘价th>
<th>昨收价th>
<th>涨跌额th>
<th>涨跌幅%th>
<th>成交量(手)th>
<th>成交额(千元)th>
tr>
thead>
<tbody>
<c:forEach items="${page.listBean }" var="bean">
<tr>
<td>${bean.code }td>
<td>${bean.date }td>
<td>${bean.f1 }td>
<td>${bean.f2 }td>
<td>${bean.f3 }td>
<td>${bean.f4 }td>
<td>${bean.f5 }td>
<td>${bean.f6 }td>
<td>${bean.f7 }td>
<td>${bean.f8 }td>
<td>${bean.f9 }td>
tr>
c:forEach>
tbody>
table>
<div class="container-fluid row" >
<div class="col-sm-2 p-2">
<form class="d-flex" action="${pageContext.request.contextPath }/HomeServlet?method=getData" method="post">
<input type="text" name="page" placeholder="请输入页码" size="10px"/>
<button id="btn_tz" class="btn btn-primary btn-sm" type="submit">跳转button>
form>
div>
<div class="col-sm-10 p-2">
<ul id="ul_fy" class="pagination justify-content-center">
<li class="page-item"><a class="page-link text-dark">当前:${page.pageNow } / 总共:${page.pageAll}a>li>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=1">首页a>li>
<c:if test="${page.pageNow > 1 }">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=${page.pageNow - 1 }">上一页a>li>
c:if>
<c:if test="${page.pageNow >= 3 and page.pageNow <= page.pageAll }">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=${page.pageNow - 2 }">${page.pageNow - 2 }a>li>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=${page.pageNow - 1 }">${page.pageNow - 1 }a>li>
c:if>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=${page.pageNow }">${page.pageNow }a>li>
<c:if test="${page.pageNow >= 1 and page.pageNow <= page.pageAll-2 }">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=${page.pageNow + 1 }">${page.pageNow + 1 }a>li>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=${page.pageNow + 2 }">${page.pageNow + 2 }a>li>
c:if>
<c:if test="${page.pageNow < page.pageAll}">
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=${page.pageNow + 1 }">下一页a>li>
c:if>
<li class="page-item"><a class="page-link" href="${pageContext.request.contextPath }/HomeServlet?method=getData&page=${page.pageAll}">尾页a>li>
ul>
div>
div>
c:when>
c:choose>
div>
<div id="right_lb" class="carousel slide col-sm-2" data-bs-ride="carousel">
<div class="carousel-indicators">
<button type="button" data-bs-target="#right_lb" data-bs-slide-to="0" class="active">button>
<button type="button" data-bs-target="#right_lb" data-bs-slide-to="1">button>
<button type="button" data-bs-target="#right_lb" data-bs-slide-to="2">button>
div>
<div class="carousel-inner" style="position: relative;top: 35%">
<div class="carousel-item active">
<img src="${pageContext.request.contextPath }/img/4.jpg" alt="4" class="d-block w-100" style="width:100%;min-height:100%">
div>
<div class="carousel-item">
<img src="${pageContext.request.contextPath }/img/5.jpg" alt="5" class="d-block w-100" style="width:100%;min-height:100%">
div>
<div class="carousel-item">
<img src="${pageContext.request.contextPath }/img/6.jpg" alt="6" class="d-block w-100" style="width:100%;min-height:100%">
div>
div>
<button class="carousel-control-prev" type="button" data-bs-target="#right_lb" data-bs-slide="prev">
<span class="carousel-control-prev-icon">span>
button>
<button class="carousel-control-next" type="button" data-bs-target="#right_lb" data-bs-slide="next">
<span class="carousel-control-next-icon">span>
button>
div>
div>
div>
<div id="bottom" class="container-fluid p-2 text-center bg-dark text-light fixed-bottom">页脚div>
<script type="text/javascript">
$(document).ready(function(){
$("#btn_tz").click(function(){
var input = $('input[name="page"]').val();
var pat = /\d/g;
if(input > 0 && input < ${page.pageAll}){ /* 输入的是数字并且在范围内 */
}else{
alert("请输入 1 - " + ${page.pageAll} + " 的数字");
}
});
});
script>
body>
html>
点击查看:
页面将数据进行分页展示。
然后点击查看移动平均线:
使用的是echarts进行移动平均线的绘制。
绘图代码:
<%@ 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>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="${pageContext.request.contextPath }/bootstrap/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/js/bootstrap.bundle.min.js">script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.6.0.js">script>
<script src="${pageContext.request.contextPath }/js/echarts.js">script>
<title>Drawtitle>
<style type="text/css">
::selection {/*当选中文字变换背景色*/
color: blue;
background: skyblue;
}
#option{
position: relative;
top:97px;
}
#draw{
position: relative;
top:100px;
left:25%;
align-self: center;
}
style>
head>
<body>
<div id="top" class="container-fluid p-2 text-center bg-light text-light fixed-top">
<nav class="navbar navbar-expand-sm navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="https://www.baidu.com/">Logoa>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mynavbar">
<span class="navbar-toggler-icon">span>
button>
<div class="collapse navbar-collapse" id="mynavbar">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link text-light" href="https://www.baidu.com/">不懂就去百度吧a>
li>
<li class="nav-item">
<a class="nav-link text-light" href="https://cn.bing.com/">还是不懂就去binga>
li>
<li class="nav-item">
<a class="nav-link text-light" href="https://www.eastmoney.com/">东方财富网a>
li>
ul>
<form class="d-flex">
<input class="form-control me-2" type="text" placeholder="搜索">
<button class="btn btn-primary" type="button">搜索button>
form>
div>
div>
nav>
div>
<div class="container-fluid p-2 text-center">
<div id="option" class="container-fluid p-2">
<table class="table text-center">
<thead>
<tr>
<th>
<h1 style="color: hotpink">移动平均线:h1>
th>
tr>
thead>
<tbody>
<tr>
<td>
<ul class="pagination justify-content-center">
<li class="page-item"><a class="page-link" type="button" href="${pageContext.request.contextPath }/HomeServlet?method=getLine&day=5">5天a>li>
<li class="page-item"><a class="page-link" type="button" href="${pageContext.request.contextPath }/HomeServlet?method=getLine&day=10">10天a>li>
<li class="page-item"><a class="page-link" type="button" href="${pageContext.request.contextPath }/HomeServlet?method=getLine&day=30">30天a>li>
<li class="page-item"><a class="page-link" type="button" href="${pageContext.request.contextPath }/HomeServlet?method=getLine&day=60">60天a>li>
<li class="page-item"><a class="page-link" type="button" href="${pageContext.request.contextPath }/HomeServlet?method=getLine&day=120">120天a>li>
<li class="page-item"><a class="page-link" type="button" href="${pageContext.request.contextPath }/HomeServlet?method=getLine&day=250">250天a>li>
ul>
td>
tr>
tbody>
table>
div>
div>
<div class="container-fluid p-2">
<div id="draw" style="width: 1200px;height:800px;">div>
div>
<div id="bottom" class="container-fluid p-2 text-center bg-dark text-light fixed-bottom">页脚div>
<h1 id="h1">h1h1>
<script type="text/javascript">
$(document).ready(function(){
$("#h1").text("加载完成");
<%if(request.getAttribute("line") != null){%>
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById("draw"));
var data = ${line};
var xAxis = ${xAxis};
// 指定图表的配置项和数据
var option = {
title: {
text: '股票000001.SZ - ${day}移动平均线'
},
tooltip: {},
legend: {
data:['收盘价']
},
xAxis: {
data: xAxis
},
yAxis: {},
series: [{
name: '收盘价',
type: 'line',
data: data
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
<%}%>
});
script>
body>
html>
保存源码在度盘供以后回顾。
有感兴趣并想将之完善的可以访问度盘下载:
链接:https://pan.baidu.com/s/1i2leIo5jdLo6NAX9y2nrFQ
提取码:1ckx
注意修改c3p0的连接池的配置数据。