web基础编程-图片管理网站

                                                                                     图片艺廊管理网站说明

  • 数据库设计:

主要由三张表:用户表、图片表、用户图片对应关系表。

  • 用户表:

主要字段如下:

用户ID     整型    主键    自增长;

用户姓名   字符型  ;

用户密码   字符型  ;

  • 文件表:

 主要字段如下:

文件ID     整型    主键    自增长;

        文件名     字符型;

        文件类别   字符型;

  • 用户图片对应关系表:

  主要字段如下:

         文件ID    整形;

         用户姓名   字符型;

         主键(文件ID,用户姓名);

         外键 文件ID参照文件表(文件ID),用户姓名参照用户表(用户姓名);

  •  网站设计前端与后端设计

           本网站后端主要是由dao层、filter层、javaBean层、servletHandle层、untilBean层组成,前端主要是由css层、error层、images层、personalIndex层、index.jsp、regist.Jsp组成。

后端详细说明:

  1. dao层:存放操作数据库java类,主要组成如下。

    ImageDao:实现对Image表的增删改查功能,涉及到与user_file表的组合查询,和数据库分页技术.

userDao:实现对user表的增删改查功能,涉及到与user_file表的组合查询。

  1. Filter层:用来处理REQUEST、FORWARD对JSp、servlet发起的每一次请求或请求转发的过滤,用来重新设置,请求与响应的contenType和编码,防止JSp、servlet之间转发、重定向时而会引起乱码的现象。
  2. javaBean层:这里要是实体bean:UserBean、IamgeBean与关系Bean:User_iamgeBean。用来dao层向servlet层传数据时对数据进行包装。
  3. servletHandle层:用来向前台发送数据,处理各种业务逻辑。

AddImageServlet:处理页面增加图片的请求,向数据库中插入记录,并向jsp返回结果

deleteImageServlet:处理页面删图片的请求,向数据库中删除记录,并向jsp返回结果

LoginImageServlet:处理页面加载图片的请求,从数据库中获取记录,并向jsp返回结果

UpdateUserPass:处理页面修改密码的请求,向数据库中修改记录,并向jsp返回结果

UserLoginServlet:处理页面加载用户的请求,从数据库中获取记录,并向jsp返回结果

UserRegistServlet:处理页面注册用户的请求,向数据库中插入记录,并向jsp返回结果

  1. untilBean层:采用工厂设计模式写了一个对数据库操作的工具类;主要是数据库的链接和操作数据库的静态方法。

前端详细说明:

  1. css层:主要是存放JSP页面的css样式表,每一张jsp对应一张样式表
  2. Error层:用来存放404(服务器找不到请求的网页)与500(服务器内部错误)发生时,所展示图片,当服务器错误时来给用户以更好地体验效果。
  3. images层:用来存放jsp页面上所用到的图片。
  4. personalIndex层:主要是存放网页主页上jsp,和img层;详细说明如下:

   AddImage.jsp:增加图片的界面

   PersonalIndex.jsp:用户主页,照片展示页面

Update Pass.jsp:用户修改密码界面

Img层:用来存放用户所上传的图片。

  1. index.jsp:登陆界面
  2. Regist.jsp:注册界面

 

  • 网站制作过程遇到的困难
  1. 在网页制作过程中,涉及到各种差错处理、页面加载数据等等:例如用户名为空、用户名密码不匹配、加载数据失败等等一系列错误信息和图片链表等数据该如何在JSP中显示,首先链表的显示就要用到循环语句,而java老师常说jsp中尽量不要嵌入java代码。

于是我就想到了用EL表达式,而循环控制用到java标准标签库相关知识;又因为Servlet层向jsp层传的参数作用在不同的范围有session层、request层的数据,而el表达式恰好很方便的能解决这些问题。

  1. 在制作过程中,由于要求用到数据库分页技术,那么这将涉及到大量的数据,这些数据该如何展示,第一次想到的是页面分页展示,却又对如何分页展示没有头绪。

   经历过大量试探之后,想到了一个数据库分页展示的方法,第一次加在数据的时候;首先将查询的结果集缓存到本地,用CachedRowSet将rs中的数据取出来,规定好一页15条记录。采用分页查询获取记录的前15条;封装成对象链表,向前台传入传入链表并展示。当点击下一页的时候。从servlet层取出第二页数据并展示,中间涉及到很多差错控制逻辑。

  1. 网页制作过程中有时遇到乱码问题。比如用response.getWriter()方法展示一些文字就会乱码,每次都要设置request的编码,和response的contenType很麻烦。

于是就想到了用过滤器来过滤每一次请求,并为其设置编码格式;和resonpse的contentType。

  1. 网页图片上很多的类别,刚开始不知道该如何按类别来加载这些图片,如何在servlet层处理这些逻辑。

   最后处理是在IamgeDao中增加一个按类别、按用户名加载图片的方法,在servlet层进行调用,根据a链接传来的参数来加载图片数据传到jsp层。

 

注意:演示视频中需要大量的数据需要插入数据库。请先把personal/Img文件中存在的图片全部删除后在进行操作!

 

注:工程源码已上传至csdn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDOJ 1494 跑跑卡丁车

跑跑卡丁车Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1778 Accepted Submission(s): 583Problem Description跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣。…

LeetCode 375. 猜数字大小 II(DP)

文章目录1. 题目2. 解题1. 题目 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜…

网络命令使用

实验目的 1.掌握基本的网络命令,并了解其在网络领域的作用。 2.学习使用网络命令,并了解其参数的含义。 实验要求 1.要求不仅能会使用网络命令,并能在实际网络操作中灵活运用。 2.能将基本…

python中的range与list函数

使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节。 这里记录一下range(),复习下list的slide,最后分析一个好玩儿的冒泡程序。 这里记录一下: >>> range(1,5) #代表从1到5(不包含5)[1,…

LeetCode 546. 移除盒子(DP)*

文章目录1. 题目2. 解题1. 题目 给出一些不同颜色的盒子,盒子的颜色由数字表示,即不同的数字表示不同的颜色。 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。 每一轮你可以移除具有相同颜色的连续 k 个盒子(k > …

转 php 观察者模式

<?php /** * 观察者模式 *//** * 抽象主题角色 */ interface Subject {/** * 增加一个新的观察者对象 * param Observer $observer */ public function attach(Observer $observer);/** * 删除一个已注册过的观察者对象 * param Observer $observer */ public function det…

配置VLAN以及配置VTP;

实验目的 配置VLAN; 通过VLAN Trunk配置跨交换机的VLAN; 配置VTP; 查看上述配置项目的有关信息。 设备需求 本实验需要以下设备&#xff1a; Cisco Catalyst 2950系列交换机2台&#xff0c;型号不限; 交叉线序网线1条; 1台带有超级终端程序的PC机&#xff0c;以及Cons…

python中的随机函数random

一、random模块简介 Python标准库中的random函数&#xff0c;可以生成随机浮点数、整数、字符串&#xff0c;甚至帮助你随机选择列表序列中的一个元素&#xff0c;打乱一组数据等。 二、random模块重要函数 1 )、random() 返回0<n<1之间的随机实数n&#xff1b; …

LeetCode 1140. 石子游戏 II(DP)*

文章目录1. 题目2. 解题1. 题目 亚历克斯和李继续他们的石子游戏。许多堆石子 排成一行&#xff0c;每堆都有正整数颗石子 piles[i]。游戏以谁手中的石子最多来决出胜负。 亚历克斯和李轮流进行&#xff0c;亚历克斯先开始。最初&#xff0c;M 1。 在每个玩家的回合中&…

在Ubuntu上下载、编译和安装Android 4.2 最新内核源代码(Linux Kernel)

根据http://blog.csdn.net/luoshengyang/article/details/6564592博客内容对android4.2的编译 从源代码树下载下来的最新Android源代码&#xff0c;是不包括内核代码的&#xff0c;也就是Android源代码工程默认不包含Linux Kernel代码&#xff0c;而是使用预先编译好的内核&…

Python中的Number(数字)

Python Number 数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值&#xff0c;将重新分配内存空间。 以下实例在变量赋值时 Number 对象将被创建&#xff1a; var1 1 var2 10 您也可以使用del语句删除一些 Number 对象引用。 del语句的…

LeetCode 1550. 存在连续三个奇数的数组

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 arr&#xff0c;请你判断数组中是否存在连续三个元素都是奇数的情况&#xff1a;如果存在&#xff0c;请返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;arr [2,6,4,1] 输出&…

配置RIP实验

实验目的 掌握RIPv1和v2配置方法 掌握show ip rip database、sh ip protocol命令 掌握debug命令 掌握将RIP的广播更新方式更改为单播方式 设备需求 本实验需要以下设备&#xff1a; 4台2811Cisco路由器&#xff0c;四台都有两个FastEthernet口。 2条双绞线&#xff0c;…

LeetCode 1551. 使数组中所有元素相等的最小操作数(等差数列)

文章目录1. 题目2. 解题1. 题目 存在一个长度为 n 的数组 arr &#xff0c;其中 arr[i] (2 * i) 1 &#xff08; 0 < i < n &#xff09;。 一次操作中&#xff0c;你可以选出两个下标&#xff0c;记作 x 和 y &#xff08; 0 < x, y < n &#xff09;并使 arr…

协议数据分析

实验目的 了解协议分析仪的使用方法和基本特点。 增强对网络协议的理解。 实验要求 要求在进行协议数据分析后&#xff0c;能够将网络数据与具体的网络操作相互映证&#xff0c;如实的记录实验结果&#xff0c;完成实验 实验环境 1&#xff0e;一台运行Windows 2000的计算机…

python中的面向对象

Python 面向对象 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。现在介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象语言的一些基本特…

会计基础第二次模拟试题(1)

会计基础第二次模拟试题(1) 会计基础第二次模拟试题(1) 之前我们整理了一部分会计基础的模拟题&#xff0c;下面是之前的文章列表&#xff0c;请大家多提建议&#xff1a; 会计基础第一次模拟题会计基础一 会计基础模拟练习2 会计基础模拟试题三 会计基础4 会计基础5 会计基础6…

LeetCode 1552. 两球之间的磁力(极小极大化 二分查找)

文章目录1. 题目2. 解题1. 题目 在代号为 C-137 的地球上&#xff0c;Rick 发现如果他将两个球放在他新发明的篮子里&#xff0c;它们之间会形成特殊形式的磁力。 Rick 有 n 个空的篮子&#xff0c;第 i 个篮子的位置在 position[i] &#xff0c;Morty 想把 m 个球放到这些篮子…

无连接网络通信程序UDP

服务器端 #include <windows.h> #include <iostream.h> #include <winsock.h> #pragma comment(lib,"ws2_32")#define NO_FLAGS_SET 0#define PORT (u_short) 44965 #define MAXBUFLEN 256INT main(VOID) {WSADATA Data;//它存储 被WSAStartup函数…

python中的LEGB 规则

Python 使⽤ LEGB 的顺序来查找⼀个符号对应的对象 locals -> enclosing function -> globals -> builtins 局部变量———闭包空间———全局变量———内建模块 a 1 # 全局变量 globals def fun(): a 2 …