一,项目目的

1.熟悉网站开发的基本流程。

2.将以学习的知识进行复习总结。

3,明确自身知识薄弱区。

二,项目内容

使用所学习对jsp,HTML,Mysql,css等知识制作一个小型的网页,初步实现登录注册,与对网站其他功能的处理。

项目所有文件展示(包括jar包和jsp页面)。

三,项目过程

首先是制作容纳用户账号的数据库表格:

然后是java部分

我的整个项目所有Java代码包

先是准备部分,就是上面展示的两个类,一个配置文件。

jdbc不用说,dasedam是对数据库所有功能的一个统筹,后面所有调用数据库的方法一般都是继承与他。

import Txtshop.Txt;
import org.apache.commons.dbutils.QueryRunner;
import jdbc.jdbcutils;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;import java.sql.*;
import java.util.List;public abstract class basedam {/**整体上这个文件是利用QueryRunner封装的功能实现的,基本上一直在调方法*/private QueryRunner queryRunner=new QueryRunner();
//  增public int update(String sql, Object...args){Connection connection= jdbcutils.getConnection();try {return queryRunner.update(connection,sql,args);} catch (SQLException throwables) {throwables.printStackTrace();}return -1;}/**单个搜索*/public <T> T QueryForOne(Class<T> clazz,String sql,Object... args){Connection connection=jdbcutils.getConnection();try {return queryRunner.query(connection,sql,new BeanHandler<T>(clazz),args);} catch (SQLException throwables) {System.out.println("问题1");throwables.printStackTrace();}finally {jdbcutils.closeConnection(connection);}return null;}/**整行搜索*/public <T> List<T> QueryForList(Class<Txt> clazz, String sql, String args){Connection connection=jdbcutils.getConnection();try {return (List<T>) queryRunner.query(connection,sql,new BeanListHandler<>(clazz),args);} catch (SQLException throwables) {System.out.println("问题2");throwables.printStackTrace();}finally {jdbcutils.closeConnection(connection);}return null;}/**对某些情况的单独搜索*/public Object QueryForSingleValue(String sql,Object... args){Connection connection=jdbcutils.getConnection();try {return queryRunner.query(connection,sql,new ScalarHandler(),args);} catch (SQLException throwables) {System.out.println("问题3");throwables.printStackTrace();}finally {jdbcutils.closeConnection(connection);}return null;}/**删除*/public int Querydelete(String sql,Object... args){Connection connection=jdbcutils.getConnection();try {return queryRunner.update(connection,sql,args);} catch (SQLException throwables) {throwables.printStackTrace();}finally {System.out.println("问题w");jdbcutils.closeConnection(connection);}return -1;}/**修改*/public int UpdateFile(String sql,Object... args){try {return queryRunner.update(sql,args);} catch (SQLException throwables) {System.out.println("问题q");throwables.printStackTrace();}return -1;}
}

jdbc和配置先不展示了,最后我会把代码都发出来的。

然后是用户登录注册功能的实现,我是对每一个针对对象进行分类,这部分是对用户的。

这里分别是JavaBean对象,dao与Serlet接口,

然后就是代表登录注册的LoginServlet与ReginServlet。同理,项目内部的增删改查也是相通的流程,但这之恩做到增删改查,而下载需要另外写。

import Txtshop.Txtdao;
import Txtshop.Txtdaolmpo;
import org.apache.commons.io.IOUtils;
import sun.misc.BASE64Encoder;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.jar.Attributes;public class DownText extends HttpServlet {Txtdao txtdao=new Txtdaolmpo();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String filetxt = req.getParameter("txt");
//        System.out.println();String downloadFileName = filetxt;
//        2、读取要下载的文件内容 (通过ServletContext对象可以读取)ServletContext servletContext = getServletContext();// 获取要下载的文件类型String mimeType = servletContext.getMimeType("/Txt/" + downloadFileName);System.out.println("下载的文件类型:" + mimeType);
//        4、在回传前,通过响应头告诉客户端返回的数据类型resp.setContentType(mimeType);
//        5、还要告诉客户端收到的数据是用于下载使用(还是使用响应头)// Content-Disposition响应头,表示收到的数据怎么处理// attachment表示附件,表示下载使用// filename= 表示指定下载的文件名// url编码是把汉字转换成为%xx%xx的格式if (req.getHeader("User-Agent").contains("Firefox")) {// 如果是火狐浏览器使用Base64编码resp.setHeader("Content-Disposition", "attachment; filename==?UTF-8?B?" + new BASE64Encoder().encode(downloadFileName.getBytes("UTF-8")) + "?=");} else {// 如果不是火狐,是IE或谷歌,使用URL编码操作resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(downloadFileName, "UTF-8"));}InputStream resourceAsStream = servletContext.getResourceAsStream("/Txt/" + downloadFileName);// 获取响应的输出流OutputStream outputStream = resp.getOutputStream();//        3、把下载的文件内容回传给客户端// 读取输入流中全部的数据,复制给输出流,输出给客户端IOUtils.copy(resourceAsStream, outputStream);
//        resp.sendRedirect(req.getContextPath()+"/test02.jsp");}
}

我在小说的数据库表格存储的是文件名,存储地址都是写死的。

四,项目效果展示

登录界面,注册和他差不多,我没有在页面中加入隐藏的文字域用来提示错误,而是是使用了弹窗的方式,对账号名,密码,验证码进行验证。并且加入了Fiter拦截和Mysql防注入,没有进行验证是无法进入后面的页面的。

欢迎界面

功能页面三个主页面

如果搜索栏是空白,代表这是个全局搜索,另外也可以进行单独搜索(模糊收缩我还没添加)

修改界面与上传相似

我将修改的内容都显示,想修改名字或作者直接该就行,封面与内容则是直接上传,不想修改的不用动他就好,并且不管是上传还是修改,我在封面与内容都有限制,封面只能传图片,内容只能传文档,否则会修改\上传失败。

阅读界面搜索文件,并将其打印在页面上,至于显示效果。。。。我尽力了。

但实际上我只写了一个,一个页面显示,另外两个页面就会隐藏

<%@ page import="Servlet.UpdateServlet" %>
<%--Created by IntelliJ IDEA.User: 86188Date: 2022/4/8Time: 16:51To change this template use File | Settings | File Templates.
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%String d1=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<html>
<head><title>Myworld</title><link type="text/css" rel="stylesheet" href="css03.css"><script type="text/javascript" src="Jqery/jquery.js"></script><script>jQuery(function (){jQuery("#y1").show();jQuery("#y2").hide();jQuery("#y3").hide();})jQuery(function (){jQuery("#d2").click(function (){jQuery("#y1").hide();jQuery("#y2").show();jQuery("#y3").hide();});jQuery(function (){jQuery("#d1").click(function (){jQuery("#y1").show();jQuery("#y2").hide();jQuery("#y3").hide();})});jQuery(function (){jQuery("#d3").click(function (){jQuery("#y1").hide();jQuery("#y2").hide();jQuery("#y3").show();})})});jQuery(function (){var s="${requestScope.wo}";if (s!=""){alert(s);jQuery("#y1").hide();jQuery("#y2").show();jQuery("#y3").hide();}});jQuery(function (){var o="${requestScope.wos}";if (o!=""){jQuery("#y1").hide();jQuery("#y2").hide();jQuery("#y3").show();}});jQuery(function (){var r="${requestScope.del}";if (r=="kong"){alert("书库暂时未收录此书");}else if (r=="cheng"){alert("删除成功");}});jQuery(function (){var p="${requestScope.xiu}";if(p!=""){alert(p);}});</script>
</head>
<body>
<div id="div03"><ul id="UI2" style="width: 120px; margin: 0% 10%;" ><li class="table"><button style="font-size: 35px;font-family: 隶书; height: 60px;width: 120px;" id="d1">搜索</button></li><li class="table"><button style="font-size: 35px;font-family: 隶书; height: 60px;width: 120px;" id="d2">添加</button></li><li class="table"><button style="font-size: 35px;font-family: 隶书; height: 60px;width: 120px;" id="d3">下载</button></li></ul>
</div>
<%--****************************************搜索***********************************--%>
<div id="y1" style="text-align:center;"><form action="<%=d1%>in" method="post"><div id="div01"><h1 style="margin: 0% 40%;font-family: 华文行楷;">星火</h1><input type="text" name="s1" style="width: 500px; height: 40px;"><input type="submit" style="width: 80px;height: 40px;"></div></form><div  id="div02"><ul id="UI1"><li class="tabled">书名</li><li class="tabled">作者</li><li class="tabled">封面</li><li class="tabled">操作</li><li class="tabled">操作</li><li class="tabled">操作</li><c:forEach items="${requestScope.list}" begin="0" varStatus="status" var="it" end="${requestScope.list.size()}" step="1"><c:if test="${it.name!=null&&it.author!=null}"><li class="tabled" id="w1"><c:out value="${it.name}">${it.name}</c:out></li><li class="tabled" id="w2"><c:out value="${it.author}">${it.author}</c:out></li><li class="tabled"><img src="gdj/封面.jpeg" width="120px" height="60px"></li><li class="tabled"><a href="test04.jsp?name=${it.name}&author=${it.author}&">修改</a></li><li class="tabled"><a href="del?name=${it.name}&author=${it.author}">删除</a></li><li class="tabled"><a href="watch?name=${it.name}&author=${it.author}">阅读</a></li></c:if></c:forEach></ul></div>
</div>
<%--******************************添加**********************************************--%>
<div id="y2" style="text-align:center; margin: 5%;"><div id="div05"><h1 style="margin: 0% 40%;font-family: 华文行楷;">星火-添加</h1></div><div style="margin: 5% 30%;width: 500px;"><form action="<%=d1%>up" method="post" enctype="multipart/form-data"><ul><li class="tables">书名:<input type="text" name="name" style="width: 190px; height: 25px;"><br></li><li class="tables">作者:<input type="text" name="author" style="width: 190px; height: 25px;"><br></li><li class="tables">&nbsp;&nbsp;&nbsp;&nbsp;封面:<input type="file" name="img" accept="image/*"><br></li><li class="tables">&nbsp;&nbsp;&nbsp;&nbsp;内容:<input type="file" name="File" accept="text/*"><br></li><li class="tables"><input type="submit" name="d1" value="上传"></li></ul></form></div>
</div>
<%--**************************************下载********************************************--%>
<div id="y3" style="text-align:center; margin: 5%"><form action="<%=d1%>item" method="post"><div id="div08"><h1 style="margin: 0% 40%;font-family: 华文行楷;">星火</h1><input type="text" name="x1" style="width: 500px; height: 40px;"><input type="submit" style="width: 80px;height: 40px;"></div></form><div  id="div07"><ul id="UI3"><li class="tabled">书名</li><li class="tabled">作者</li><li class="tabled">封面</li><li class="tabled">操作</li><c:forEach items="${requestScope.lists}" begin="0" varStatus="status" var="its" end="${requestScope.lists.size()}" step="1"><c:if test="${its.name!=null&&its.author!=null}"><li class="tabled" name="filename" id="wa1"><c:out value="${its.name}">${its.name}</c:out></li><li class="tabled" name="fileauthor" id="wa2"><c:out value="${its.author}">${its.author}</c:out></li><li class="tabled"><img src="gdj/封面.jpeg" width="120px" height="60px"></li><li class="tabled"><a href="dwon?txt=${its.txt}" name="${its.img}">下载</a></li></c:if></c:forEach></ul></div>
</div>
</body>
</html>

下载文件名与上传时一致,所以有现在小说名与下载文件不一致的请况。

五,项目心得

这个项目在制作中制作过很多问题,包括找不到数据库等,一些主要问题我放在上一个博客中了,这里就不多说了。除了知识上的新的,还有就是能力上的,比如页面写不好啊什么的,最大的就是开始时我是想讲增删改查等Servlrt放在同一个java中的,结果写着写着忘了。。。。还有我的文件命名。。一言难尽。并且这个严格来说并不是我独立写出来的,还有一部分参考了书城项目。以及向他人求助bug改不好了,它们让我明白了合作的重要性。我相信,在后来的学习中,我会珍惜这次的学习结果,更加努力地向前。

六,代码分享

items https://www.aliyundrive.com/s/zt3R9tnSuTm 提取码: o45x 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

JAVAWEB之小说书城项目相关推荐

  1. JavaWeb 尚硅谷书城项目

    书城项目第一阶段:表单验证 需求:         验证用户名:必须由字母,数字下划线组成,并且长度为 5 到 12 位         验证密码:必须由字母,数字下划线组成,并且长度为 5 到 12 ...

  2. 基于 JavaWeb 的在线书城项目

    开源项目:atguigu-online-bookshop 开发时间:2022.02.17 - 2022.04.19 文章目录 一.快速开始 二.功能演示 1.用户登录 2.用户注册 3.尚书房首页 4 ...

  3. 基于JavaWeb实现的书城项目:阶段五至阶段六

    第五阶段 分页模型 分页实现 根据上图所述流程,首先需要创建一个Page对象,保存以下几个页面属性: pageNo 当前页码 pageTotal 总页码 pageTotalCount 总记录数 pag ...

  4. JavaWeb网上书城项目总结(初步1.0)

    JavaWeb网上书城项目总结 目录 项目背景与目标 成员组成 模块划分 数据库设计 功能分析+源码 经验总结 (逐步放上博客,先总结) 成员组成 组长:林俊豪(本人) 组员:温尧皓.麦乙迪.邓梓鹏. ...

  5. JavaWeb书城项目(一)

    书城项目(一) 1.表单验证的实现 代码 2.用户注册和登陆 JavaEE 项目的三层架构 2.1.数据库层 2.1.1.创建数据库 2.1.2.定义 JavaBean 类 2.1.3.编写工具类 J ...

  6. JavaWeb书城项目

    尚硅谷书城项目:自己整理的笔记以及全部实现过程,原理. 链接: 点击获取资源 提取码: ih2c 再次感谢尚硅谷,我爱尚硅谷!!!! 目录 第一阶段:对注册页面的信息进行验证: 第二阶段:用户管理模块 ...

  7. java web网上书城_javaweb网上书城项目

    [实例简介] javaweb网上书城项目,采用ssh框架,mysql数据库. [实例截图] [核心代码] bookstore └── ssh_book ├── WebContent │   ├── M ...

  8. 基于javaweb的在线书城书店系统(jsp+ssm+mysql)

    基于javaweb的在线书城书店系统(jsp+ssm+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配 ...

  9. day09 书城项目第三阶段

    day09 书城项目第三阶段 1. 项目准备工作 1.1 创建Module 1.2 拷贝jar包 数据库jar包 Thymeleaf的jar包 1.3 从V2版本项目迁移代码 1.3.1 迁移src目 ...

最新文章

  1. 50 种系统免遭黑客侵袭的方法 [2017 年版]
  2. r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型
  3. iphone怎么检测屏幕是否被点亮 (用UIApplication的Delegate)
  4. Springboot 整合 Netty 实战(附源码)
  5. 《黄聪:手机移动站SEO优化教程》4、如何实现手机移动网站和PC站点的自主适配...
  6. Python:使用threading模块实现多线程编程三[threading.Thread类的重要函数]
  7. sql判断基数_SQL Server中的基数估计框架版本控制
  8. quartus仿真22:优先编码器74148的级联(详细)
  9. Promise 必知必会(十道题)
  10. matlab legend下划线,MATLAB 画图 legend
  11. vray for sketchup 2018安装教程详解
  12. Mac版Illustrator CS6破解版
  13. Fiori WebIde开发环境搭建
  14. 收集各种 iOS App 开发可以用到的代码示例
  15. 仿照登录界面实现网站的注册
  16. Python--递归初步
  17. m2e-wtp的作用
  18. cod16与战网服务器连接中断,《使命召唤16》无法连接服务器怎么解决 服务器连接解决攻略...
  19. 谷歌研究员走火入魔事件曝光:认为AI已具备人格,被罚带薪休假,聊天记录让网友San值狂掉...
  20. java(17)map与IO技术

热门文章

  1. 今日免费PNG图标集下载 - SweetiePlus
  2. 洛谷刷题C语言:Bold、饱食、公平の意、DOM、
  3. 帮推|基于深度学习的图像融合方法综述
  4. Walk Through the Fire,Is there a way out
  5. 微软Windows CEO梅尔森跟全体员工告别
  6. 树莓派4正式发布!TYPE-C,USB3.0,支持4K双屏,售价35美金起
  7. 在线微信聊天生成器,抖音微信聊天搞笑视频制作神器
  8. 现代信息技术(IT)对会计模式的影响(by 杨烈飙)
  9. 分布式架构之网络通信
  10. linux的常用命令行