分手快乐 发表于 2015-1-18 11:19:56

JAVA网页编程之JSP模板使用指南(上)

最后就是我对java的几点希望:首先是IDE工具,有人说java已经很好了,有jbuilder,eclipse,netBeans等等,但是我认为如果java想超越.net,那么他首先要解决的就是IDE工具的整合。js|模板利用JSP模板来封装网页结构
  Window工具包供应了一种典范的结构机制,好比说在一个容器中断定部件元素的地位。在AWT和Swing都有结构办理器,而在VisualWorksSmalltalk中有wrapper。本文将先容一种JSP模板机制,它同意结构被封装和从头使用。JSP模板最小化了结构改动所酿成的影响,这里我们将勉励人人接纳封装模块化计划。
  只管Web开辟工具的改善十分敏捷,可是它们仍旧掉队于图形用户界面(GUI)工具包(Swing和VisualWorksSmalltalk)。比方,在传统的GUI工具包中供应了结构办理器,在一个窗体或另外一个窗体中,同意结构运算被封装和从头使用。本文先容的这类JSP模板机制,就象结构办理器一样,能够封装结构,以是它可以被从头使用而不但是复制利用。
  因为在结构的开展过程当中呈现了很多的变更,而对功效的封装长短常主要的一步,它可以被自若修正而做到对其他使用的影响最小。
  JSP没有供应对封装结构的间接撑持,以是具有一致格局的网页一般能够复制结构代码;比方,在中,显现了一个网页,它包括了题目、页脚、工具条和页面的次要内容。


  .网页结构点击缩小(22KB)

  在中显现的网页结构将以HTML表格标签来实行:

  例1.包括内容:

  <html><head><title>JSPtemplates</title></head>

  <bodybackground=graphics/background.jpg>

  <table>

  <trvalign=top><td><%@includefile=sidebar.html%></td>

    <td><table>

      <tr><td><%@includefile=header.html%></td></tr>

      <tr><td><%@includefile=introduction.html%></td></tr>

      <tr><td><%@includefile=footer.html%></td></tr>

      </table>

    </td>

  </tr>

  </table>

  </body></html>

  在下面的例子中,包含了JSPinclude命令,它同意页面内容改动――经由过程改动包括的文件――不必修正网页本身。不外,因为结构是很难被编码的,结构改动必要对网页举行修正。假如一个网站有多个不异格局的页面,那末一样平常情形下乃至复杂结构的改动也触及到全部页面的修正。

  为了削减结构改动所酿成的影响,我们必要一种仅仅只包括结构的机制;接纳这类机制,结构和内容都能够在不修正文件的情形下分隔举行修正。这类机制就是JSP模板。

利用模板
  模板是一种JSP文件,它包括了参数化了的内容。这里所会商的模板利用的是一套定制化标签来实行的:template:get,template:put和template:insert。template:get标签会见参数化的内容,就象在例2.a中的一样,它将和一样的格局来天生网页。

  例2.a.一个模板

  <%@tagliburi=/WEB-INF/tlds/template.tldprefix=template%>

  <html><head><title><template:getname=title/></title></head>

  <bodybackground=graphics/background.jpg>

  <table>

  <trvalign=top><td><template:getname=sidebar/></td>

    <td><table>

        <tr><td><template:getname=header/></td></tr>

        <tr><td><template:getname=content/></td></tr>

        <tr><td><template:getname=footer/></td></tr>

      </table>

    </td>

  </tr>

  </table>

  </body></html>

  例2.a几近与例1完整一样,不外在例2.a中我们利用了template:get代替了例1中的include命令.让我们来剖析一下template:get怎样运转。

  template:get利用了一个专门的名字(在哀求的局限内)来对一个JavaBean举行修正。Bean包括了URI(一致资本标记符,网页的一个组件,它包括在template:get中)。比方,在例2.a的模板列表中,template:get取得了一个URI――header.html――从一个名为header的Bean中(在哀求的局限内)。接着在template:get中包括了header.html。

  template:put把Bean放到哀求的局限内(此局限将在前面被template:get修正)。模板包括在template:insert中。例2.b及第例申明了put和insert标签的用法:

  例2.b.从例2.a中利用模板

  <%@tagliburi=/WEB-INF/tlds/template.tldprefix=template%>

  <template:inserttemplate=/articleTemplate.jsp>

  <template:putname=titlecontent=Templatesdirect=true/>

  <template:putname=headercontent=/header.html/>

  <template:putname=sidebarcontent=/sidebar.jsp/>

  <template:putname=contentcontent=/introduction.html/>

  <template:putname=footercontent=/footer.html/>

  </template:insert>

  在insert开首标签指定了被包括的模板,在这个例子里,模板在例2.a中。每个put标签在哀求局限内存储了一个Bean,而在insert开头标签包括了模板。模板接着象下面所形貌的那样会见Bean。

  direct的属功能够为template:put指定;假如direct设置为true,和标签相干联的内容将不包括在template:get中。

  一个网站包括了多页不异格局的页面,如许就能够利用一个模板,好比在例2.a中列出了一个模板,在很多的JSP网页(例2.b)中,都用到了这个模板。

  利用模板的另外一个优点是能够举行模块化计划。比方,例2.b中列出的JSP文件中包括了header.html,让我们再来看上面的例2.c。

  例2.c.header.html

  <table>

  <tr>

    <td></td>

  </tr>

  </table><hr>

  因为header.html是被包括的内容,以是它不用在必要显现标头的页面中复制其代码。并且,只管header.html是一个HTML文件,可是在文件中并没有利用一样平常的肇端HTML标签(好比<html>或<body>),由于这些标签都将被模板界说。因为在模板中包括了header.html,这些标签在header.html就能够不用再利用了。

  注重:JSP供应了两种体例来包括内容:静态体例,利用include命令;静态体例,利用includeaction。include命令包括了方针页面的援用源,这和C言语中的#include和Java中的import类似。includeaction包括了在运转工夫内方针所发生的呼应。

  与JSPincludeaction一样,模板包括有静态内容。以是,只管在例1和例2.b中的JSP网页在功效上是分歧的,可是后面包括的静态内容被前面静态的包括了。

可选内容
  一切的模板内容都是可选的,模板的内容能够很简单的在更多的网页中利用。比方,在.a和.B中显现了两个页面――登录和清单――它们利用的是统一个模板。两个页面中都包括一个标头、页脚和次要内容。清单页面中有一个编纂Panel(这是上岸页面所缺少的)用来改动清单。


  .a.一个上岸窗口点击缩小(24KB)


  .B.一个清单页点击缩小(42KB)

  上面,你会发明模板将被登录和清单页面共用:

  <%@tagliburi=template.tldprefix=template%>

  ……

  <tablewidth=670>

  <tr><tdwidth=60></td>

    <td><template:getname=header/></td></tr>

  <tr><tdwidth=60></td>

    <td><template:getname=main-content/></td></tr>

  <tr><tdwidth=60></td>

    <td><template:getname=editPanel/></td></tr>

  <tr><tdwidth=60></td>

  <td><template:getname=footer/></td></tr>

  </table>

  ……

  清单页面利用了下面的模板和专门用于编纂Panel的内容:

  <%@tagliburi=template.tldprefix=template%>

  <%@tagliburi=security.tldprefix=security%>

  <template:inserttemplate=/template.jsp>

  ……

  <template:putname=editPanel

            content=/editPanelContent.jsp/>

  ……

  </template:insert>

  与下面绝对照,登录页面没有专门用于编纂Panel的内容:

  <%@tagliburi=template.tldprefix=template%>

  <template:inserttemplate=/template.jsp>

  <template:putname=titlecontent=Logindirect=true/>

  <template:putname=headercontent=/header.jsp/>

  <template:putname=main-content

          content=/login.jsp/>

  <template:putname=footercontent=/footer.jsp/>

  </template:insert>

  因为登录页面中没有专门用于编纂Panel的内容,以是它没有包含。

基于Role的内容
  Web使用程序经常会基于分歧的用户天生分歧的内容。比方,不异的JSP模板,只要当用户为办理员的时分才呈现编纂Panel,上面是得出的两个分歧的页面(如.a和3.b.)


  .a.办理员的清单页面点击缩小(27KB)


  .b.其他用户的清单页面点击缩小(21KB)

  在.a和3.b中的模板利用了template:get的role属性:

  <%@tagliburi=template.tldprefix=template%>

  ......

  <table>

  ......

  <td><template:getname=editPanelrole=curator/></td></tr>

  ......

  </table>

  ......

  get标签仅仅在用户的Role与Role属性相婚配的时分才包括内容。让我们来看看标签handler是怎样利用Role属性的:

  publicclassGettagextendstagSupport{

  privateStringname=null,role=null;

  ......

  publicvoidsetRole(Stringrole){this.role=role;}

  ......

  publicintdoStartTag()throwsJspException{

    ......

    if(param!=null){

      if(roleIsValid()){

        //includeorprintcontent......

      }

    }

  ......

  }

  privatebooleanroleIsValid(){

    returnrole==null||//validifroleisntset

      ((javax.Servlet.http.HttpServletRequest)

      pageContext.getRequest()).isUserInRole(role);

  }

  }


首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。

分手快乐 发表于 2015-1-20 20:36:34

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

若天明 发表于 2015-1-25 19:39:21

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

飘飘悠悠 发表于 2015-1-27 08:39:55

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

山那边是海 发表于 2015-2-7 07:37:52

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

飘灵儿 发表于 2015-2-10 22:04:16

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

变相怪杰 发表于 2015-2-22 18:31:41

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

简单生活 发表于 2015-2-24 23:27:48

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

只想知道 发表于 2015-2-25 19:08:51

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

蒙在股里 发表于 2015-3-8 01:14:08

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

不帅 发表于 2015-3-10 19:06:16

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

再现理想 发表于 2015-3-17 09:10:24

是一种使网页(Web Page)产生生动活泼画面的语言

小妖女 发表于 2015-3-24 05:11:39

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
页: [1]
查看完整版本: JAVA网页编程之JSP模板使用指南(上)