栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVAWEB之小说书城项目

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 {
    
    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 QueryForOne(Class clazz,String sql,Object... args){
        Connection connection=jdbcutils.getConnection();
        try {
            return queryRunner.query(connection,sql,new BeanHandler(clazz),args);
        } catch (SQLException throwables) {
            System.out.println("问题1");
            throwables.printStackTrace();
        }finally {
            jdbcutils.closeConnection(connection);
        }
        return null;
    }
    
    public  List QueryForList(Class clazz, String sql, String args){
        Connection connection=jdbcutils.getConnection();
        try {
            return (List) 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();
    @Override
    protected 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: 86188
  Date: 2022/4/8
  Time: 16:51
  To 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()+"/";
%>


    Myworld
    
    
    



    
<%--****************************************搜索***********************************--%>

星火
  • 书名
  • 作者
  • 封面
  • 操作
  • 操作
  • 操作
  • ${it.name}
  • ${it.author}
  • 修改
  • 删除
  • 阅读
<%--******************************添加**********************************************--%>

星火-添加
  • 书名:
  • 作者:
  •     封面:
  •     内容:
<%--**************************************下载********************************************--%>

星火
  • 书名
  • 作者
  • 封面
  • 操作
  • ${its.name}
  • ${its.author}
  • 下载

 

 

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

 

 五,项目心得

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

六,代码分享

阿里云盘分享 提取码:39cp

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/868405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号