servlet重入门到精通_第1页
servlet重入门到精通_第2页
servlet重入门到精通_第3页
servlet重入门到精通_第4页
servlet重入门到精通_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.为什么学servlet?剧情:先前如果处理部门查询main.jsp-部门管理-queryAll.jspqueryAll.jsp广大StringpageNoStr=requestsgetParameter(pageNo);ifpageNoStr=null)pageNo=1;else(pageNo=integer.valueof(pageNostrJ;12-11000)*/IntpageNo=Pag&Model.getPageNoFromFrontfrequest.getParameterCpageNo);PageMode1pageMode1=deptservice.queryByPa

2、geNode1(pageNOjpagesize;raquest.setAttribute(pageModel,pagMcdel);request,grequest,g tRequestDispitchertRequestDispitcher( (1,1,deptdept. .jmp)jmp), ,forward(request,response)forward(request,response)f f业务逻辑(纯java代码实现)-dept.jsp心一动专生就每一行%$(dept-deptNo$dept.deptNjAe$dpt.deptLocJ?dpt.deptManagerLiag31七=

3、*3ic=ijmgr/de1ete.pngnclass=troperdeimgonelick=JFde2f1$(deptrdeptuoLing31七=*3rc=iro5r/ecit.pn.girclASS S= =operdtelzngwonelick=*edi(11?dept.CL&ptNo)显示数据(没有任何java代码)什么是jsp?在html中嵌入java代码-jsp最擅长做页面(浏览器上阅读)哪里写java代码最为合适?类-queryAll.jsp中的所有java代码移植到java类最终效果main.jsp-部门管理-请求某一个java类得到想要的数据-dept.jsp页面中

4、显示业务逻辑和页面显示彻底相分离职责也和明确,做页面都只关注jsp,做后台业务逻辑的只关注java类,扩展性和维护性大大提高了2.什么是servlet某个类非常的特殊servlet(1)是一个java类(2)接收用户的请求,处理用户的响应继承HttpServlet3.servlet的入门经典程序helloworld操作步骤(1)定义一个类HelloextendsHttpServlet(2)重写父类的service方法(3)配置servlet(部署servlet)项目的web.xml中配置二1烈怒羔2配置一个别名,通常使用类名也置一个类名的首字母小写Hellocom njwb.servlet H

5、ello-!和上面的别名要一模一稀Hello/Hello(4)部署运行访问LiJSii-iS-DUwwu.yq占*AJt、*n&占1V芹irvqwuw丫,芹 y,J 人上百占 W?throwsServletExceptionflOException(/7处理响应中文乱叫问霞/response.setChdracterEncoding(UTF-8);不好便只铜保证佳外础支持中文.中文会在浏览器上显示告诉浏览器也尊支持,浏览器只M识超文本text/htmlJchars&t=utf-8response+setContentType(text/html;ctiazset=utf-B)上

6、http::8888/teacherservlet01/Hellourl-pattern中/Hello是url中一个组成部分小技巧:响应乱码的处理metahttp-equiv=content-type-lfcontent=text/html;charsetTF-S4.servlet执行原理http::8888/teacher_servlet_01/Hello-发送一个URL给服务器,服务器需要解析URLhttp:-http:-协议 B/Srequest/responseB/Srequest/response-能够找到一台具体的服务器地址(计

7、算机)8888:-访问的是tomcat服务至|了tomcat的webapps目录teacher_servlet_01-访问的具体应用/Hello:去teacher_servlet_01应用的web.xml文件查找有没有一个url-pattern为/Hello如果没有,则报404如果有,找到对应的servlet-name:HelloHello/servlet-nam.e|/Hello再找有没有一个servlet节点中servlet-name也为Hello!servlet配置一个别名,通常使用类名,也置一个类名的苜字母小写-Hellocoin.njwD.servlet.Hello/se.rvlet

8、|-得至“了servlet-class:com.njwb.servlet.Hello通过Class.forName(com.njwb.servlet.Hello”);ClasshelloClass=Class.forNameXxxxxxxx);Hellohello=(Hello)helloClass.newInstance();Methodmethod=helloClass.getDeclaredMethod(service”,HttpServletRequest.class,HttpServletResponse.class)method.invoke(hello,参数);5.jsp和Ser

9、vlet的关系jsp能接收用户请求,响应结果Servlet也能接收用户请求,响应结果jsp运行原理:先翻译成.java再编译成.class最后执行_jspService(),一流的形式输出html信息piiblxefinalCLASSspextendsarg-apaehe.jasper.runtline.HttpJspBaseimplementsorg-apaeiie-jasper.runisrme,Jsp5ourceDependen,c1coniJilibpublicabstractclassHrtpJspBaaeextendsHttpServletimplementsimplementsH

10、ttpJspfageHttpJspfage11publicfinalvoidinit(ServletCcnfigconfig)说明jsp也是一个servlet(内部最终翻译的结果仍然是一个Servlet)先有servlet再有jsp,为什么有了servlet之后还要有jsp?假设没有jsp技术,请求某个Servlet后,返回一个页面?protectedvoidprotectedvoidservice(HttpServlEtRequestrequestTHttprvletResponsE EresponsethrowsservletExceptionflOException(/处理响应中文乱门问

11、题/response.setchracterEncoding(MUTF-BBJ;不好使只能保证往外输出支持中文,中文会在浏爸器上显示/告诉溺览器也要支持,浏定患只认识超文本text/htnl;charrponsie.g-etContntType(txt/html;charset=iutf-BBP);|/向浏苑器发送一个Hl标签helloworld/Fl.获取一个响应流Printwriterout=response.getwriter();向浏苴器寄出(目的地:浏览器)out.ptintlYhlxRhCwcitlcK/hlAn”会在servlet中拼接html字符串(相当痛苦),所有才弄出一个j

12、sp技术,解决servet本身输出难的缺点。servlet只要使用转发或者重定向到另外一个jsp页面上显示即置。6.servlet的生命周期人的生命周期出生-呱呱落地的一刻1次(2)小托班-幼儿园一小学一初中一高中一大学。学习知识,为了个来走进社会打个基础准备阶段1次(3)为社会做贡献服务阶段左一年右一年。退休。带小孩。(4)眼睛一闭腿一伸-挂了死亡阶段servlet生命周期(面试)(1)实例化(创建对象)tomcat服务器创建被创建1次首次访问时(2)初始化阶段被调用1次首次访问时,且创建对象后(3)服务阶段被调用N次每次访问都会调用销毁阶段(死亡)被调用1次服务器正常终止阶段次数时机实例化

13、1首次访问初始化1首次访问时,且创建对象后服务N每次访问都会调用销毁1服务器正常终止servlet在整个tomcat服务器是单实例多线程首次访问,有一个特例正常是从客户端调用服务端的servlet(2)程序内部直接调用(tomcat在启动的时候直接创建servlet对在web.xml中酉已置load-on-startup如果有多个servlet配置load-on-startup,则数字越小的优先级越高(先启动),对于多个servlet中有先后关系的AServlet依赖BServlet,通常使用load-on-startup,只是给服务器内部用的,作为启动类(置一加载一些配置信息),不需要给外部

14、使用,则不需要酉已置servlet-mappingservlet继承体系(1)servlet的相关jar包去tomcat的lib目录找巴jasper-eljartxecutabieJarrile1U1Kb1U1Kb_ _jasperjdtjarjasperjdtjar2009/5/1412009/5/141;1515Execytubls-JarAleExecytubls-JarAleL363KBL363KB_ _jsp-apijarjsp-apijar2005/5/1412005/5/141:1515ExecutableJarFile75KB75KB金:servlet-api.jar2009/

15、5/141:15ExecutableJarAle87KBKB产 toniicat-coyotejar2009/5/141:152009/5/141:15ExecutableJarAle733KB733KBtomcatdbcpjar20W/5/W1:1520W/5/W1:15ExecutableJarFileExecutableJarFile193KB193KB国 tomcat-i18n-esjar2003/5/141:15ExecutableJarfile65KB65KB(2)学习servlet中的源码getanewskill如何走读源码走读代码最终的效果:大致了解代码的脉络,忽略细节找一个入

16、口dsHttpServletInfhelloO1*ce(HttpservletRequestrequest,HttpservletResponseresponse)etException,lOExceptionIIII1111I-Ifa-II-Ifa-IJ J1 1、I II I4A4AI I1 1I4I4、HttpServlet一堆的静态常量规定了7个请求方式GETPOST最重要(2)7个do方法-对应了不同的请求方式方法的实现-统一做了一件事发送一条错误信息(3)service方法、整个servlet中的入口方法-个来都会调用service方法,在service方法的内部根据不同的请求方式

17、调用不同的do方法其实,service方法中已经规定了调用方式一其实就是一个模版方法(使用了模版白设计模式)使用servlet实现注册功能(模拟)fompost用户乐inputinputtype=type=H Htexttext,r,rname=name=userNaneuserNaneid=id=userNaioen/xbr/密码:4input4inputtype=type=passpassnaine=id=naine=id=rrpwd/pwd/性别:VinputVinputtype=type=FFFFrac?iorac?io, , value=HCflname=name=sexsexinp

18、uttype=nradionvalue=w02FFname=,fsex,Fchecked=c?i&cJiedw/?ir爱好;cinputtype=,rc2iecJcboxname=l,ri2o?2?yMaluE=38/王者荣耀lolinputtype=ncheckboxname=hobbyvalue=ftcc*海售争辑原来regist.jspdoRegist.jsp接收用户的注册请求处理业务响应结果注册成功注册失败现在regist.jsp-(个原来doRegist.jsp中的java代码移动到类中处理)接收用户的注册请求处理业务响应结果注册成功注册失败8importjavax-serv

19、let-http.HttpServletResponse?9/*10*接收用的注朗请求11*SiauthoE1Administrator12*137L14publicclasspublicclassRegistServletRegistServletextendsextendsHttpServletHttpServletI1%;*17.眼舞方法18719OverrideprotectedvoidserviceHttpServletRequestrequest,HttpServletResponseresponse)ZlthxcwsservietExceptlontlOException22/原

20、来R之之流职梦的,SE工lt(P的写注是一拗一群23request+setcharacterEncodingtUTFT);252.获职整粒StringuseiNdmcrequest.getPacBinetsr(userName);27.stringpud=request-getPardtneter(pud11);25System.Dut.printlrL(u3erNaiL&+pwd;31323.处理响应3334rc-多态?(1)继承关系(2)子类一定要重写父类的方法(3)子类对象赋值给父类,父类的引用指向子类,里氏替换原则个RegistServlet子类赋值给HttpServlet(4

21、)父类调用方法最终透明的调用子类方法HttpServlet.service-RegistServlet.service既然父类HttpServlet中service方法是一个入口方法,也是一个模版方法,(不置一改变)如果不重写service方法, 只需要重写子类的doGet或者doPost方法到底重写哪个方法?-取决于提交的方式小技巧:如果明确使用post提交(method=post)就重写doPost除此之外,只要重写doGet即置如果我有一个请求,这个请求需要支持get和post,必须重写doGet和doPost得出一个结论:一后使用到servlet的时候一定要重写doGet或者doPos

22、t,千万不要重写service错误的行为:重写了service方法,但是破坏了父类的模版方法protectedvoiddoPost(HttpServletRequest工巳questf工巳tK巳5ponseresponse)throwsServletExceptionflOException/原果j有口怎之萩蒙叠掖,3BTU1巳t中的看法是一横一样/I,饯曾编码集request,setCharactsrEncoding(UTF-8)i”2.获取多翻StringuserNamerequest.getParaiweter(userName);Stringpwd.request.getParamet

23、er(!,pwdir)rISystemout.printIn(userName#+pwd);/博用号1!?廿工凸目/丸处理响应overrideProtectedvpiddoGet(HttpServletRequestrequest.HttpservletRe5jnonseresponse)thusraServletException?lOException(this.doPost(request了response);Overrideprotected,voidservice(HttpServletRequestargOpHttpservletResponsearglJthrowsservlet

24、ExceptionPlOExceptionSystem,out.println(iflfflservice11);面试题:(1)请谈一谈你对servlet的认识a.servlet是什么?b.为什么使用servlet?c.servlet的生命周期d.servlet的继承体系extendsGenericServlet使用了模版设计模式补充一个设计模式:模版设计模式:场景:融资供应链平台,和银行之间做融资企业、苏宁、银行之间三方融资核心中行交行citybank什么是模版设计模式父类设计一个模版方法DealFile类中设计一个deal方法模版方法:满足1.按照固有的顺序执行2.共同不变的部分在父类中具

25、体实现解密encode()入库importFile()3.置变部分,父类不能实现a.使用抽象方法-强迫子类实现b.使用空实现-抛异常(2)子类实现父类中置变部分最终使用父类的模版方法,结合多态,最终调用子类的方法顺序固定有很多是相同部分少星不同部分-设计成一个整版方法使用servlet重构OA系统一部门查询为例原来:main.jsp中点击部门管理-queryAll.jsp业务处理request中设置pageModel-转发至Udept.jspmain.jsp中点击部门管理-QueryDeptsServlet业务处理request中设置pageModel-转发至Udept.jsp面试题:jsp内

26、置对象的类型outJspWriterrequestHttpServletRequestresponseHttpServletResponsesessionHttpSessionrequest.getSession()applicationconfigpagepageContextexception新增登录+验证码功能ililcclasscclassDeptAddServletextendsextendsHttpservlet(OverrideprotectedvoidprotectedvoiddoPost(HttpServletRequestrequest,HttpServletRespons

27、ere:StringdeptNo=reque51.getParametert1deptNcn);stringdeptNamestringdeptName= =request.getParaineterrequest.getParaineterfdeptNamefdeptName) );stringdeptLoc=requestrequest.getParameter(deptLoc);StringdeptManager=request.getParameter(deptManager);etjavaLoginServlet冏 m 国privateUserserviceuserservice=(

28、UserserviceObjectFactory,geSoverrideprotectedvoiddoPost(HttpServletReqiiestreqiiestfHttpServletRe1.设置编码request,setCharacterEncodingCUTF-3);_2.获取侑StringuserName=request.getParameter(userName);Stringpwd=request.getParameter(,Tpwd,T);/客户端输入Stringcode=request.getParameter,Tcode,T);有什么问题?重复(2)如果个来需要个UTF-

29、8改成GBK?(个编码硬编码到每个类中)修改起来不遍历,一个类一个类的去找,修改类需要重新部署一停服务器。怎么办?需找一劳永逸的办法使用配置?goonservlet继承体系|获取servlet相关的配置最佳实践oervletnameServletConfigServletcom.njwb.servlet.servletconfigservlet7/servlet-cla335-param-namencoding/param-nameLitf-8(1)直接获取个servlet中的配置定义成类中的属性该属性在初始化时赋值:置一直接调用this.getInitParamter或this.getSer

30、vletConfig.getInitParameter();1*荻取5日皿1位柏美配苣2*方法33*i*gauthorAdministrator5*6i/initOinitO| |serviceQserviceQdestroyOgetServletConfigOgetServletConfigO信承使用实线箭头工琥使用虚线前头7publicclassServletConfigervle13extendsHttpServletprivatestringencoding;9。日overrideLpublicvoidinit()throwsServletException2/初始化之前,荻取ehco

31、ding保存为一个JK博encoding,this,getInitParameter(encodingr)45苑overtideprotectedvoidvoiddoGetHttpServltRequestrequest,HtHttpServievietRespanseresponse)throwsthrowsservietE5Ccept tionflOExceptionfSystem,out.printin(encoding);D1123(2)拥有自己的ServletConfig得使用init(ServletConfigconfig)个con万g作为类的一个属性,在初始化时给config赋值

32、,后面直接从自己的config中获取参数值L-/*I*薪职SEEVlet相关配盥m*方法5 5i*i*authorAdministrator5*?73publicclasspublicclassservletconfigserviet7extendsextendsHttpservletprivateprivateStringencoding;privateprivateservl&tconfigccinfig;/住用弓己的“nUyL)I/overtidepublicvoidpublicvoidinit(ServletConfigcontig)throwsthrowsSer rvletE

33、zception5thisthis config=config;|3).?=1?=1OverrideprotectedvoiddoGet(Httpserv1etRequestrequest,HttpservletResponseresponthrowsthrowsServietExceptiptionlOException(encoding=config.ig.getinitParameterParameter(encoding);System*out*pzintln(encoding);servlet第三天使用ServletConfig来改造原来的Servlet中的编码处理?loginSer

34、vletcom.njwb*oaservlet*LoginServletencodingUTF-S实验的现象:在LoginServlet中能获取encoding配置参数,但是在DeptAddServlet中获取不到说明:一个servlet只有一个ServletConfig对象与之对应servlet中的参数配置只对当前的servlet有效,其他的servlet不能共享最笨的办法:每个servlet都配置-会造成重复代码智慧的方法:使用共享使用context-paramcontext:上下文,周遭环境一篇文章的周遭环境一个教室的周遭环境:灯电脑人桌子,都在教室的环境中context-param-服务

35、器的周遭环境encodingUTF-8如何获取context-param中的参数?(1)获得ServletContext对象(2)通过ServletContext对象,调用getInitParameter方法ServletConfigServletContexta.分别与jsp中哪个内置对象类型对应面试题:jsp内置对象的类型outJspWriterrequestHttpServletRequestresponseHttpServletResponsesession-session-HttpSessionrequest.getSession()applicationServletContext

36、configServletConfigpagepageContextexceptionb.什么时候使用servletConfig,什么时候使用servletContext?如果只是某个servlet特有的配置,则需要个参数配置在具体的servlet内部,使用servletConfig对象获取如果多个servlet都使用相同配置,则需要个参数配置在context-param中,使用servletContextnjwb_oa_07:参数配置有重复|-Servlet中有重复代码?njwb_oa_08:参数配置没有重复LoginrvleLjdh|!aKI17*接收用户的登录谓求10土包31Msthst

37、h口工Administrator21HttpServlet|pL廿.七/String口口coding;1-1-I I24-overridepublicvoidpublicvoidinit()th-rcwsth-rcwsServletExceptionthisdeciding-tlLiii.getServletcontext()*getInitParamster(encoding)J) )I IIprivateuserServiceuserservice-(userseivice)objectFactory.5&63/3(313&10!);Overrideprotectedvoi

38、dprotectedvoiddloPost(HttpServletRequetrequest,HttpServletRep&nseresponse)throwsthrowsservletExc&ptionTOExceptionL1.设且编码Irequest aetCharacterEncoding(thisthis encoding);i|stringuserNMerequest,getParameter(userName)F F39+importjava, io.lOException?Q?接收部门的添加语求i i* * authorAdjninistratorauthorA

39、djninistratorp3jp3jiuiu匚工 mm 孑由2口乌14今总工置上匕住率endwendwHttpHttpServletlo.Iwalo.Iwa匕eStrinciignmcLiric;IOverridepublicvoidpublicvoidinitinitthrowsthrowsservletException.servletException.overrideprotectedvoiddoPost(HttpServletRequestrequest,HttjServletResponseresponse!throwsServletExceptionrlOExceptionUs

40、eruser-(User)request-getSession().getfittribute(user11);ifif(user=没有登录/跳转到提示页面xeturnxeturn;JrequestsetCharacterEncoding(this.encoding);回顾:我们的很多资源需要先登录再使用?-一登录权限的认证293031323334353637jsp文件servlet127,0,0,1:3S86/njwboa08/njwb/mainjsp南京网博教育集团人事管理教务管理系统管理部门安号鼎用称隔门位 w部门负激人便作列&A0008nameSIoc8Ioc8rnanger8

41、。景图A00091nmme9lo49lo49rm加gpr9o 晕图AD010namelOladOladOmangerlOo 鼻图AD011nanirellhellhellmanagerllo 晕图ADD12namel?kxl?kxl?mangerl2。事团巧页上一页下一页尾页第 174174 页早访问火狐官方站点V新手上路宝用网址JD京东6.18目前都置一访问?-安全性差服务端的文件资源一定要考虑安全性如果你登录了,我就给你访问,如果没有登录就提示信息,强制登录传统的办法一控制jsp文件为例,在需要控制的jsp文件中添加控制代码先控制main.jspnjwb_oa_09c:iftest=M$u

42、ser=null日lert对不起,请先登录D;location.href=njwb/login.jsp;在控制deptAdd.jspc:iftest=M$user=null日lert对不起,请先登录D;location.href=njwb/login.jsp;问题:重复代码-提取个公共的代码提取到一个jsp中prompt/prompt.jspnjwb_oa_10在需要使用到控制的jsp文件中包含prompt/control.jsp使用include指令%include静态包含-在编译的时候就个一个文件包含到另外一个文件中control.jsp123ml一-4StringpromptPath=r

43、equest,getContextPathCF;三Stringprompt.BajePath=rEqu与st-gEtWcheme)十*1:ffEquest.getSierverNanH11t“:trQquiB3t.giet5Ei:grRoi:tJ)fpraoiptPath+7J4399,0csifte5t=user=nuLZL*.1-5-cripttype=avacziptmJLertL对不如调光星聚J?.3legationrhref=*njwb/logiajbsp11JX.5Ijmainjspq1a/prompt./spJ*deptAdd.jspJE-121 2 整体的思路(1)个共同的控制

44、代码移植到control.jsp该页面中需要删除不需要的(2)在需要控制的页面中使用include指令,注意file的写法使用相对路径好处:只要使用include就能控制你想控制的jsp页面缺点:(1)页面中还是有include指令(2)如果控制servlet如控制DeptAddServletthisthis.encodingthis.gatServlatContext().getlnitParainater(encoding)F FprotectedvoiddoPost(HttpservletRequestrequest,HttpservletResponseresponse)throwss

45、ervletException,lOException(useruser=(userrequest*getsession0*getAttributeH,user?:L.:2ititfuserfuser=null)null):3,/跳转到拄示正面H Hreturn;return;151 1*pauthorAdministrator*1t/t/publicclassDeptDe1ServletextendsHttpServlet(ovierrideprotectedvoiddoGet(HttpservletRequestrequestjHttpservletResponseresponse)thr

46、owsServletException,lOExceptionuseruser=(user)request.getsesaion().getAttribute(uaer);ifif(usernull)/应有登量/跳转到提示页面return;return;iservlet资源控制不了,必须写java代码控制-所有的servlet都需要添加相同的java代码-重复代重复的位置:方法的内部publicclassDeptDelServletextendsHttpServletOverrideprotectedvoiddoGet(HttpServletRequestrequest,throwsServl

47、etException,lOException登录控制|:6)override518 8qQ Qcontrol(request);publicvoidcontrol(HttpservletRequestrequest)Useruser=(User)request.getSession(),getAttribute(T,u5erT,);ifif(user=没有登录/跳转到提示页面return; */publicclasspublicclassDeptAddServ1DeptAddServ1etetextendsextendsHttpServletHttpServlet pxivatepxivat

48、eStringencoding;overridepublicvoidpublicvoidinitinit(J(JthrowsthrowsServletExceptionServletException( (this.encoding=this.getServletContext().getlnitParmeter(Encoding-*);IoverrideprotectedvoiddoPost(HttpServletRequestrequestfHttpServletResponseresponse)throwsServletException,lOException,/登录枳限控制contr

49、ol(request)publicvoidpublicvoidcontrol(HttpservletRequestr&quest)Useruser=(User)request.getSsssionO.getAttribut(user);if(user=null)没有登录/跳转到提示m面return;return;)本来幻想每个servlet中都有control方法,想到使用继承但是很不幸的是已经继承了HttpServlet(单根继承)有的同学说使用接口,每个servlet中依然需要实现control方法依然存在重复代码无能为力办法是有的使用过滤器什么是过滤器?解决重复编码和访问控制的问

50、题生活中的过滤器筛子淘米梦鼻子过滤了粗沙细沙程序中的把骗码的问题统一交给过滤器完成问题:如何使用过滤器操作步骤自定义一个过滤器类implementsFilter(2)重写doFilter方法(3)部署过滤器,配置过滤器web.xml添加一个过滤器原来的做法:起个 servletservlet 中都需要设置编码后取值”造成了重豆代码myFiltercom.njwb.filter.MyFilter-myFilter/filter-nam巳,!过滤器需要拦截所有的3巳rylet请求|忽略.jsp这种请求有置能我访问main*jsp不需要拦截ipIsjdeptAddServlet需要拦截业界日:约定俗

51、成个所有的servlet的url中添加一个后缀.dodeptAddseivlet.doqueryAllDeptServlet*do只要拦截所有一M0结尾的请求即置*.do为了要验证过滤器,需要定义一个servlet,且该servlet的url-pattern一定写成.do结尾,测试看访问servlet时有没有先被过滤器拦截住专令囚:SessionListener:contextInitiali|zed()MyFilter()init()2016-10-1。11i49:05orcr-AnAChP.covot.A.ht.t.nl1.FT说明:当启动服务器时,过滤器已经被创建好,同时初始化好,等待外

52、部请求的到来,随时拦截我们的过滤器会被执行两次,请求到达真正的servlet之前会执行一次,在servlet执行之后(响应之前)也会执行一次使用过滤器统一设置编码定义一个过滤器CharacterEncodingFilter拦截所有的servleturl-pattern*.do重构oanjwb_oa_11准备工作个所有的servlet中编码的代码全部删除(2)个web.xml中所有的servlet的url后加上.do后缀后面推荐这么写删除context-param酉己置(3)页面中的所有请求servlet的地方都加上.do测试(5)植入过滤器开发过滤器配置过滤器(6)测试编码是否正常get提交的

53、编码设置方法定义一个equeftequeft的子类重写 getParametergetParametergetParameterValuesgetParameterValues过滤链多个过滤器组成一个过滤链过滤链的执行过程:按照web.xml中配置自上而下执行,请求的过程,最上方的过滤器先执行请求结束后,最下方的先执行!和配置的顺序有关系使用过滤器统一做登录验证njwb_oa_12准备工作删除原先的jsp验证(2)验证当前没有登录验证(3)定义一个登录验证过滤器AuthorityFilterfilter1filter1filterBfilterBfilterZfilterZ每个过渡器只时一样事

54、配置(4)验证登录权限是否生效重构oanjwb_oa_12*志 servletJJCodeServlet.javam 养 16-W-lJjDeptAddServletjavaK1u-1DeptDelServlet,java355li-l:鼻LoginServletjava3V-lC-lJ;QueryDeptForUpdateServletJiQueryDeptsServletJava二;二,:登录蜘字符犒同栏战的诘泳.do.doJSP,do-servJSP,do-servlet.js.csslet.js.css圄ac c !JZuIl41一 3gl/DeptAddServlet/njwb/pr

55、ompt/error.jsprequest.getRiequestDispatcher(njwb/prompt/error.jsp),forward(requestfresponse);return;return;reque&t.setattribute(operator.Constant*DEPT_ADD);request.getReque3tDispatchertHnjwb/prompt/succeas+sp),forward(requestresponse);trydeptService+deleteById(deptNoJ;catch(OAExceptione)request

56、setAttribute(errorMsg”1r已 getMessage(H;request.getRequestDispatcher(njwb/proropt/error-jsp.forwardKrequest,response);return;return;request setAttribute(11operator1fconstant.DEPTDEL);request getRe:q;LiestDisptcher(njwti/prompt/suecess.jspH).forward(requestPresponse;:textendsHttpServlet分析:现有的代码有什么问题?s

57、ervlet类非常的多,泛滥-类的结构就不清晰如何解决:合弁类,合弁的原则:类的设计原则-单一原则,高内聚,低耦合个共同属性和方法放在一个类中设计一个类DeptActionadd()delete()queryAll()queryForUpdate()个原来的DeptAddServletDeptDelServletQueryDeptForUpdateServletQueryDeptsServlet合并成一个类(2)在servlet中个响应地址硬编码在java类,不便修改(需要重新部署于启动)不使用硬编码,使用配置文件原因:java是高级语言,需要编译后才能运行用什么配置文件?目前为止,我们使用过

58、什么类型的配置文件.properties.txtweb.xmlxml做配置,灵活度高用户自定义的servlet过度依赖HttpServlet,不便扩展(类的单根继承)不继承web开发的两套模式Model1模型login.jsp-doLogin.jsp/1.设置编码/2.获取参数/3.调用service/4.处理响应转发或重定向xxx.jspjsp请求提交给jsp,服务端jsp既做接收页面请求,处理业务逻辑,还做结果的响应(2)Model2模型Model2模型主要解决Model1中职责不明确的问题追求一个目标:业务逻辑和页面显示彻底相分离jsp:页面显示-只是大量静态代码htmlcssjsjav

59、ajava 英主瞿鼻处蝇完重软般争端程离都曷印文件所有的事值都交给j$pj$p曲,大型项目维护和扩展,早期的小哽目置一用,怛是现代项目都t t徽大.因此mwIHLmwIHL模型槌淘汰j j学分为两英:L L专门用户显示数据login.jspmain.jspmain.jsp工接收用户请求r处理响应doLogin.jspdoLogin.jspdoDeptAddl.jspdoDeptAddl.jspjava类:处理业务逻辑-java程序代码jspjava串连Servlet桥梁MVC!M:Model模型UserDeptEmp-实体类一存储数据-javabean(狭义的概念)pojo(2)UserSer

60、viceDeptServiceEmpService|操作数据(实体)-javabean(广义的概念)UserDaoDeptDaoEmpDaoV:View视图能够看得见.jsp.asp.phpC:Controller控制器Servlet什么是javabean:(1)狭义的解释(官方的解释)a.是一个普通类(既不继承也不实现,除了实现空接口)-pojo:就是一个普通类b.所有的属性都使用私有c.提供公共的get和set方法d.提供一个默认的无参构造-一后实体类的包entity或者叫pojo或者叫domain或vo(2)广义的解释把所有操作实体类的类也称为javabeanUserDaoDeptDaoEmpDaoUserServiceDeptServiceEmpService有的地方,更加模糊,把工具类也成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论