2023年web实验报告网盘系统.pdf
家 3二 学 秦 皇 岛 分 校 NorthEastern University At QinHuangDaoW e b开 发 与 应 用 实 验 报 告 系 别 电 子 信 息 系 专 业 计 算 机 科 学 与 技 术 班 级 学 号 _姓 名 _指 导 教 师 _2 0 2 3年 1 2 月 2 7月一,相 关 技 术 本 系 统 重 要 采 用 js p,serv 1 e t,sessi o n,mys q 1,html,xml,等 知 识 点,配 合 N a v i cat软 件,采 用 以 下 技 术 实 现:1数 据 存 储 由 于 本 系 统 是 个 简 易 网 盘,故 涉 及 到 的 数 据 量 比 较 小,故 采 用 小 巧 的 MySQL,鉴 于 MySQL没 有 公 司 管 理 器,于 是 采 用 Navi cat软 件 以 简 化 my sql的 使 用。2 页 面 显 示 由 于 涉 及 到 的 动 态 页 面,故 页 面 的 主 语 言 选 用 jsp。3 后 台 解 决 由 于 涉 及 到 连 接 数 据 库,处 在 安 全 考 虑,有 关 数 据 库 的 连 接 操 作 至 于 后 台;而 动 态 页 面 需 要 的 动 态 事 件 的 触 发、以 及 响 应 等 重 要 事 件 均 放 在 servlet中 进 行。4 数 据 传 递 鉴 于 本 系 统 的 页 面 较 多,故 使 用 se s sion进 行 数 据 的 传 递。二,系 统 需 求 分 析 1.用 户 登 陆 未 注 册 用 户 可 以 进 入 注 册 页 面 进 行 注 册,己 注 册 的 用 户 可 以 进 行 登 录,若 用 户 不 存 或 者 密 码 错 误 则 提 醒 重 新 输 入。用 户 名 密 码 匹 配,则 进 入 个 人 主 页。2.用 户 注 册 可 以 进 行 注 册 验 证,对“用 户 名 反 复”,“密 码 与 确 认 不 一 致”等 问 题 就 行 纠 错,并 能 将 对 的 的 数 据 输 入 到 数 据 库 中。3.上 传 文 献 可 以 上 传 文 献 到 D:中,并 能 将 文 献 的 名 字 存 入 到 数 据 库 中。4.下 载 文 献 会 在 页 面 中 显 示 每 个 用 户 已 经 上 传 的 所 有 文 献,并 可 以 下 载 上 述 文 献。三,系 统 设 计 1.数 据 库 d r op tabledr o p tabi/*Table:*/create ta ble d a ta(idp a ssw o r dprimary k e y(id);/*Tab 1 e:file*/ere a t e ta b 1 e u se r(idurlprima r y k eyfor e ign ke y(i d)i f ex i st se if exist sus e ruser;file;varc h a r(1 0 0),va r char(1 0 0)varcha r(20),v archar(20),(id,url),r ef e ren c es u s er(id);2.具 体 代 码:=Lo g in.j sp=:V%p ag e language=ja v a i mport=J a va.ut J 1.pageEncodin g=G B2312r,%b a s e h r e f=r,M y JS P 1 Lo g in.j sp1 sta r ti n g pageoooo0 V!一 o 欢 迎!c enter 用 户 名:&nbs p: 密 码:&n bsp;&n b sp;&n b sp;&n b s P;&nbs P;&n bsp;&nbs p;Snbsp; &n bsp;&nbs p;&n b s P;  ;&n bsp;&nb s p;尚 未 注 册?V/a=testLogin.jsp=%p age l a n g uage=j a v a imp o r t=java.uti i i mpo r t=ja va.sql.o 6Vb o dy0 t o ut0 0.pri n tl n(ale r t(欢 迎 回 来”oooo e o+re g _nameo ooo o+n!1);loca t ion.replac e(1 Uplo a d F il e.j s p 1););o o o flag=true;o o oo o br e a k;o o o else i f(reg_name.eq u al s(rs.get S tring(1)o o o&!r eg_ P ass.equals(r s.g e tS t ring(2)o o o uto oo.prin t In(*a 1 ert(密 码 错 误!);1 0 cati o n.rep 1ace(*Login.jsp1););o&o f 1 a g=tru e;oo o b rea k;o D O O 0)0 0 if(!flag)0 o o t o Uto o o ooo.p r in t ln(n alert(1 用 户 名 不 存 在!,);lo c at i on.r eplace(1 Login.j s pf););0 0 0)o o o rs.close();ocon.cl o s e();o ca t ch(Except i on e)O ut.prin tIn(e);0 5=Regi s t e r.jsp=ba s e h r ef=,r My JSP 1 Login.j sp1 starting pageoo!欢 迎 加 入 我 们!&nb s p;&nb s p;请 输 入 用 户 名:&nbs P;&n bs P;&n bsp; 请 输 入 密 码:n ter 请 再 次 输 入 密 码:in p u t typ e=p a s s word n ame=regpas s wo rd id=r e gpa s s/o o o oo o o 0 0 0o o=test R e g i s t e r.j s p=%page 1 a nguage=Mja v a i m p o r t=java,util.*,r i m p o r t=u t il.Jd b cUtil p a ge E neo d i n g=G B23 12%t 注 册 oo0 oS t r in g re g_ n a me=re q ue s t.g e t Paramete r(user name);0 oS t ring r e g_pass=re q ues t.g e t Pa r am e t e r(*password*);oString r e g_rpass=r equest,g etP a ramet e r(H r eg p a ssw o rd);0 C 0 nnection con=J d b c Util.g etConn e c t i 0 n();0 R e su 1 tSe t r s=nu 1 1;oS t atemen t st=null;boo 1 ean flagl=true;t r y(st=con.creat e Statemen t();o ors=st.e xecuteQuery(sei e c t*f r o m u s e r);w h i l e(rs.next()o o i f(r e g_ n ame.e q uals(r s.ge t String(1)a o o out.pr i ntln(Vbr请 重 新 注 册 V/B);ooo OU to o o o.print 1 n(nalert(对 不 起,用 户 名,,oooooo o+reg_namet o o o+”已 存 在);location.r e place(R e gist e r.j sp*););o o o o o f la g 1=f a l s e;o o o Sy s t e m.o ut.prin t 1 n(m o vedln);o o b r e ak;o)o o i f(f 1 a g 1)oSy s t em.o u t.p r i ntln(mov e d);o if(!reg_ p a s s.equals(reg_rpa s s)ooo OUto o o.p r i n t In(esc ript a lert(密 码 不 一 致,请 重 新 输 入 1);loca t io n.rp 1 a ce(*Reg i s ter.j s p);e 1 s e i f(reg_ pass,e q u a l s(reg_rpa s s)o o o P rep a redSta t e ment s ta t=c o no o.prepar e S t ate me n t(ni n sert use r valu e s(?z?);o o o s t at.s e tStr i ng(1 z reg n a me);o o stat.set S tring(2,r e g_ p a s s);ooo st a t.execut e U p dat e();o o o oo u t.p r intln(ce n 注 册 成 功 n);a o out.printin(*您 的 用 户 名 是:”+reg_ nameo 00000+,n);0 0 0 oout.pr i n t 1 n(您 的 密 码 是:”+re g _pas s+H*1);0 0 sta t.clo s e();0 0 0 S trin g n a me_reged=nu 1 1:0 s e ssion.s e t A t tri b ute(use r name,re g _name);0 0 out0 a 0.P rint 1 n(a 1 e rt(z 谢 谢 注 册);lo c ation.replace(Up loadF il e.j sp*)M);0 0)0 ors.close();0 0 0 ocon.c 1 os e();c a t c h(Exce p tion e)0 0 oo u t.p rintln(e);0)0 o=U p 1 o a d F i l e,jsp=%page 1 a n g u a g e=,r java im p o r t=java.u t i!.pa geE n c o d ing=GB23 J 2ri%base h r e f=n U P 1 oadFi 1 eo oo o!o0 f o r m encty p e=nmultipar t/f o r m-data me t h 0 d=po st n a me=uploadfo rmac t io n=se rv 1 et/Uplo a d0 你 的 名 字 是:书 ses s i on.ge t A ttri b u t e(u s e r n a m e)%0 0 0 请 选 择 你 要 上 传 的 文 献:0 0 oo o0 0 0o o&nb s p;0 0 00 0o o&nbs p;o o。o/p o o=D o w m lo a d F ile.j sp=p a ge 1 anguag e=java i mpor t=java.u t i 1 im p o r t=n util.J d bcUt i1 o p age E n c o ding=w GB231 2 M%String path=request.getC o ntex t Pa t h();Strin g b a sePath=re q uest.g e t S c h e m e()+”:+r e q uest.getServerName()+:+r e quest.g e tS e r ve r Port()+path+/%P age i m p o r X.=c om.m y s q l.j d b e.D r iv e r w%o(b a s e h r e f=z/no My J SP D o w n lo a d F i 1 e.j s p s t a r t i n g p a g e o o o oo!o 0-ooo o o你 的 名 字 是:s e s s io n.g e t A t t r i b u t e(nus e r n ame)t。请 选 择 你 要 下 载 的 文 献:0 0%/HttpSessi o n s ess ion=requ e st.ge t Se s si o n();String n a me=(S tring)s e s sion.g e tAttr i bu t e(u s e rnam e n);Connect!o n co n=Jdb c Ut i 1.get C o n nec t ion();a R e sultSet rs=n u l 1;S t atement s t=n u l 1;t r y(st=c o n.c reateS t atem e n t();rs=s t.e x e cuteQu e r y(se 1 ect*f r o m f i le);w h i l e(r s.n e xt()i f(name.e qua 1 s(rs.get S t r i n g(1)String u r 1=r s.getStr i ng(2);ou t.p rintln(u rl);String filepa t h=servlet/Download?f ilepath=/u+url;o u t.p r intln(nn);out.printin(downloa d this fi 1 e);out.printin(H);out.p r i n tl n();)rs.cl 0 se();c o n.cl o s e();)c a t c h(Exc e pt i on e)(out.p r int 1 n(e);)Odd%V b r o oo=Upload.java=pack a ge s e r vie t;im p ort j ava.i o.Fi 1 e;import j ava.i o.I OEx c ept i on;imp o r t j ava.i o.PrintW r iter;import j ava.sq l.S Q L E x c e p t i o n;import java,u t i 1.L i s t;im p o rt jav a x.servl e t.Ser v letExc e ption;im p ort j a v a x.s e rv 1 et.ht t p.HttpSer v 1 et;imp o rt javax.s e r vl e t.h t tp.Htt p Ser v 1 e t Request;import javax.servl e t.http.HttpServletRes p o n se;impor t javax.s e r v 1 et.http.H t tpS e s s i o n;i mp o rt org.apa c he.c o mmo n s.fi 1 e upload.De f a ultFile I temFactory;impo r t or g.apa c h mo n s.file u pload.D i s k F i 1 e U p 1 oad;im p ort org.a pac h e.c ommon s.file u p 1 oad.File I t em;impo r t com.mysq 1.jdbc.Co n ne c t i on;im p o rt com.mys q 1.j db c.Prepa r edStatement;i mport c o m.mys q l.jdbc.Re s ultSet;import com.m y sq 1.j d be.S t a t e me n t;import uti 1.JdbcUt i I;publ i c cl a s s U p lo a d ex t e nds H ttpServle t 叩 u b 1 i c Upl o a d()。s u per();bo p ubl i c vo i d de s troy()s u pe r.des t r o y();/J u st puts de s tr o y”strin g i n 1 o g1/P u t y our code h e re。p ublic v o i d d oGet(HttpServ 1 etRe q u est re q uest,H ttpServletRe s po ns e respon s e)thro w s ServletExceptio n,I OEx c e ption e String result=”;Htt p S es s i o n session=req u e st.getSessi o n();S tr i ng n ame=(String)s ess i o n.g e t A ttribu t e(u s emamen);String p a th=D:;8 C onne c t ion c o n=(Co n ne c tion)Jd b cU t i 1.ge t C onne c ti o n();Strin g sq 1=n inser t into f i l e v a 1 u e s(?,?);。Stri n g nm=n ul 1;。F i le fo d er=new F i 1 e(pa t h);/假 如 文 献 夹 不 存 在,则 创 建 文 献 夹if(fbd e r.exists()=fal s e)08fode r,m k dir s();/多 级 目 录。“/f ode r.m kd i r();只 创 建 一 级 目 录。try(3 D e f a u 1 tF i 1 e ItemF a ctory f a c t o r y=n e w DefaultFi lelt e mFactory();DiskFil e U p load up=new DiskF i 1 e U pload(f a ct o ry);。Li s t 1 s=up.p a r seRequ e s t(request);Sy stem.ou t.pr i n tin(Is.s i z e();g f or(Fi 1 e I t em f ile I tern:Is)(e i f(f il e Item.i s F ormF i e ld()g Stri n g Fiel d Name=f i le I t em.getFiel d Name();。St r ing Cont e nt=fileitem,g et S t r in g(ngbkn);g request.setAt t ribu t e(Fie 1 dName,C o nte n t);)e e Is e。n m=f i 1 el t em.g e tName().s u bstring(。fil e I t em.getName().1 a st I nd e xOf()+1);6 File mk r=n e w File(pa t h,nm);i f(mk r.ere a t e NewF i 1 e()。System.out.println(n up 1 oadi ng);。S y stem.out.prin t 1 n(fil e I tem.getFieldName();b S y s t em.o u t.pr i ntl n(nm);filel t em.wr i te(mkr);。r e suit=s ucc e ss!n;8)6 c atch(Ex c e pt i o n e)。e.print S t ackTrace();o re s ult=fail!M;6)。t r y Pr e p a redSta t e men t stat=(Pre p aredStatem e nt)con.p r epareSta t ement(s q 1);皿 s t a t.setStr i ng(l,n a me);3 s tat.setS t r i ng(2,nm);。stat.e x e c u teUpda t e();st a t.c 1 os e();c at c h(S QLE x ce p tion el)3。/TO DO Auto-generate d c a t ch b 1 oc k照 1.printSt a ckTra c e();0)。Sys t em.o u t.p r int 1 n(n m);oorespon s e.setCont e n tTy p e(n t ex t/htm 1 H);。Pr i n tW r i ter out=resp o n s e.g e tWr i te r();ou t。.prin t Jn(!DOCTYPE HTML PUBL I C-/W3C/DTD H T M L 4.0 1 Transitiona 1/E N。out.prin t 1 n();ou t.print 1 n(A S e r vl e t);ou t.pri n t ln();。out.println(a 1 er t(z succe e s s);1 ocati o n.replac e(/My s qItes t/D o wnl o adFil e,jsp);out.p ri n tln();。ou t.pri n 11 n();oout.flush();o o o ut.cl o se();)p u blic vo i d i nit()t h rows Ser v letE x ception“/Pu t y o ur c o de he r e)=Download.java=pa c k a ge ser v 1 e t;impor t ja v a.io.F i 1 e;im p o rt j av a.i o.Fi 1 e Inp u tStream;i mp o rt j ava.io.IO E xception;i mpor t jav a.io.I np u t St r earn;imp o r t j a v a.i o.Pr i n tWrite r;impo r t j av.URL Encoder;impo r t j a v a x.s ervl e t.S e r v letE x c ep t io n;i m p ort j a vax.se r v 1 et.S e r vlctOu t pu t Strc a m:im p o rt j avax.s e r v let.ht t p.H t tpSe r v 1 et;impo r t javax.serv 1 et.http.H t tpSer v le I Req u e st;impor t ja v a x.serv 1 e t.http.H t t pServlet R e s p o nse;public c 1 a ss Down!o a d e xtends H t(pServlet 叩 u b lie D o wnloa d()super():a)pub 1 i c v o i d destroy()s uper.dest r oy();/J u st p u ts destroy strin g i n lo gg/Put y o u r c o d e h e r e)public void doGet(HttpS e r v 1 e tReques t re q u e s t,HttpSer v 1 etRes p on s e re s p on s e)。t h rows S cr v let E xc e p t io n,IOE x ce p ti o n。String f i le p a t h=re q u e st.g e t P a ram e ter(n f i 1 e pat h);S trin g f u l 1 F i le P a t h=D:+f i 1 epath;。/*读 取 文 献,到 D 盘 下 载*/。Fi 1 e f ile=n ew F i l e C f u I l F i 1 ePath);/*假 如 文 献 存 在 文/i f(f i le.e xists()S t rin g fi 1 ename=URL E n c o der.e ncode(f ile.getN a m e(),u t f-8n);re s p o n s e.reset();r esponse.se t Co n ten t Ty p e(H a ppi i c at i on/x-ms d ownload);r e s pon s e.a d dHcade r(H Con t e n t-D i s p o s it i on,attach me n t;fi 1 cn a mc=+f i le n am e+”);int fi 1 eLength=(in t)fi 1 e.l e ngth();r e s p o n s e.s e tC o ntentLcng t h(fil e Leng t h);/*假 如 文 献 长 度 大 于 0*/。if(fileL e n g th!=0)。/*创 建 输 入 流 可。I n pu t Stre a m i nStr e am=n e w Filelnpu t Stre a m(fi 1 e);b y t e buf=n e w byte|4096;/*创 建 输 出 流*/Serv 1 e tOutput S t re a m se r v 1 etO S=r es p o nse.g etOut p utStream();int r e a d L e ngth;w h i l e(r e a d L e n g t h=in S iream.read(bu f)!=-1)(se r v 1 e 10 S.w r i t e(buf,0,re a dL e ng t h);)in S t ream.cl o s e();s e rv 1 e tOS.f l u s h();。serv 1 e t OS.close();0)叩 u b lie void d o Pos t(Ht t p S e rvle t Req u est requ e st,H t tp S ervletResponse resp o n s e)。thr o ws S erv 1 e t Excepti o n,lOExccpti o n(r e s p ons e.setContcntTypc(te x t/h t nil);PrintWriter o u t=r e s p o n s e.getWr i ter();o u t。.pr i n tln();ooou t.printInC);。内 u t.print 1 n(n A S e r v l e t);oout.prin t ln(n n);oout.p r i nt(n Th i s i s”);u t.pr i n t(thi s.getCl a s s();u t.pr i ntln(u s i ng th e POST met h od);prin t ln(/BODY”);P U t.println(H):叭)u t.flus h();。out.c iose();apu b 1 i c vo i d i n it()throw s ServletEx c epti o n/P u t y o u r c o d e h e r e=-=Jdb cU t i 1.j a va=-=-=p ackag e u t il;i mport java.sql.C o nn e c t ion;impo r t j ava.sq 1.D r iv e rMana g er;import j ava.sql.R e sultSe t;impor t j a v a.s q 1.S Q L Ex c e ptio n;i m p ort java.sql.S t a t em e n t;publi c class J d bcUtil s t a tic。t ry Class.forName(com.mysql.jdbc.Dr i v e r);)catch(Cla s s No t F o u n d Exc e ptio n e)。e.printStackT r a c e();d|opu b 1 i c static Co n nection ge t Connection()Co n n e ct i o n c o n=nul 1;。S t r i ng url=njdbc:m y s q 1:/loc a I h ost:3 3 06/t e s t;St r ing us e rN am e=roo t;o S tring pwd=*s q 10try(8 c o n=Dri v e rManager.get C onne c t ion(url,u s e rName,pwd);catch(SQ L E x c ept i on e)。e.print S tac k T r a ce();r e t urn c o n;)p u b 1 ic s t atic v o i d rela s e R es o u r c e(Res u 1 tS e t r s,S t a t e m e nt s t,Conn e c tio nc o n n)if(r s!=n u 1 1)。t ry 0rs.c1 o se();。ca t c h(S QLE x ception e)。e.printStackT r a ce();)i f(s t!=null)皿 r y)s t.close();。c a t c h(S Q LExce p tion e)。e.p r i ntSt a c k T r a c e();)i f(co n n!=n ull)t r y(c onn.clo s e();)cat c h(S Q L E x ception e)e.p r in t StackTrac e();。)I四,实 验 结 果用 户 名:空 码:重 置 submit 坏 未 注 册?请 重 新 注 册 注 册 成 功 您 的 用 户 名 是:zhangweiwei您 的 套 码 是:123你 的 名 字 是:zhangweiwei请 选 择 你 要 上 传 的 文 件:C:UserswingDeskt op|浏 览|submit你 的 名 字 是:zhangweiwei请 选 择 你 要 下 载 的 文 件:sqltest.txt download this filetestl.txt download this filetest2.txt download this file 拢 入 要 保 存 的 文 件 名 oo I 逑 素 至 互 万 恭 新 建 文 件 夹 W必 下 栽,桌 面 V.最 近 访 问 的 位 置 库 启 瘴 8 胭 图 片 之 西 音 乐 wing计 算 机 5:帙 网 络 文 件 名(N):副 国 泰 I保 存 类 型(T):|Text Document