《2023年JavaWeb学习笔记.pdf》由会员分享,可在线阅读,更多相关《2023年JavaWeb学习笔记.pdf(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java W eb学习笔记目录一、概述.11、java web项目目录结构.11.1、src 目录.11.2、WebRoot 目录.1二、Servlet.11、访问Servlet的方式.12、Servlet生命周期.33、Servlet处理表单.34、Servlet 跳转.44.1、转发与包含.44.2、重定向.45、状态管理.56、作用域对象.6三、JSP.71、基本概念.72、JSP 元素.72.1、脚本元素.72.2、指令元素.72.3、动作元素.83、内置对象.94、JSP 注释.95、Java Web中的路径问题.9四、过滤器.11五、监听器.12六、JavaBean 组件.13七、
2、MVC设计模式.15八、EL 表达式.158.1、概述.158.2、E L内置对象.168.3、EL运算符.168.4、在页面中禁止使用EL表达式.17九、JSP标签.189.1、自定义标签.189.2、JSTL 标签库.209.2.1、JSP标准标签库.209.2.2、JSTL核心标签库.20一 概述1、java w e b 项目目录结构新建的Java W e b项目初始目录结构如图所示:工程项目下有s rc和WebR o o t两个子目录,一般情况下用户会根据具体业务需要,在遵照规范的目录结构基础上,为s r c和WebRoo t目录合理地创建子目录,设计好Java W eb应用程序的目录
3、结构。1.1、s r c 目录s rc目录存放实现业务逻辑、数据操作、控制程序执行流程、描述实体对象、过滤器、监听器以及系统公用类的J a va源代码文献,此外还涉及资源文献。1.2、Web R oo t 目录新建项目初始目录中Web R o 0 t目录下就存在M ETA INF和WEB I N F两个子目录。M ETA-INF目录用来存放包和扩展的配置数据,如安全性、类加载器和版本信息。W E BIN F目录包含一个lib目录和一个web.x m l文献。其中I i b目录用来存放W e b应用中用到的第三方库文献(*.ja r),例如数据库驱动程序。web.xm 1文献是W e b应用的部
4、署描述符文献,应 用 的s e rv le t、初始化参数、过滤器、监听器、应用默认页面以及We b应用一些特殊设立都将在该文献中配置。用户在进行Java W eb应用开发时,在W e b Roo t目录下创建一些子目录用来存放J SP文献,H T M L文献,s t y I e文献,图片文献以及J avaScri p t脚本等。例如,创建子目录useM a n a g e r,sty 1 es,p h o to s和scr i p t s分别用来存放应用中用于实现用户管理模块相关的j sp或 者HTML页面文献,控制页面显示风格的CSS样式文献、页面用到的图片文献和页面用到的脚本文献。二 S
5、er v I e t1、访问Serv 1 e t 的方式(1)、直接在浏览器地址栏中输入访问途径来访问S e rv 1 e t(2)、通过超链接访问Servl e tSe rv le t可以接受客户端发来的请求,在HTM L和J S P中经常使用超链接向Se r vl e t发出访问请求。通过超链接访问ser v le t可以在超链接的h r e f属性中指定值为Servlet的url-pattern值,这种请求方式为GET,响应将执行S e rvlet中的d o Get()方法。In s e r t t it le h ereo Run th r F ir s t S e rvle t:10
6、6 0 1:方法这样运营该jsp文献,将显示Ru n thr F i r stServ 1 et d o Get方法,此为超链接,点击则进入 firs t Servlet 的界面。(3)、通过表单提交访问S e rvle t表单标记有一个属性meth o d,当m e th o d的值为g e t时,则表单提交方式为GE T,调用Servl e t的d oGet方法;当m e th o d的值为p o s t时,则表单提交方式为POST,调用S e r vie t的do P ost方法。姓名:密码:input type=M p a ss w o rd“nam e=pd,z o ac t io
7、n的属性值为ser v 1 e t/fi r stSer v I e t,表达表单提交请求的目的资源为Fir s tSe rvl e t,method属性值为P os t,表白表单提交方式为p o st,将执行Servl e t的doPos t方法。Ser v le t通过请求对象(Request)获得客户端数据,然后进行相关操作,获得运营结果,通过响应对象(R e s p o s e)设立响应参数并将结果返回到客户端。2、S e rv le t生命周期Se r vle t容器创建S e rvlet对象,Se r v le t容器依次调用Servlet对象的in i t(S e r vletC
8、o nfig c on f ig)和 init()方法。然后调用 se r v i c e(ServletReques t r eque s t,S e rv letR e spon s e response)方法,该方法将 Servle t Requ e st 类型的对象 r e q u est 和Servl e tRe s ponse 类型的 r e spo n s e 对象转化为相应的HttpServletReq u e s t 类型和 Htt pServ 1 etR e spons e 类型对象,然后调用 serv i c e(Http S e r vletReq u e s t re
9、ques t,Ht t pServ 1 e t Respo n s e resp o nse)方法,最后调用 doGet(HttpServlet R e q ue s trequ e s t,Http S e r vletResp o nse r e sponse)或者 doPost(HttpS e rvle t Requ e s t req u e s t,Ht t pServletRespon s e respons e)o 事实上,不管是 p o st 方式还是 get 方式提交请求,都会在s ervice方法中解决。当w eb应用被终止的时候,Servlet容器会先调用Web应用中所有
10、的Ser v 1 e t对象的destroy()方法。3、S e r vlet解决表单 t a b 1 e是tr的上层标签,t r必须在一个 t a ble/tabl e 里面,它不能单独使用,相称于 t able 的属性标签。t a b le 标示一个表格,t r 标示这个表格中间的一个行,td标示行中的一个列,需要嵌套在 t rx/tr中间。br换行。S e rvl e t通 过URL获取参数,这种参数传递方式为GET方式、通 过req u e s t对象的getPar amet e r方法获得相应的参数。pu b 1 ic v oid doGe t(HttpServle t Req u
11、e st re q u est,H t tpSe r vletRes ponse res p onse)o o o t h r o ws Ser v letEx c ept i o n,I OExce p tio n。r e spo n se.s e tC o ntentT y pe(t e xt/h tm l;c har s e t=U T F-8 );S t ring n am e=request.get P aram eter(nam e);S tring pas s=request.getPar a meter(p w);P r i n t W rite r o u t=r e spo
12、 n s e.g e tW rite r();oo ut.p r in t ln(name:+n ame);o out.p rin tln(pa s sw o rd:p a s s);http:1 o c a 1 hos t:8080/j avaWebB o ok/servlet/u ridel i ver p aramSe r vl e t?name=ji ami n glei&p w=1 23 这样可以获得输出:nam e:j i am i ngl e i passwo r d:1234、S e rv 1 e t 跳转4.1、转发与包含请求转发是se r vlet(源组件)先对客户端请求做
13、一些预解决操作,然后把请求转发给其他W e b组件(目的组件)来完毕生成响应结果在内的后续操作。请求包含是Servl e t(源组件)把其他W eb组件(目的组件)生产的响应结果包含在自身生成的响应结果中。Java,s ervle t.Re q ue s tD i s pate h er 接口,定义了 f o r w a r d()和 in c lud e()方法分别实现了请求转发和请求包含。调用这两个方法的时候,把当前的Serv 1 etRe q uest对象和Ser v 1 e tR e sponse对象作为参数传给他们。两种方式获得Re q u es t Dispa t cher对象:S
14、 e rvletContex t.g etRe q uestDi s p a tch e r(S tring path)或者调用 S e rvl e tR equest.ge t RequestDispatch e r(Str i n g path)方法。前者path为绝对途径,后者可以是绝对途径也可以是相对途径。方法示例:r e que s t.getReque s tDis p a tcher(要跳转的 s erv 1 e t 的 url).forwa r d(reques t,rep o n s e);4.2、重定向重定向是服务器对客户端的请求作出响应,响应的结果是让客户端浏览器去重新发
15、出对此外一个URL的访问请求。s e nd Redir e c t()方法,源组件和目的组件使用各自不同的Serv 1 e t R e q u e s t对象和S e r vletRespon s e对象,源组件和目的组件属于两个独立的访问请求和响应过程。方法示例:resp o ns e.se n d Redirect(要重定向的 s e r v I e t 的 urP);5、状态管理Cookie通过客户端保持状态。是W e b服务器通过浏览器保存在客户端硬盘上的一个文本文献,其中保存的是以名/值(n a m e/va 1 u e)形式存车的文本信息。Sess i o n可以用来记录浏览器和服
16、务器多次交互过程中需要记录的状态信息,信息以对象的形式存放在服务器的内存中,并且sess i on可存储的类型丰富,数据量大。示例代码:创建CookieC o oki e c l=new Cooki e(usern a m e use r n a me);Da t e d a t e=n e w D a te();。Co o k ie c 2=new C o ok i e(la s tc a ll,d a t e.t o S t r i ng();。c l.s etMaxAg e(60*60*24 3 0);。c 2.setMaxAge(60*6 0*24*3 0);response.addC
17、ookie(c l);res p onse.a d dCooki e(c2);获取C o o k ieo Cookie coo k ies=req.g etCookies();e Co o k i e cooki e=n u ll;o fo r(in t i=0;i c oo kies.len g t h;i+)coo k ie =c ook i es i;o i f (c o o k ie.getN a m e().e q uals(n u s er n ame)。o out.p rin tl n(用户名:n+cook i e.ge t Va 1 u e()+);0 0 oo i f(coo
18、ki e.g e t Name().e q ual s(1 a s t c a 11)。o ut.p ri n t 1 n(上次登录时间:+c ooki e.ge t Value()+);。6、作用域对象Se rvletContext对象在w e b应用启动时创建,w eb应用停止时销毁,其中保存的信息存在范围为整个web应用。S ervl e tC o nte x t对象对于一个w e b应用来说是唯一的,S erv 1 et Con t e x t对象中一般存放一些w e b应用中所有用户都要使用,并且在整个w e b应用运营过程中一直要使用的数据。HttpS e s s io n对象在客
19、户端发起一个新的会话时创建,在会话结束时销毁,其中保存的信息存在范围为整个会话中。H ttpSes sion对象不宜存放过多数据,在整个会话中经常需要使用的数据以及在进行客户端重定向时需要传递数据时,一般将数据放在H tt p Ses s i 0 n对象中。S ervletR equ e s t对象在客户端浏览器发起请求时创建,服务器向客户端做出响应时结束,其中保存的信息存在范围为这次请求响应过程中。在进行服务器内部跳转时,一般都会将需要传递的数据放在Servle t Reques t对象中。示例代码:。req.s e tA tt r ib ute(name ,n ame);H t t pSe
20、 s sion s e s s i 0 n=r e ques t.g e t Sess i on();。ses s io n.set A 11 r i b ute(name,name):Ser v ie t Co n tex t sc=t h is.gets e rv 1 e tCo n te x t();。sc.s e tA ttrib u t e(name ,name):S t ring name=(S t r i n g )r e qu e s t.getA 11 r ib u t e(n a me);S t r i n g nam e=(S tri n g)s e ssio n.g e
21、 tA ttrib u t e(name);S tring n a me(S trin g)th is .get S e rv le t C on te x t().g e t A t trib u te(n am e);三、J SP1、基本概念J SP由H TM L要素(静态部分)、J SP元素(动态元素)和J S P注释组成。J SP元素涉及脚本元素、指令元素和动作元素。2、JSP元素2.1、脚 本元素声明:用于在J SP页面中声明变量和定义方法。%!.%,其中包含任意数量的合法的 J A VA 声明语句。例:%!i n t c o u n t=0;%声明的变量仅在页面第一次载入的时候由容
22、器初始化一次,初始化后在后面的请求中一直保持该值。脚本:是嵌入在J SP页面中的J A VA代码段。%.%脚本在每次访问页面时都被执行。表达式:作为J A V A语言表达式的占位符。%=.表达式的元素在运营后被自动转化为字符串,然后插入到这个表达式的J S P文献的位置显示,这个表达式的值己经转化为字符串,所以能在一行文本中插入这个表达式。表达式是一个简化的o u t.pr i n t i n g.”),表达式不能以分号结束,百分号和等号之间不能有空格。2.2、指 令元素不是用来进行逻辑解决或者产生输出代码的,而是通过指令中的属性配置向JS P客户端发出一些指示,从而控制J S P页面的某些特
23、性。2 2 1、p a g e 指令用 于 设 立J s P页面的属性,用 于 和We b服务器通信,控 制 所 生 成 的Ser v l et结构。腼pag e属性名=属性值”属性名=属性值”.如 e r r o r P a g e 属性:在 t es t.j s p 中 pag e 指令中设立 er r o r P ag e=e r r o r P a g e.j s p”在 err o P age,jsp 中 pag e 指令中设立 isE r no r Page=true ja v a 代码中excepti o n.getMessa g e().2.2 .2、i n c 1 u de
24、指令将 f i l e 属性指定页面内容静态包含到当前页面。Includ e 指令包含指定页面的过程是在翻译阶段完毕的,也 就 是 在 JSP被 转 化 成 Ser vle t 的阶段进行的。2.2.3、t ag 1 i b 指令声明用户在当前J S P 页面使用JSTL标签或者用户自定义的标签时使用ta g l i b 指令,将标签库描述符文献导入到JSP页面。U r i:定位标签库描述符的位置,唯一标记和前缀相关的标签库描述符,可以使用绝对或相对URL。p re f i x:标签的前缀,区分多个自定义标签。使用自定义标签或者JST L 标签的目的是消除JS P文献中出现的J A V A 脚
25、本。2.3、动作元素(1)、用于指定参数以及与其相应的值,跳转或者包含的页面可以r e q u e s t对象来读取这些参数的值。、用于实现请求的转发,转发的目的组件可以是js p 文献、HTML文献或者servle t。、将 P age属性指定内容动态包含到当前页面。除上述介绍的,3SP 动作元素尚有、3、内置对象re q u e s t:获得封装的客户端请求信息,然后做出响应。具有请求作用域。R e sponse:封装了响应客户请求的有关消息,具有页面作用域。sess i on:客户端与服务器的一次会话,从客户端连到服务器的一个web应用开始,直到客户端和服务器断开连接为止。appl i
26、catio n:开始于服务器启动,直到服务器关闭。p a geContex t:p age Con t e x t 对象提供了 J S P 页面内所有的对象及名字空间的访问。o u t:向客户端输出内容。con f ig:在一个s e r v le t初 始 化 时 S P 引擎向它传递信息用。pag e:就是指向当前JSP页面自身,类似于类中的t h i s 指针。exce p tio n :例外对象,当一个页面在运营过程中发送了例外,就产生了这个对象。4、J S P注释涉及:HTML注释,JAVA注释,JSP注释。H T M L注释:!-H T M L 注 释 内 容-一Java注释:/或
27、者/*J a va 注 释 内 容*/JSP注释:5、Java W eb中的途径问题/一一代表w e b 应用的根目录./一一代表当前目录.代表当前目录的上一级目录Java web中有几个基本的目录:(1):Web 服务器的根目录:h tt p:/lo c a 1 host:8080/(2):We b 应用的根目录:w eb应用w e bdem o 的 根 目 录 h t t p:1 ocalhost:8 080/w e bdemo/(3):同级 目录:h ttp:/1 oc a Ihos t:8 0 8 0/webdem o/userM a nap e r/a d dlls er.jsp 和
28、http:/I o calhos t:8 0 8 0/w e b d e mo/u s erMa n age r/upd ateUser.jsp 说明 JSP 页面 ad d User,jsp 和 updatellse r.jsp 处在同级目录java web开发中涉及到的途径问题:(1):web.x m l 中的途径:配置 s ervle t 映射V ur 1 p a t tern/*中/代表当前w eb应用的根目录。(2):转发和重定向中的途径:1、假 如 途 径 中 不 包 含,如re q u e st.g etReque s tD i s pa t c h en(rrindex.j s
29、p).forwa r d(request,res p o n s e)和respons e.sendR e d i rec t(index.j s p)就表达在同级目录中寻找 inde.j sp 文献。1、假 如 途 径 中 包 含(指 途 径 中 第 一 个/)a.转发,request,g et R e questDisp a tc h e r(/in d e x.j sp).f o rward(r equest,response)代表到 w eb 应用的根目录下(“h t t p:/1 ocalhost:808 0/webdemo/”)寻找 i n d e x.jsp 文献。b.重定向re
30、sp o nse.s end R edirect(/in d e x,js p )代表到 w e b 服务器的根目录下(上 _t t p:/l o c a l h ost:8080/)寻找 index,j sp 文献。2、表单和链接中的途径:或者 V/a 中的途径,/代表的是Web服务器的根目录(h t tp:1 ocalh o st:8。80/)。3、p a g e 指令元素中e rro r Pag e 属性的途径e rro rP a g e 属性值假如以“/”开头,表达相对于当前W e b 应用的根目录,假如没有“/”开头的途径表达当前目录。四、过滤器S e r v le t过滤器自身不产
31、生请求和响应,它只提供过滤作用。当用户发起We b 请求时,We b 服务器一方面判断是否存在过滤器和这个请求的目的资源相关,假如存在关联,Web服务器将把请求交给过滤器去解决,在过滤器中可以对请求的内容作出改变,然后再将请求转交给被请求的目的资源。当被请求的资源作出响应时,Web服务器同样会将响应先转发给过滤器,在过滤器中可以对响应做出解决,然后再将响应发送给客户端。所有的S e r v l e t 过滤器类都必须实现java x.servle t.F i 1 t e r 接口,定义了三个过滤器必须实现的方法:p u b lic v o id in i t(F ilte rC o n fi
32、g f i l t e rConf ig);p u b lie vo i d d o F ilt e r(ServletRequ e st requ e s t,S e rvle t R esponseresponse,F i 1 t e rCha i n ch a i n);publ i c void destroy()开发一个serv 1 e t 过滤器的环节:(1):创建一个实现了 java x.servlet.F i Ite r 接口的类(2):重写类中的i n i t(F i IterC onfig f i 1 t e r Con f i g)方法,一般编写代码为:读入为过滤器配置的
33、初始化参数,申请过滤器需要的资源。(3):重写类中的doF i I t e r (.)方法:从S e rvletRe q u e s t 参数中得到所有的请求信息,从 Se r v le tR e s p o n s e 参数中得到所有的响应信息。在方法代码的最后需要调用 F ilte rc h a in 对 象 的 doFi 1 te r()方法,来激活下一个相关的过滤器。假如不存在另一个过滤器与目的Web组件(Servle t 程序或者J S P页面)关联,则W eb组件将被激活。(4):重写类中的destroy。方法,一般需要编写实现资源释放的代码,通常对i n it()中初始化资源执行
34、收尾工作,也可以完毕诸如关闭过滤器使用的文献或者数据库连接池等清除任务。(5):针对被访问的目的W e b组 件(Ser v l e t程序或者DSP页面)注册过滤器,在部署w e b.x m l中使用 和 元素对过滤器进行配置。运营过程是这样的:有一个index.js p界面,有一个Log i n F ilt e r.java(imp 1 em en ts F ilt e r),同时该F i 1 te r 在w e b.x m l中配置。f ilt e r。1 ogi n F ilte r e o ch a p ter5.L o ginF i Ite r。/f ilte ro 。log i
35、n F ilte ro /i n dex.jsp意思是:以后访问这个V u r l-p a t t e rn 指 定 的w eb组件的时候,必须一方面满足过滤器LoginF i I t e r的过滤条件。五、监听器是一个实现了某一个特定接口的普通Ja v a类,该类专门用于监听某一特定J a v a对象的方法调用或属性改变事件,当被监听对象发生上述事件后,监听器某个方法将立即被执行而做出相应的动作或者反映。用于监听的事件源分别为S erv 1 etCont e x t,HttpSes s ion 和 S erv 1 etRequesto监听器开发:(1):创建相应的监听器类,根据实际需要实现相
36、应的接口并覆盖其中相应的抽象方法。例如:定义一个监听器类Xxx x xLi s t en e r用来监听HttpS e s s i o n对象的创建与销毁:p u b li c c la s s X x xxxxLi s t e ner i mplements Ht t p S e ssio n Lis t en ero o p ub 1 i c void s e s s i o n Create d(HttpSessio n Eve n t ar g 0)public v o id sess i o n D e stroy e d(H ttp S e s sio n Event a r g
37、l).;)(2):在部署描述文献w eb.xm l中使用(lis te n e r元素配置监听器(实现接口 H ttp Se s sionBi n d i n g L i s te n e r接口的监听器例外,不需要在u/eb.x m l文献中配置)。例如,在web.x m l文献中配置环节(1)中定义的监听器类XxxxxL i s t ener,其配置代码如下:o 。x x x P acka g e.Xx x x x L ist e nero o 六、Java B e a n组件(1)、事实上就是一个JAVA类,在编写J S P页面时,对于一些常用的功能,可以将他们的共同功能抽取出来,组织为
38、J a v a Bean,当需要在某个页面中使用该功能时,只要调用该JavaBean中响应的方法即可。需要遵循以下规范:(1):J a vaB e an 必须是 pu b 1 i c 类(2):Java Be a n必须具有一个无参的p u b lic构造方法,或者通过定义不带参数的构造方法或者使用默认的构造方法均可满足这个规定。(3):J a v aBe a n属性的访问权限一般定义为p riv a te或p r ot e cte d,而不是定义为 p u b lic 的。(4):对每个属性一般定义为两个pub I i c方法,一个是访问属性的方法,方法名应当定义ge t Xxx()格式;另
39、一个是设立属性的方法,方法应定义为s etX x x(形式参数)格式。(2)、Java Bean 的使用要在 J S P 中使用 J a vaBea n 组件,必须使用 等 JSP 的操作指令。a.用来在指定作用域中查找或创建一个bean实例。packag e.c 1 a s s I t y pe=p a c kage.c 1ass”/|ot h e r e l e ments实例:V j s p:u s eBean i d=b ook sc o p p a g e class=examp 1 e.Book”/在page范围内即当前页面查找指定名称为boo k的对象,假如没有找到,则使用exa
40、叩1 e.B o o k类的无参构造方法创建b o o k实例。bV jsp:setP roperty用来指定DavaBea n实例某个属性的值。js p:s e r P r o p e r ty nam e=b ea n Instanc e Name”p r o p e r t y=,Jproper t yN ame”va 1 ue=wSt r ing|”|proper t y=p ropertyN a me”param=,JparamNam e|。pro p e r t y 二)/实例:将b。o k对象的name属性值设立为“西游记”。o o 使用请求参数的每个值为b o o k对象的每个
41、与请求参数同名的属性赋值。c.j s P:g etP r op e r ty 获取 DavaBean 对象的属性值。p roperty N ame”/七 M VC设计模式MVC-模 型(M o d e l):实现业务逻辑解决和数据库操作,此外还涉及数据模型。(JavaBe an)视图(V ie w):实现数据显示逻辑。负责与用户交互,即接受用户数据的输入,显示模型返回的数据。(JSP)控 制 器(Con t r o lle r):实现程序执行流程的控制,任务的分派。(S e rv le t)八、EL表达式8.1、概述通过E L表达式可以获得P a g e c o n te x t的属性值、直接
42、访问J S P的内置对象,还可以访问作用域对象、集合对象等:$ELexpr e s sion ,E L表达式可以通过点号运算符”.和方括号“”来访问对象。(1)、访问作用域变量,$a t t r 1 的作用是:一方 面 从pag e范围查找属性a tt r 1 ,假如找到了则返回并输出当前范围的变量的值;假如没找到,则 再 从requ e s t范围查找,假如还没有找到,则再从s e s s i o n范围查找,假如没找到,则再从a pp 1 ic a ti o n范围找,假如还没有找到,则不再查找直接返回并输出空字符串。(2)、访问 J a va B e a n 属性,$b o o k.na
43、m e(nam e 是 boo k 对象的一个属性)(3)、访问集合元素,访问数组、Lis t、Map,对于数组,L i s t:$in s i 实际调用in s i或 ins.ge t(i),对于 Ma p 3 i n s n a me实际调用 ins.get(name).8.2、E L内置对象(1)p a g e C o n te xt内置对象:取得与用户请求或服务器端相关的信息,如$P a geConte x t.reque s t m e th o d c o ntextP a t h|rem o t e Ad d r.(2)、作用范围相关的内置对象:p a g e S c o p e
44、 ,requestscope,s e ssionScope,a p p lic a tio n S c o p e,但是和JSP内置对象不同的是,这四个只能取得作用范围中的值而不能设立值。$r equestSco p e.n a m e.注:未指定作用范围默认是pa g e作用范围。(3)、与请求参数相关的内置对象:param a ram V a i u e s。par a m获取传递过来的单值参数的值,相称于请求对象的g e t P a r a mete r()方法的执行效果。p a ramVa 1 ues获取传递过来的多值参数的值(例如复选框,多 选),相 称 于 请 求 对 象 的get
45、Par ameterV a 1 u e()方法的执行效果。(4)与请求头相关的内置对象:hea d e r和h e a d erVa 1 ues。header用来访问HTTP请求的一个具体的He a de r值,h e ad e rv a lu e s用来访问所有H TTP请求的Hea d er值。假如头中包含“-”,则访问时要使用中括号运算符而不能使用点号运算符。(5)、c o o kie 内置对象:c ook i e 相对于H ttp S e rv l e t Reques t.g etCo o kie s()的作用,表达式$c o o k ie.us e rn a me.value表 达
46、 返 回c o O k ie中名称为us ername的值。(6)、与初始化参数相关的内置对象:i n itP a ra m用于获取we b.x m l文献中配置的初始化参数,相称于 S er v letContex t.g e tln itP a ra m e te r(S t r in g name)方法的作用。8.3、EL运算符(1)、算术运算符:+-*/%并且$3/0 结果为In fin i t y,除数为。也进行了解决。(2 )、关系运算符:(lt),(g t),=(g e),=(e q),!=(n e),比较结果是布尔类型的值,不仅可以对数字进行比较,还可以对字符或者字符串进行比较
47、。(3)、逻辑运算符:&(and)|I(o r)!(not)(4)、条件运算符:?:(5)、e m p ty 运算符:$e mpty e xp r e ss i on用于判断 expre s s i o n 的值是否为n u l 1 ,空字符串,空数组,空M a p或空集合。如为空返回t r u e,否则返回fa ls e.8.4、在页面中严禁使用E L表达式(1)、在当前页面中严禁使用EL表达式:(t r ue 表达禁用 EL,f a 1 s e 表达运营使用)(2)、在多个页面禁用EL表达式:在w e b.x m l中配置js p pr o pe r ty-groun d元素批量禁用E L
48、。/f i le s/*.jsp。t rue3 (3)、严禁在当前W eb应用的所有j s p界面中使用EL表达式将web.x m l定义为2.3版本:(由于EL表达式是2.4版才开始支持的功能)!DOCTYP E web app PUBLIC u-/Sun.Microsystem s,Inc./DTD Web Ap plic a t i on 2.3/EN九 JS P 标签9.1、自 定义标签自定义标签的开发涉及编写标签解决器类、编写标签描述符文献和在3S P中使用标签三步。(1):编写实现了 s i叩le T a g接口的标签解决类,将JSP页面中的Jav a代码移植到标签解决类中。实际编
49、程中,标签解决类通常继承S i m p le tT a g接口的默认实现类S i叩1 eTagSupport,然后去覆盖该类中的d o T a g()方法,实现标签逻辑。(2):编写标签描述符(*.t 1 d)文献,在t I d文献中把标签解决器类描述成一个标签。(3):在JSP页面中通过tag 1 i b页面指令元素引入标签,然后通过tag 1 i b指令指定的前缀名和t l d文献指定的标署名在JSP文献中使用标签。示例代码:(1).package c o m.ch09;i mpor t ja v a .io.IO E x cep t ion;import ja v a x.s e rv
50、le t,j s p.J spE x ce p ti o n;impo r t j a va x.se r v 1 e t.j s p.t a g e x t.Js p Fr a g ment;imp o rt java x.s e rv le t.j sp.tagex t.S i mpleTagSupport;pu b 1 i c class M yS im pl e Ta日 1 e x t ends S i mpleTagS u p p o rt Overr i dep ublic void d o T a g()throw s DspExc e p t ion,IOE xc e p ti