JAVAWEB之小说书城项目
一,项目目的
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"> 封面:<input type="file" name="img" accept="image/*"><br></li><li class="tables"> 内容:<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之小说书城项目相关推荐
- JavaWeb 尚硅谷书城项目
书城项目第一阶段:表单验证 需求: 验证用户名:必须由字母,数字下划线组成,并且长度为 5 到 12 位 验证密码:必须由字母,数字下划线组成,并且长度为 5 到 12 ...
- 基于 JavaWeb 的在线书城项目
开源项目:atguigu-online-bookshop 开发时间:2022.02.17 - 2022.04.19 文章目录 一.快速开始 二.功能演示 1.用户登录 2.用户注册 3.尚书房首页 4 ...
- 基于JavaWeb实现的书城项目:阶段五至阶段六
第五阶段 分页模型 分页实现 根据上图所述流程,首先需要创建一个Page对象,保存以下几个页面属性: pageNo 当前页码 pageTotal 总页码 pageTotalCount 总记录数 pag ...
- JavaWeb网上书城项目总结(初步1.0)
JavaWeb网上书城项目总结 目录 项目背景与目标 成员组成 模块划分 数据库设计 功能分析+源码 经验总结 (逐步放上博客,先总结) 成员组成 组长:林俊豪(本人) 组员:温尧皓.麦乙迪.邓梓鹏. ...
- JavaWeb书城项目(一)
书城项目(一) 1.表单验证的实现 代码 2.用户注册和登陆 JavaEE 项目的三层架构 2.1.数据库层 2.1.1.创建数据库 2.1.2.定义 JavaBean 类 2.1.3.编写工具类 J ...
- JavaWeb书城项目
尚硅谷书城项目:自己整理的笔记以及全部实现过程,原理. 链接: 点击获取资源 提取码: ih2c 再次感谢尚硅谷,我爱尚硅谷!!!! 目录 第一阶段:对注册页面的信息进行验证: 第二阶段:用户管理模块 ...
- java web网上书城_javaweb网上书城项目
[实例简介] javaweb网上书城项目,采用ssh框架,mysql数据库. [实例截图] [核心代码] bookstore └── ssh_book ├── WebContent │ ├── M ...
- 基于javaweb的在线书城书店系统(jsp+ssm+mysql)
基于javaweb的在线书城书店系统(jsp+ssm+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配 ...
- day09 书城项目第三阶段
day09 书城项目第三阶段 1. 项目准备工作 1.1 创建Module 1.2 拷贝jar包 数据库jar包 Thymeleaf的jar包 1.3 从V2版本项目迁移代码 1.3.1 迁移src目 ...
最新文章
- 50 种系统免遭黑客侵袭的方法 [2017 年版]
- r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型
- iphone怎么检测屏幕是否被点亮 (用UIApplication的Delegate)
- Springboot 整合 Netty 实战(附源码)
- 《黄聪:手机移动站SEO优化教程》4、如何实现手机移动网站和PC站点的自主适配...
- Python:使用threading模块实现多线程编程三[threading.Thread类的重要函数]
- sql判断基数_SQL Server中的基数估计框架版本控制
- quartus仿真22:优先编码器74148的级联(详细)
- Promise 必知必会(十道题)
- matlab legend下划线,MATLAB 画图 legend
- vray for sketchup 2018安装教程详解
- Mac版Illustrator CS6破解版
- Fiori WebIde开发环境搭建
- 收集各种 iOS App 开发可以用到的代码示例
- 仿照登录界面实现网站的注册
- Python--递归初步
- m2e-wtp的作用
- cod16与战网服务器连接中断,《使命召唤16》无法连接服务器怎么解决 服务器连接解决攻略...
- 谷歌研究员走火入魔事件曝光:认为AI已具备人格,被罚带薪休假,聊天记录让网友San值狂掉...
- java(17)map与IO技术