还剩38页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
系统管理本系统使用的Web服务目录是mkfriend,是在Tomcat安装目录的webapps目录下建立的Web服务目录现在需要在当前web服务目录下建立如下的目录结构mkfriend\WEB-INF\classes然后根据servlet的包名,在classes下再建立相应的子目录,比如Servlet类的包名为myservlet.control,那么在classes下建立子目录\myservlet\control;如果Javabean类的包名为mybean.data,那么在classes下建立子目录\mybean\data为了让Tomcat服务器起用上述目录,必须重新启动Tomcat服务器1.页面管理本系统用的JSP页面全部保存在Web服务目录mkfriend中所有的页面将包括一个导航条,该导航条由注册、登录、上传照片、浏览会员、修改密码、修改个人信息组成为了便于维护,其它页面通过使用JSP的%@include…%标记将导航条文件head.txt嵌入自己的页面,head.txt保存在Web服务目录mkfriend中head.txt的内容如下head.txt%@pagecontentType=text/html;charset=GB2312%CENTERFontsize=5P网络交友/Font/CENTERtablecellSpacing=1cellPadding=1width=560align=centerborder=0trvalign=bottomtdAhref=register.jspfontsize=2会员注册/font/A/tdtdAhref=login.jspfontsize=2会员登录/font/A/tdtdAhref=upload.jspfontsize=2上传照片/font/A/tdtdAhref=choiceLookType.jspfontsize=2浏览会员/font/A/tdtdAhref=inputModifyMess.jspfontsize=2修改注册信息/font/A/tdtdAhref=modifyPassword.jspfontsize=2修改密码/font/A/tdtdAhref=helpExitLoginfontsize=2退出登录/font/A/tdtdAhref=index.jspfontsize=2返回主页/font/A/td/tr/Font/table主页index.jsp由导航条、一个欢迎语和一幅图片welcome.jpg组成,welcome.jpg保存在mkfriend中用户可以通过在浏览器的地址栏中键入“http://服务器IP:8080/index.jsp”或“http://服务器IP:8080/”访问该主页,主页运行效果如图9-2图9-2主页index.jspindex.jsp(效果如图9-2)%@pagecontentType=text/html;charset=GB2312%HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=cyanCENTERh1FontSize=4color=red欢迎您来这里结交朋友/font/h1imagesrc=welcome.jpgwidth=300height=200/image/CENTER/BODY/HTML2.Javabean与servlet管理本系统的Javabean类的包名均为mybean.data;Servlet类的包名均为myservlet.control由于Servlet类中要使用Javabean,所以为了能顺利地编译Servlet类,首先将Javabean类和Servlet类分别保存到D:\myservlet\control\mybean\data和D:\myservlet\control目录中,分别进入上述目录,编译Javabean类和Servlet类然后将编译通过的Javabean类和Servlet类的字节码件分别复制到mkfriend\WEB-INF\classes\mybean\data和mkfriend\WEB-INF\classes\myservlet\control目录中3.配置文件本系统的Servlet类的包名均为myservlet.control,需要配置Web服务目录的web.xml文件,根据本书使用的Tomcat安装目录及使用的Web服务目录,需将下面的web.xml文件保存到D:\apache-tomcat-
5.
5.20\webapps\mkfriend\WEB-INF目录中web.xmlxmlversion=
1.0encoding=ISO-8859-1web-appservletservlet-nameregister/servlet-nameservlet-classmyservlet.control.HandleRegister/servlet-class/servletservlet-mappingservlet-nameregister/servlet-nameurl-pattern/helpRegister/url-pattern/servlet-mappingservletservlet-namelogin/servlet-nameservlet-classmyservlet.control.HandleLogin/servlet-class/servletservlet-mappingservlet-namelogin/servlet-nameurl-pattern/helpLogin/url-pattern/servlet-mappingservletservlet-nameupload/servlet-nameservlet-classmyservlet.control.HandleUpload/servlet-class/servletservlet-mappingservlet-nameupload/servlet-nameurl-pattern/helpUpload/url-pattern/servlet-mappingservletservlet-namelookRecord/servlet-nameservlet-classmyservlet.control.HandleDatabase/servlet-class/servletservlet-mappingservlet-namelookRecord/servlet-nameurl-pattern/helpShowMember/url-pattern/servlet-mappingservletservlet-namemodifyPassword/servlet-nameservlet-classmyservlet.control.HandlePassword/servlet-class/servletservlet-mappingservlet-namemodifyPassword/servlet-nameurl-pattern/helpModifyPassword/url-pattern/servlet-mappingservletservlet-namemodifyOldMess/servlet-nameservlet-classmyservlet.control.HandleModifyMess/servlet-class/servletservlet-mappingservlet-namemodifyOldMess/servlet-nameurl-pattern/helpModifyMess/url-pattern/servlet-mappingservletservlet-nameexit/servlet-nameservlet-classmyservlet.control.HandleExit/servlet-class/servletservlet-mappingservlet-nameexit/servlet-nameurl-pattern/helpExitLogin/url-pattern/servlet-mapping/web-app会员注册当新会员注册时,该模块要求用户必须输入会员名、密码信息,否则不允许注册用户的注册信息被存入数据库的member表中该模块的模型Javabean描述用户的注册信息;该模块视图部分由两个JSP页面构成,一个JSP页面负责提交用户的注册信息到控制器,另一个JSP页面负责显示注册是否成功的信息;该模块的控制器servlet负责将视图提交的信息写入数据库的member表中,并负责更新视图
1.模型(Javabean)下列Javabean用来描述用户注册信息Register.java%@pagecontentType=text/html;charset=GB2312%HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=cyanFontsize=2CENTERFORMaction=helpRegistername=formtable输入您的信息,会员名字必须由字母和数字组成,带*号项必须填写trtd会员名称:/tdtdInputtype=textname=logname*/td/trtrtd设置密码:/tdtdInputtype=passwordname=password*/td/trtrtd电子邮件:/tdtdInputtype=textname=email/td/trtrtd联系电话:/tdtdInputtype=textname=phone/td/tr/tabletabletrtdFontsize=2输入您的简历和交友标准/td/trtrtdTextAreaname=messageRows=6Cols=30/TextArea/td/trtrtdInputtype=submitname=gvalue=提交/td/tr/table/Form/CENTER/Body/HTML2.视图(JSP页面)本模块视图由两个JSP页面Register.jsp和showRegisterMess.jspRegister.jsp页面负责提供输入注册信息界面;showRegisterMess.jsp负责显示注册反馈信息,比如注册是否成功等图9-3填写注册信息图9-4显示注册结果register.jsp(效果如图9-3)%@pagecontentType=text/html;charset=GB2312%HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=cyanFontsize=2CENTERFORMaction=helpRegistername=formtable输入您的信息,会员名字必须由字母和数字组成,带*号项必须填写trtd会员名称:/tdtdInputtype=textname=logname*/td/trtrtd设置密码:/tdtdInputtype=passwordname=password*/td/trtrtd电子邮件:/tdtdInputtype=textname=email/td/trtrtd联系电话:/tdtdInputtype=textname=phone/td/tr/tabletabletrtdFontsize=2输入您的简历和交友标准/td/trtrtdTextAreaname=messageRows=6Cols=30/TextArea/td/trtrtdInputtype=submitname=gvalue=提交/td/tr/table/Form/CENTER/Body/HTMLshowRegisterMess.jsp(效果如图9-4)%@pagecontentType=text/html;charset=GB2312%%@pageimport=mybean.data.Register%jsp:useBeanid=registertype=mybean.data.Registerscope=request/HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=cyanCENTERFontsize=4color=blueBRjsp:getPropertyname=registerproperty=backNews//Fonttabletrtd注册的会员名称:/tdtdjsp:getPropertyname=registerproperty=logname//td/trtrtd注册的电子邮件:/tdtdjsp:getPropertyname=registerproperty=email//td/trtrtd注册的联系电话:/tdtdjsp:getPropertyname=registerproperty=phone//td/tr/tabletabletrtd您的简历和交友标准/td/trtrtdTextAreaname=messageRows=6Cols=30jsp:getPropertyname=registerproperty=message//TextArea/td/tr/table/CENTER/BODY/HTML3.控制器(servlet)控制器servlet对象的名字是register(见
9.3给出的web.xml配置文件)控制器register负责连接数据库,将用户提交的信息写入到member表,并将用户转发到showRegisterMess.jsp页面查看注册反馈信息HandleRegister.javapackagemyservlet.control;importmybean.data.*;importjava.sql.*;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandleRegisterextendsHttpServlet{publicvoidinitServletConfigconfigthrowsServletException{super.initconfig;try{Class.forNamecom.microsoft.sqlserver.jdbc.SQLServerDriver;}catchExceptione{}}publicStringhandleStringStrings{try{bytebb[]=s.getBytesiso-8859-1;s=newStringbb;}catchExceptionee{}returns;}publicvoiddoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{Connectioncon;Statementsql;Registerreg=newRegister;request.setAttributeregisterreg;Stringlogname=request.getParameterlogname.trimpassword=request.getParameterpassword.trimemail=request.getParameteremail.trimphone=request.getParameterphone.trimmessage=request.getParametermessage;Stringuri=jdbc:sqlserver://
127.
0.
0.1:1433;DatabaseName=MakeFriend;iflogname==nulllogname=;ifpassword==nullpassword=;booleanisLD=true;forinti=0;ilogname.length;i++{charc=logname.charAti;if!c=zc=a||c=Zc=A||c=9c=0isLD=false;}booleanboo=logname.length0password.length0isLD;StringbackNews=;try{logname=handleStringlogname;password=handleStringpassword;phone=handleStringphone;email=handleStringemail;message=handleStringmessage;Stringpic=public.jpg;StringinsertRecord=+logname++password++phone++email++message++pic+;con=DriverManager.getConnectionurisasa;StringinsertCondition=INSERTINTOmemberVALUES+insertRecord;sql=con.createStatement;ifboo{intm=sql.executeUpdateinsertCondition;ifm!=0{backNews=注册成功;reg.setBackNewsbackNews;reg.setLognamelogname;reg.setPasswordpassword;reg.setPhonephone;reg.setEmailemail;reg.setMessagemessage;}}else{backNews=信息填写不完整或名字中有非法字符;reg.setBackNewsbackNews;}con.close;}catchSQLExceptionexp{backNews=该会员名已被使用,请您更换名字+exp;reg.setBackNewsbackNews;}RequestDispatcherdispatcher=request.getRequestDispatchershowRegisterMess.jsp;//转发dispatcher.forwardrequestresponse;}publicvoiddoGetHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{doPostrequestresponse;}}会员登录用户可在该模块输入自己的会员名和密码,系统将对会员名和密码进行验证,如果输入用户名或密码有错误,将提示用户输入的用户名或密码不正确该模块的模型Javabean描述用户登录的信息;该模块视图部分由两个JSP页面构成,一个JSP页面负责提交用户的登录信息到控制器,另一个JSP页面负责显示登录是否成功的信息;该模块的控制器servlet负责验证会员名和密码是否正确,并负责更新视图
1.模型(Javabean)下列Javabean的实例用来描述用户登录信息Login.javapackagemybean.data;publicclassLogin{StringlognamepasswordbackNews=;booleansuccess=false;publicvoidsetLognameStringname{logname=name;}publicStringgetLogname{returnlogname;}publicvoidsetPasswordStringpw{password=pw;}publicStringgetPassword{returnpassword;}publicStringgetBackNews{returnbackNews;}publicvoidsetBackNewsStrings{backNews=s;}publicvoidsetSuccessbooleanb{success=b;}publicbooleangetSuccess{returnsuccess;}}2.视图(JSP页面)本模块视图由两个JSP页面login.jsp和showLoginMess.jsplogin.jsp页面负责提供输入登录信息界面;showLoginMess.jsp负责显示登录反馈信息,比如登录是否成功等图9-5输入登录信息图9-6显示登录结果login.jsp(效果如图9-5)%@pagecontentType=text/html;charset=GB2312%HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=pinkFontsize=2CENTERBRBRtableborder=2trth请您登录/th/trFORMaction=helpLoginMethod=posttrtd登录名称:Inputtype=textname=logname/td/trtrtd输入密码:Inputtype=passwordname=password/td/tr/tableBRInputtype=submitname=gvalue=提交/Form/CENTER/BODY/HTMLshowLoginMess.jsp(效果如图9-6)%@pagecontentType=text/html;charset=GB2312%%@pageimport=mybean.data.Login%jsp:useBeanid=logintype=mybean.data.Loginscope=session/HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=pinkCENTERFontsize=4color=blueBRjsp:getPropertyname=loginproperty=backNews//FontFontsize=2color=cyan%iflogin.getSuccess==true{%BR登录会员名称:jsp:getPropertyname=loginproperty=logname/%}else{%BR登录会员名称:jsp:getPropertyname=loginproperty=logname/BR登录会员密码:jsp:getPropertyname=loginproperty=password/%}%/FONT/CENTER/BODY/HTML3.控制器(servlet)该servlet对象的名字是login(见
10.3给出的web.xml配置文件)控制器login负责连接数据库,查询member表,验证用户输入的会员名和密码是否在member表中,并将用户转发到showRegisterMess.jsp页面查看登录反馈信息HandleLogin.javapackagemyservlet.control;importmybean.data.*;importjava.sql.*;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandleLoginextendsHttpServlet{publicvoidinitServletConfigconfigthrowsServletException{super.initconfig;try{Class.forNamecom.microsoft.sqlserver.jdbc.SQLServerDriver;}catchExceptione{}}publicStringhandleStringStrings{try{bytebb[]=s.getBytesiso-8859-1;s=newStringbb;}catchExceptionee{}returns;}publicvoiddoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{Connectioncon;Statementsql;LoginloginBean=null;StringbackNews=;HttpSessionsession=request.getSessiontrue;try{loginBean=Loginsession.getAttributelogin;ifloginBean==null{loginBean=newLogin;session.setAttributeloginloginBean;}}catchExceptionee{loginBean=newLogin;session.setAttributeloginloginBean;}Stringlogname=request.getParameterlogname.trimpassword=request.getParameterpassword.trim;booleanok=loginBean.getSuccess;logname=handleStringlogname;password=handleStringpassword;ifok==truelogname.equalsloginBean.getLogname{backNews=logname+已经登录了;loginBean.setBackNewsbackNews;}else{Stringuri=jdbc:sqlserver://
127.
0.
0.1:1433;DatabaseName=MakeFriend;booleanboo=logname.length0password.length0;try{con=DriverManager.getConnectionurisasa;Stringcondition=select*frommemberwherelogname=+logname+andpassword=+password+;sql=con.createStatement;ifboo{ResultSetrs=sql.executeQuerycondition;booleanm=rs.next;ifm==true{backNews=登录成功;loginBean.setBackNewsbackNews;loginBean.setSuccesstrue;loginBean.setLognamelogname;}else{backNews=您输入的用户名不存在,或密码不般配;loginBean.setBackNewsbackNews;loginBean.setSuccessfalse;loginBean.setLognamelogname;loginBean.setPasswordpassword;}}else{backNews=您输入的用户名不存在,或密码不般配;loginBean.setBackNewsbackNews;loginBean.setSuccessfalse;loginBean.setLognamelogname;loginBean.setPasswordpassword;}con.close;}catchSQLExceptionexp{backNews=+exp;loginBean.setBackNewsbackNews;loginBean.setSuccessfalse;}}RequestDispatcherdispatcher=request.getRequestDispatchershowLoginMess.jsp;dispatcher.forwardrequestresponse;}publicvoiddoGetHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{doPostrequestresponse;}}上传照片用户可在该模块上传自己的照片如果member中已经存有一幅照片,新上传的照片将替换原有的照片用户在注册时,注册模块给会员的照片是默认的一幅图像public.jpg该模块的模型Javabean描述用户上传的照片图像文件的有关信息;该模块视图部分由两个JSP页面构成,一个JSP页面负责提交图像文件到控制器,另一个JSP页面负责显示上传操作是否成功的信息;该模块的控制器负责将图像文件上传到服务器、将图像文件的名字写入数据库的member表中,必要时还需删除用户曾上传的图像文件;该servlet还负责更新视图,使用户能看到上传操作的结果另外,控制器能阻止未登录用户上传照片
1.模型(Javabean)下列Javabean的实例用来描述上传文件的有关信息UploadFile.javapackagemybean.data;publicclassUploadFile{StringfileNamesavedFileNamebackNews=;publicvoidsetFileNameStringname{fileName=name;}publicStringgetFileName{returnfileName;}publicvoidsetSavedFileNameStringname{savedFileName=name;}publicStringgetSavedFileName{returnsavedFileName;}publicStringgetBackNews{returnbackNews;}publicvoidsetBackNewsStrings{backNews=s;}}2.视图(JSP页面)本模块视图由两个JSP页面upload.jsp和showUploadMess.jspupload.jsp页面负责提供上传文件的表单;showUploadMess.jsp负责显示上传文件的反馈信息 图9-7选择上传的文件 图9-8显示上传文件反馈信息upload.jsp(效果如图9-7)%@pagecontentType=text/html;charset=GB2312%HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=yellowFontsize=2color=blueCENTERBR文件将被上传到Web服务目录mkfrend的子目录image中BR选择要上传的图像照片文件名字不可以含有非ASCII码字符,比如汉字等FORMaction=helpUploadmethod=postENCTYPE=multipart/form-dataINPUTtype=FILEname=fileNamesize=40BRINPUTtype=submitname=gvalue=提交/FORM/CENTER/Font/BODY/HTMLshowUploadMess.jsp(效果如图9-8)%@pagecontentType=text/html;charset=GB2312%%@pageimport=mybean.data.UploadFile%jsp:useBeanid=upFiletype=mybean.data.UploadFilescope=request/HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=cyanCENTERFontsize=2color=blueBRjsp:getPropertyname=upFileproperty=backNews//FontBRfontsize=2上传的文件名字jsp:getPropertyname=upFileproperty=fileName/BR保存后的文件名字jsp:getPropertyname=upFileproperty=savedFileName/BRimgsrc=image/jsp:getPropertyname=upFileproperty=savedFileName/width=150height=120图像效果/img/FONT/CENTER/BODY/HTML3.控制器(servlet)该servlet对象的名字是upload(见
9.3给出的web.xml配置文件)upload控制器负责检查用户是否是登录用户,如果用户没有登录,upload控制器将把用户定向到登录页面login.jsp;对于登录的用户,upload控制器负责把用户提交的图像文件保存到当前Web服务目录的特定子目录image中保存的图像文件名字是在用户上传的文件名字前面添加上用户的会员名upload控制器同时负责将保存的图像文件名存入member表,然后将用户转发到showUploadMess.jsp页面查看上传操作的反馈信息HandleUpload.javapackagemyservlet.control;importmybean.data.*;importjava.sql.*;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandleUploadextendsHttpServlet{publicvoidinitServletConfigconfigthrowsServletException{super.initconfig;try{Class.forNamecom.microsoft.sqlserver.jdbc.SQLServerDriver;}catchExceptione{}}publicvoiddoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Loginlogin=Loginsession.getAttributelogin;booleanok=true;iflogin==null{ok=false;response.sendRedirectlogin.jsp;}ifok==true{Stringlogname=login.getLogname;uploadFileMethodrequestresponselogname;}}publicvoiduploadFileMethodHttpServletRequestrequestHttpServletResponseresponseStringlognamethrowsServletExceptionIOException{UploadFileupFile=newUploadFile;StringbackNews=;try{HttpSessionsession=request.getSessiontrue;request.setAttributeupFileupFile;StringtempFileName=Stringsession.getId;Filef1=newFiletempFileName;FileOutputStreamo=newFileOutputStreamf1;InputStreamin=request.getInputStream;byteb[]=newbyte
[10000];intn;whilen=in.readb!=-1{o.writeb0n;}o.close;in.close;RandomAccessFilerandom=newRandomAccessFilef1r;intsecond=1;StringsecondLine=null;whilesecond=2{secondLine=random.readLine;second++;}intposition=secondLine.lastIndexOf\\;StringfileName=secondLine.substringposition+1secondLine.length-1;bytecc[]=fileName.getBytesISO-8859-1;fileName=newStringcc;fileName=fileName.replaceAll;StringcheckedStr=fileName.substring0fileName.indexOf.;booleanisLetterOrDigit=true;forinti=0;icheckedStr.length;i++{charc=checkedStr.charAti;if!c=zc=a||c=Zc=A||c=9c=0{isLetterOrDigit=false;break;}}ifisLetterOrDigit==false{response.sendRedirectupload.jsp;}StringsavedFileName=logname.concatfileName;random.seek0;longforthEndPosition=0;intforth=1;whilen=random.readByte!=-1forth=4{ifn==\n{forthEndPosition=random.getFilePointer;forth++;}}Filedir=newFileD:/apache-tomcat-
6.
0.13/webapps/mkfriend/image;dir.mkdir;Filefile[]=dir.listFiles;forintk=0;kfile.length;k++{iffile[k].getName.startsWithlognamefile[k].delete;}FilesavingFile=newFiledirsavedFileName;RandomAccessFilerandom2=newRandomAccessFilesavingFilerw;random.seekrandom.length;longendPosition=random.getFilePointer;longmark=endPosition;intj=1;whilemark=0j=6{mark--;random.seekmark;n=random.readByte;ifn==\n{endPosition=random.getFilePointer;j++;}}random.seekforthEndPosition;longstartPoint=random.getFilePointer;whilestartPointendPosition-1{n=random.readByte;random
2.writen;startPoint=random.getFilePointer;}random
2.close;random.close;Stringuri=jdbc:sqlserver://
127.
0.
0.1:1433;DatabaseName=MakeFriend;Connectioncon=DriverManager.getConnectionurisasa;Statementsql=con.createStatement;ResultSetrs=sql.executeQuerySELECT*FROMmemberwherelogname=+logname+;ifrs.next{ifisLetterOrDigit{intmm=sql.executeUpdateUPDATEmemberSETpic=+savedFileName+wherelogname=+logname+;ifmm!=0{backNews=fileName+成功上传;upFile.setFileNamefileName;upFile.setSavedFileNamesavedFileName;upFile.setBackNewsbackNews;}}}con.close;f
1.delete;}catchExceptionexp{backNews=+exp;upFile.setBackNewsbackNews;}RequestDispatcherdispatcher=request.getRequestDispatchershowUploadMess.jsp;dispatcher.forwardrequestresponse;}publicvoiddoGetHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{doPostrequestresponse;}}浏览会员信息该模块负责分页显示注册会员的信息,包括会员名、广告标题…广告照片等,同时提供查找功能,即用户可以查找某个会员的信息该模块的模型Javabean分别描述会员信息和分页信息;该模块视图部分由三个JSP页面构成,一个JSP页面负责提交用户浏览会员信息的方式分页浏览全部会员信息、浏览特定会员信息,另外两个JSP页面分别负责分页显示全体会员信息和显示特定会员信息息;该模块的控制器servlet使用doPost方法查询数据库member表中的全部记录,并对记录进行分页处理,使用doGet方法查询数据库member表中特定的记录另外,控制器能阻止未登录用户浏览和查询会员信息
1.模型(Javabean)模型由两个Javabean,其源文件分别是MemberInform.java和ShowByPage.java下列Javabean描述会员信息MemberInform.javapackagemybean.data;publicclassMemberInform{StringlognameemailphonemessagepicbackNews;publicvoidsetLognameStringname{logname=name;}publicStringgetLogname{returnlogname;}publicvoidsetEmailStringem{email=em;}publicStringgetEmail{returnemail;}publicvoidsetPhoneStringph{phone=ph;}publicStringgetPhone{returnphone;}publicStringgetMessage{returnmessage;}publicvoidsetMessageStringm{message=m;}publicStringgetPic{returnpic;}publicvoidsetPicStrings{pic=s;}publicStringgetBackNews{returnbackNews;}publicvoidsetBackNewsStrings{backNews=s;}}下列Javabean描述记录分页信息ShowByPage.javapackagemybean.data;importcom.sun.rowset.*;publicclassShowByPage{CachedRowSetImplrowSet=null;//存储表中全部记录的行集对象intpageSize=10;//每页显示的记录数intpageAllCount=0;//分页后的总页数intshowPage=1;//当前显示页StringBufferpresentPageResult;//显示当前页内容publicvoidsetRowSetCachedRowSetImplset{rowSet=set;}publicCachedRowSetImplgetRowSet{returnrowSet;}publicvoidsetPageSizeintsize{pageSize=size;}publicintgetPageSize{returnpageSize;}publicintgetPageAllCount{returnpageAllCount;}publicvoidsetPageAllCountintn{pageAllCount=n;}publicvoidsetShowPageintn{showPage=n;}publicintgetShowPage{returnshowPage;}publicvoidsetPresentPageResultStringBufferp{presentPageResult=p;}publicStringBuffergetPresentPageResult{returnpresentPageResult;}}2.视图(JSP页面)本模块视图由三个JSP页面choiceLookType.jsp、showAllMember.jsp和showLookedMember.jspchoiceLookType.jsp负责将浏览会员的方式提交给控制器,showAllMember.jsp负责分页显示全体会员的信息,showLookedMember.jsp负责显示被查找的会员的信息图10-9选择浏览方式图
9.10分页显示会员信息图9-11显示某个会员的信息choiceLookType.jsp(效果如图10-9)%@pagecontentType=text/html;charset=GB2312%HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=cyancenterFontsize=3tableFORMaction=helpShowMembermethod=postname=formBR分页显示全体会员INPUTtype=hiddenvalue=1name=showPagesize=6INPUTtype=submitvalue=显示name=submit/FormFORMaction=helpShowMembermethod=getname=formbr输入要查找的会员名INPUTtype=textname=lognamesize=6INPUTtype=submitvalue=显示name=submit/FORM/BODY/HTMLshowAllMember.jsp(效果如图9-10)%@pagecontentType=text/html;charset=GB2312%%@pageimport=mybean.data.ShowByPage%jsp:useBeanid=showtype=mybean.data.ShowByPagescope=session/%@includefile=head.txt%/HEADHTMLBodycenterBR当前显示的内容是tableborder=2trth会员名/thth电话/ththemail/thth简历和交友标准/thth用户照片/th/trjsp:getPropertyname=showproperty=presentPageResult//tableBR每页最多显示jsp:getPropertyname=showproperty=pageSize/条信息BR当前显示第Fontcolor=bluejsp:getPropertyname=showproperty=showPage//Font页共有Fontcolor=bluejsp:getPropertyname=showproperty=pageAllCount//Font页BR单击“上一页”或“下一页”按纽查看信息TabletrtdFORMaction=helpShowMembermethod=postInputtype=hiddenname=showPagevalue=%=show.getShowPage-1%Inputtype=submitname=gvalue=上一页/FORM/tdtdFORMaction=helpShowMembermethod=postInputtype=hiddenname=showPagevalue=%=show.getShowPage+1%Inputtype=submitname=gvalue=下一页/Form/tdtdFORMaction=helpShowMembermethod=post输入页码Inputtype=textname=showPagesize=5Inputtype=submitname=gvalue=提交/FORM/td/tr/Table/Center/BODY/HTMLshowLookedMember.jsp(效果如图9-11)%@pagecontentType=text/html;charset=GB2312%%@pageimport=mybean.data.MemberInform%HEAD%@includefile=head.txt%/HEADjsp:useBeanid=informtype=mybean.data.MemberInformscope=request/HTMLBODYbgcolor=pinkCentertableborder=2trth会员名/thth电话/ththemail/thth简历和交友标准/thth用户照片/th/trtrtdjsp:getPropertyname=informproperty=logname//tdtdjsp:getPropertyname=informproperty=phone//tdtdjsp:getPropertyname=informproperty=email//tdtdjsp:getPropertyname=informproperty=message//tdtdimgsrc=image/jsp:getPropertyname=informproperty=pic/width=50height=50/img/td/table/Center/BODY/HTML3.控制器(servlet)该模块控制器的名字是lookRecord(见
9.3给出的web.xml配置文件)lookRecord使用doPost方法查询数据库member表中的全部记录,并对记录进行分页处理,使用doGet方法查询数据库member表中特定的记录另外,控制器lookRecord能阻止未登录用户浏览和查询会员信息HandleDatabase.javapackagemyservlet.control;importmybean.data.*;importcom.sun.rowset.*;importjava.sql.*;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandleDatabaseextendsHttpServlet{CachedRowSetImplrowSet=null;publicvoidinitServletConfigconfigthrowsServletException{super.initconfig;try{Class.forNamecom.microsoft.sqlserver.jdbc.SQLServerDriver;}catchExceptione{}}publicvoiddoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Loginlogin=Loginsession.getAttributelogin;booleanok=true;iflogin==null{ok=false;response.sendRedirectlogin.jsp;}ifok==true{continueDoPostrequestresponse;}}publicvoidcontinueDoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Connectioncon=null;StringBufferpresentPageResult=newStringBuffer;ShowByPageshowBean=null;try{showBean=ShowByPagesession.getAttributeshow;ifshowBean==null{showBean=newShowByPage;//创建Javabean对象session.setAttributeshowshowBean;}}catchExceptionexp{showBean=newShowByPage;session.setAttributeshowshowBean;}showBean.setPageSize3;//每页显示3条记录intshowPage=Integer.parseIntrequest.getParametershowPage;ifshowPageshowBean.getPageAllCountshowPage=1;ifshowPage=0showPage=showBean.getPageAllCount;showBean.setShowPageshowPage;intpageSize=showBean.getPageSize;Stringuri=jdbc:sqlserver://
127.
0.
0.1:1433;DatabaseName=MakeFriend;try{con=DriverManager.getConnectionurisasa;Statementsql=con.createStatementResultSet.TYPE_SCROLL_SENSITIVEResultSet.CONCUR_READ_ONLY;ResultSetrs=sql.executeQuerySELECT*FROMmember;rowSet=newCachedRowSetImpl;//创建行集对象rowSet.populaters;con.close;//关闭连接showBean.setRowSetrowSet;//数据存储在showBean中rowSet.last;intm=rowSet.getRow;//总行数intn=pageSize;intpageAllCount=m%n==0m/n:m/n+1;showBean.setPageAllCountpageAllCount;//数据存储在showBean中presentPageResult=showshowPagepageSizerowSet;showBean.setPresentPageResultpresentPageResult;}catchSQLExceptionexp{}RequestDispatcherdispatcher=request.getRequestDispatchershowAllMember.jsp;dispatcher.forwardrequestresponse;}publicStringBuffershowintpageintpageSizeCachedRowSetImplrowSet{StringBufferstr=newStringBuffer;try{rowSet.absolutepage-1*pageSize+1;forinti=1;i=pageSize;i++{str.appendtr;str.appendtd+rowSet.getString1+/td;str.appendtd+rowSet.getString3+/td;str.appendtd+rowSet.getString4+/td;str.appendtd+rowSet.getString5+/td;Strings=imgsrc=image/+rowSet.getString6+width=100height=100/;str.appendtd+s+/td;str.append/tr;rowSet.next;}}catchSQLExceptionexp{}returnstr;}publicvoiddoGetHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Loginlogin=Loginsession.getAttributelogin;booleanok=true;iflogin==null{ok=false;response.sendRedirectlogin.jsp;}ifok==true{continueDoGetrequestresponse;}}publicvoidcontinueDoGetHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{MemberInforminform=newMemberInform;request.setAttributeinforminform;Stringlogname=request.getParameterlogname;Connectioncon=null;Stringuri=jdbc:sqlserver://
127.
0.
0.1:1433;DatabaseName=MakeFriend;try{con=DriverManager.getConnectionurisasa;Statementsql=con.createStatement;ResultSetrs=sql.executeQuerySELECT*FROMmemberwherelogname=+logname+;ifrs.next{inform.setLognamers.getString1;inform.setPhoners.getString3;inform.setEmailrs.getString4;inform.setMessagers.getString5;inform.setPicrs.getString6;inform.setBackNews查询到的会员信息;}con.close;RequestDispatcherdispatcher=request.getRequestDispatchershowLookedMember.jsp;dispatcher.forwardrequestresponse;}catchSQLExceptionexp{inform.setBackNews+exp;}}}修改密码登录的用户可在该模块修改密码该模块的模型Javabean描述密码的有关信息该模块视图部分由两个JSP页面构成,一个JSP页面负责提交用户的新旧密码到控制器,另一个JSP页面负责显示修改是否成功的信息该模块的控制器servlet负责修改密码
1.模型(Javabean)下列Javabean的实例用来描述修改密码有关信息Password.javapackagemybean.data;publicclassPassword{StringoldPasswordnewPasswordbackNews=;publicvoidsetNewPasswordStringpw{newPassword=pw;}publicStringgetnewPassword{returnnewPassword;}publicvoidsetOldPasswordStringpw{oldPassword=pw;}publicStringgetOldPassword{returnoldPassword;}publicStringgetBackNews{returnbackNews;}publicvoidsetBackNewsStrings{backNews=s;}}2.视图(JSP页面)本模块视图由两个JSP页面modifyPassword.jsp和showNewPasswor.jspmodifyPassword.jsp页面负责提供输入密码界面;showNewPasswor.jsp负责显示修改密码的反馈信息图9-12修改密码图9-13显示修改密码结果modifyPassword.jsp(效果如图9-12)%@pagecontentType=text/html;charset=GB2312%HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=cyanFontsize=2CENTERBR请输入您的当前的密码和新密码FORMaction=helpModifyPasswordMethod=postBR当前密码:Inputtype=passwordname=oldPasswordBR新密码:Inputtype=passwordname=newPasswordBRInputtype=submitname=gvalue=提交/Form/CENTER/BODY/HTMLshowNewPassword.jsp(效果如图9-13)%@pagecontentType=text/html;charset=GB2312%%@pageimport=mybean.data.Password%jsp:useBeanid=passwordtype=mybean.data.Passwordscope=request/HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=yellowCENTERBRjsp:getPropertyname=passwordproperty=backNews/BR您的新密码jsp:getPropertyname=passwordproperty=newPassword/BR您的旧密码jsp:getPropertyname=passwordproperty=oldPassword//FONT/CENTER/BODY/HTML3.控制器(servlet)控制器负责连接数据库,根据当前用户注册的会员名修改member表中该会员的password字段的值,并转发修改信息到showModifyMess.jsp页面另外,控制器能阻止未登录用户浏览进行修改密码操作HandlePassword.javapackagemyservlet.control;importmybean.data.*;importjava.sql.*;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandlePasswordextendsHttpServlet{publicvoidinitServletConfigconfigthrowsServletException{super.initconfig;try{Class.forNamecom.microsoft.sqlserver.jdbc.SQLServerDriver;}catchExceptione{}}publicvoiddoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Loginlogin=Loginsession.getAttributelogin;booleanok=true;iflogin==null{ok=false;response.sendRedirectlogin.jsp;}ifok==true{continueWorkrequestresponse;}}publicvoidcontinueWorkHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Loginlogin=Loginsession.getAttributelogin;Connectioncon=null;Stringlogname=login.getLogname;PasswordpasswordBean=newPassword;request.setAttributepasswordpasswordBean;StringoldPassword=request.getParameteroldPassword;StringnewPassword=request.getParameternewPassword;Stringuri=jdbc:sqlserver://
127.
0.
0.1:1433;DatabaseName=MakeFriend;try{con=DriverManager.getConnectionurisasa;Statementsql=con.createStatement;ResultSetrs=sql.executeQuerySELECT*FROMmemberwherelogname=+logname+Andpassword=+oldPassword+;ifrs.next{StringupdateString=UPDATEmemberSETpassword=+newPassword+wherelogname=+logname+;intm=sql.executeUpdateupdateString;ifm==1{passwordBean.setBackNews密码更新成功;passwordBean.setOldPasswordoldPassword;passwordBean.setNewPasswordnewPassword;}else{passwordBean.setBackNews密码更新失败;}}else{passwordBean.setBackNews密码更新失败;}}catchSQLExceptionexp{passwordBean.setBackNews密码更新失败+exp;}RequestDispatcherdispatcher=request.getRequestDispatchershowNewPassword.jsp;dispatcher.forwardrequestresponse;}publicvoiddoGetHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{doPostrequestresponse;}}修改注册信息用户可在该模块修改曾注册的个人信息该模块的模型Javabean描述用户修改的信息;该模块视图部分由两个JSP页面构成,第一个页面负责提交用户的修改信息到控制器,第二个JSP页面负责显示修改是否成功的信息该模块的控制器负责修改曾注册的信息,并能阻止未登录用户使用该模块
1.模型(Javabean)下列的ModifyMessage.java,用来描述用户所做的修改信息ModifyMessage.javapackagemybean.data;publicclassModifyMessage{StringlognamenewEmailnewPhonenewMessagebackNews;publicvoidsetLognameStringname{logname=name;}publicStringgetLogname{returnlogname;}publicvoidsetNewEmailStringem{newEmail=em;}publicStringgetNewEmail{returnnewEmail;}publicvoidsetNewPhoneStringph{newPhone=ph;}publicStringgetNewPhone{returnnewPhone;}publicStringgetNewMessage{returnnewMessage;}publicvoidsetNewMessageStringm{newMessage=m;}publicStringgetBackNews{returnbackNews;}publicvoidsetBackNewsStrings{backNews=s;}}2.视图(JSP页面)本模块视图由两个JSP页面inputModifyMess.jsp和showModifyMess.jspinputModifyMess.jsp页面负责提供修改信息界面,showModifyMess.jsp负责显示修改反馈信息图9-14修改信息图9-15显示修改结果inputModifyMess.jsp(效果如图9-14)%@pagecontentType=text/html;charset=GB2312%HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=pinkCENTERFontsize=2FORMaction=helpModifyMessname=formtabletrtd新联系电话:/tdtdInputtype=textname=newPhone/td/trtrtd新电子邮件:/tdtdInputtype=textname=newEmail/td/tr/tabletabletrtd新简历和交友标准/td/trtrtdTextAreaname=newMessageRows=6Cols=30/TextArea/td/trtrtdInputtype=submitname=gvalue=提交修改/td/trtrtdInputtype=resetvalue=重置/td/tr/tableFont/CENTER/BODY/HTMLshowModifyMess.jsp(效果如图9-15)%@pagecontentType=text/html;charset=GB2312%%@pageimport=mybean.data.ModifyMessage%jsp:useBeanid=modifytype=mybean.data.ModifyMessagescope=request/HEAD%@includefile=head.txt%/HEADHTMLBODYbgcolor=yellowFontsize=3CENTERjsp:getPropertyname=modifyproperty=backNews/您修改信息如下tableborder=1trtd新电话/tdtd新email/tdtd新简历和交友标准/td/trtrtdjsp:getPropertyname=modifyproperty=newPhone//tdtdjsp:getPropertyname=modifyproperty=newEmail//tdtdtextareajsp:getPropertyname=modifyproperty=newMessage//textarea/td/tr/FONT/CENTER/BODY/HTML3.控制器(servlet)该servlet对象的名字是modifyOldMess(见
9.3给出的web.xml配置文件)modifyOldMess负责连接数据库,将用户提交的新的信息写入到member表,并将用户转发到showModifyMess.jsp页面查看修改反馈信息HandleModifyMess.javapackagemyservlet.control;importmybean.data.*;importjava.sql.*;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandleModifyMessextendsHttpServlet{publicvoidinitServletConfigconfigthrowsServletException{super.initconfig;try{Class.forNamecom.microsoft.sqlserver.jdbc.SQLServerDriver;}catchExceptione{}}publicStringhandleStringStrings{try{bytebb[]=s.getBytesiso-8859-1;s=newStringbb;}catchExceptionee{}returns;}publicvoiddoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Loginlogin=Loginsession.getAttributelogin;booleanok=true;iflogin==null{ok=false;response.sendRedirectlogin.jsp;}ifok==true{continueDoPostrequestresponse;}}publicvoidcontinueDoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Loginlogin=Loginsession.getAttributelogin;Stringlogname=login.getLogname;Connectioncon;Statementsql;ModifyMessagemodify=newModifyMessage;request.setAttributemodifymodify;Stringemail=request.getParameternewEmail.trimphone=request.getParameternewPhone.trimmessage=request.getParameternewMessage;email=handleStringemail;message=handleStringmessage;Stringuri=jdbc:sqlserver://
127.
0.
0.1:1433;DatabaseName=MakeFriend;StringbackNews=;try{con=DriverManager.getConnectionurisasa;StringupdateCondition=UPDATEmemberSETphone=+phone+email=+email+message=+message+WHERElogname=+logname+;sql=con.createStatement;intm=sql.executeUpdateupdateCondition;ifm==1{backNews=修改信息成功;modify.setBackNewsbackNews;modify.setLognamelogname;modify.setNewEmailemail;modify.setNewPhonephone;modify.setNewMessagemessage;}else{backNews=信息填写不完整或信息中有非法字符;modify.setBackNewsbackNews;}con.close;}catchSQLExceptionexp{modify.setBackNews+exp;}RequestDispatcherdispatcher=request.getRequestDispatchershowModifyMess.jsp;dispatcher.forwardrequestresponse;}publicvoiddoGetHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{doPostrequestresponse;}}退出登录该模块只有一个名字为exit的servlet控制器,exit负责销毁用户的session对象,导致登录失效控制器(servlet)HandleExit.javapackagemyservlet.control;importmybean.data.*;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandleExitextendsHttpServlet{publicvoidinitServletConfigconfigthrowsServletException{super.initconfig;}publicvoiddoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;Loginlogin=Loginsession.getAttributelogin;booleanok=true;iflogin==null{ok=false;response.sendRedirectlogin.jsp;}ifok==true{continueDoPostrequestresponse;}}publicvoidcontinueDoPostHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{HttpSessionsession=request.getSessiontrue;session.invalidate;//销毁用户的session对象response.sendRedirectindex.jsp;//返回主页}publicvoiddoGetHttpServletRequestrequestHttpServletResponseresponsethrowsServletExceptionIOException{doPostrequestresponse;}}。