仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 875|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页编程之JSP模板使用指南(下)

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:38:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
多谢指点,其实我对.net和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。js|模板
实行模板
  这里所会商的模板将在三种定制标签下实行:

  Template:insert

  Template:put

  Template:get

  insert标签中包括一个模板,可是在包括之前,put标签存储有一些信息――name,URI和Boolean值(用来指定将内容是包括仍是间接显现)――关于模板所包括的内容。在template:get中包括(或显现)了指定的内容,随后将会见这些信息。

  template:put把Bean存储在哀求地区(但其实不间接存储),由于假如两个模板利用了不异的内容名,一个嵌套模板就将掩盖封装模板中的内容。

  为了包管每个模板可以只存取它本人的信息,template:insert保存了一个hashtable仓库。每个insert入手下手标签创建一个hashtable并把它放进仓库。封装的put标签创建bean并把它们保留到比来创建的hashtable中。随后,在被包括模板中的get标签会见hashtable中的bean。显现了仓库是怎样被保存的。


<br>
  .在哀求地区存储模板参数点击缩小(24KB)

  在中每个模板会见准确的页脚、footer.html和footer_2.html。假如bean被间接存储在哀求地区,中的step5将掩盖在step2中指定的footerbean。

模板标签实行
  接上去我们将剖析三个模板标签的实行:insert,put和get。我们先从入手下手。这个图表申明了当一个模板被利用时,insert和put标签事务的实行按次。


<br>
  .put和insert标签实行按次点击缩小(24KB)

  假如一个模板仓库已不存在,insert入手下手标签就会创建一个并把它安排到哀求地区。随后一个hashtable也被创建并放到仓库中。

  每个put入手下手标签创建一个PageParameterbean,并存储在由封装的insert标签创建的hashtable中。

  拔出end标签包括了这个模板。这个模板利用get标签来会见由put标签创建的bean。在模板被处置今后,由insert入手下手标签创建的hashtable就从仓库中扫除。

  显现template:get的按次图表。


<br>
  .get标签的按次图表点击缩小(11KB)

模板标签列表
  标签handler很复杂。在例3.a中列出了Insert标签类――标签handler。

  例3.a.InsertTag.java

  packagetags.templates;

  importjava.util.Hashtable;

  importjava.util.Stack;

  importjavax.servlet.jsp.JspException;

  importjavax.servlet.jsp.PageContext;

  importjavax.servlet.jsp.tagext.TagSupport;

  publicclassInserttagextendstagSupport{

  privateStringtemplate;

  privateStackstack;

  //settermethodfortemplate属性

  publicvoidsetTemplate(Stringtemplate){

    this.template=template;

  }

  publicintdoStartTag()throwsJspException{

    stack=getStack();//obtainareferencetothetemplatestack

    stack.push(newHashtable());//pushnewhashtableontostack

    returnEVAL_BODY_INCLUDE;//passtagbodythroughunchanged

  }

  publicintdoEndTag()throwsJspException{

    try{

      pageContext.include(template);//includetemplate

    }

    catch(Exceptionex){//IOExceptionorServletException

      thrownewJspException(ex.getMessage());//recastexception

    }

    stack.pop();//pophashtableoffstack

    returnEVAL_PAGE;//evaluatetherestofthepageafterthetag

  }

  //taghandlersshouldalwaysimplementrelease()because

  //handlerscanbereusedbytheJSPcontainer

  publicvoidrelease(){

    template=null;

    stack=null;

  }

  publicStackgetStack(){

    //trytogetstackfromrequestscope

    Stacks=(Stack)pageContext.get属性(

              "template-stack",

              PageContext.REQUEST_SCOPE);

    //ifthestacksnotpresent,createanewone和

    //putitintorequestscope

    if(s==null){

      s=newStack();

      pageContext.set属性("template-stack",s,

              PageContext.REQUEST_SCOPE);

    }

    returns;

  }

  }

  例3.b列出了Put标签类和标签handler:

  例3.b.PutTag.java

  packagetags.templates;

  importjava.util.Hashtable;

  importjava.util.Stack;

  importjavax.servlet.jsp.JspException;

  importjavax.servlet.jsp.tagext.TagSupport;

  importbeans.templates.PageParameter;

  publicclassPuttagextendstagSupport{

  privateStringname,content,direct="false";

  //settermethodsforPuttagattributes

  publicvoidsetName(Strings){name=s;}

  publicvoidsetContent(Strings){content=s;}

  publicvoidsetDirect(Strings){direct=s;}

  publicintdoStartTag()throwsJspException{

    //obtainareferencetoenclosinginserttag

    Inserttagparent=(InsertTag)getAncestor(

                "tags.templates.InsertTag");

    //puttagsmustbeenclosedinaninserttag

    if(parent==null)

      thrownewJspException("PutTag.doStartTag():"+

                  "NoInserttagancestor");

    //gettemplatestackfrominserttag

    Stacktemplate_stack=parent.getStack();

    //templatestackshouldneverbenull

    if(template_stack==null)

      thrownewJspException("PutTag:notemplatestack");

    //peekathashtableonthestack

    Hashtableparams=(Hashtable)template_stack.peek();

    //hashtableshouldneverbenulleither

    if(params==null)

      thrownewJspException("PutTag:nohashtable");

    //putanewPageParameterinthehashtable

    params.put(name,newPageParameter(content,direct));

    returnSKIP_BODY;//notinterestedintagbody,ifpresent

  }

  //taghandlersshouldalwaysimplementrelease()because

  //handlerscanbereusedbytheJSPcontainer

  publicvoidrelease(){

    name=content=direct=null;

  }

  //conveniencemethodforfindingancestornameswith

  //aspecificclassname

  privatetagSupportgetAncestor(StringclassName)

                  throwsJspException{

    Classklass=null;//cantnamevariable"class"

    try{

      klass=Class.forName(className);

    }

    catch(ClassNotFoundExceptionex){

      thrownewJspException(ex.getMessage());

    }

    return(TagSupport)findAncestorWithClass(this,klass);

  }

  }

  PutTag.doStarttag创建了一个PageParameterbeanC在例3.c中列出――然后存储到哀求地区。

  例3.c.PageParameter.java

  packagebeans.templates;

  publicclassPageParameter{

  privateStringcontent,direct;

  publicvoidsetContent(Strings){content=s;}

  publicvoidsetDirect(Strings){direct=s;}

  publicStringgetContent(){returncontent;}

  publicbooleanisDirect(){returnBoolean.valueOf(direct).booleanValue();}

  publicPageParameter(Stringcontent,Stringdirect){

    this.content=content;

    this.direct=direct;

  }

  }

  PageParameter将作为复杂的占位符利用。我们来看一看例3.d中的Gettag类和taghandler:

  例3.d.GetTag.java

  packagetags.templates;

  importjava.util.Hashtable;

  importjava.util.Stack;

  importjavax.servlet.jsp.JspException;

  importjavax.servlet.jsp.PageContext;

  importjavax.servlet.jsp.tagext.TagSupport;

  importbeans.templates.PageParameter;

  publicclassGettagextendstagSupport{

  privateStringname;

  //settermethodfornameattribute

  publicvoidsetName(Stringname){

    this.name=name;

  }

  publicintdoStartTag()throwsJspException{

    //obtainreferencetotemplatestack

    Stackstack=(Stack)pageContext.getattribute(

        "template-stack",PageContext.REQUEST_SCOPE);

    //stackshouldnotbenull

    if(stack==null)

      thrownewJspException("GetTag.doStartTag():"+

                  "NOSTACK");

    //peekathashtable

    Hashtableparams=(Hashtable)stack.peek();

    //hashtableshouldnotbenull

    if(params==null)

      thrownewJspException("GetTag.doStartTag():"+

                  "NOHASHTABLE");

    //getpageparameterfromhashtable

    PageParameterparam=(PageParameter)params.get(name);

    if(param!=null){

      Stringcontent=param.getContent();

      if(param.isDirect()){

        //printcontentifdirectattributeistrue

        try{

        pageContext.getOut().print(content);

        }

        catch(java.io.IOExceptionex){

        thrownewJspException(ex.getMessage());

        }

      }

      else{

        //includecontentifdirectattributeisfalse

        try{

        pageContext.getOut().flush();

        pageContext.include(content);

        }

        catch(Exceptionex){

        thrownewJspException(ex.getMessage());

        }

      }

    }

    returnSKIP_BODY;//notinterestedintagbody,ifpresent

  }

  //taghandlersshouldalwaysimplementrelease()because

  //handlerscanbereusedbytheJSPcontainer

  publicvoidrelease(){

    name=null;

  }

  }

  GetTag.doStartTag从哀求地区前往了页面参数bean并从bean中取得了content和direct属性。然后,内容能够依据direct属性值选择是被包括仍是显现。

结论
  模板是一种复杂而有十分有效的观点。模板的封装结构可以对结构改动的影响到达最小化。并且模板可以依据用户的分歧来辨别分歧的内容,它还可以嵌套到其他的模板和JSP页面中。



最后就是我对java的几点希望:首先是IDE工具,有人说java已经很好了,有jbuilder,eclipse,netBeans等等,但是我认为如果java想超越.net,那么他首先要解决的就是IDE工具的整合。
爱飞 该用户已被删除
沙发
发表于 2015-1-21 11:48:28 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
小魔女 该用户已被删除
板凳
发表于 2015-1-24 19:16:33 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
透明 该用户已被删除
地板
发表于 2015-1-25 21:43:49 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
柔情似水 该用户已被删除
5#
发表于 2015-2-2 06:06:49 来自手机 | 只看该作者
是一种突破用户端机器环境和CPU
第二个灵魂 该用户已被删除
6#
发表于 2015-2-4 17:48:47 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
因胸联盟 该用户已被删除
7#
发表于 2015-2-10 04:39:50 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
山那边是海 该用户已被删除
8#
发表于 2015-2-28 19:49:37 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
小女巫 该用户已被删除
9#
发表于 2015-3-1 20:21:04 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
不帅 该用户已被删除
10#
发表于 2015-3-6 15:39:41 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
小妖女 该用户已被删除
11#
发表于 2015-3-9 04:08:39 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
老尸 该用户已被删除
12#
发表于 2015-3-23 00:27:32 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
兰色精灵 该用户已被删除
13#
发表于 2015-3-24 01:14:38 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
莫相离 该用户已被删除
14#
发表于 2015-3-24 04:34:23 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
再见西城 该用户已被删除
15#
 楼主| 发表于 2015-4-6 22:09:52 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
变相怪杰 该用户已被删除
16#
发表于 2015-4-11 10:28:16 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
愤怒的大鸟 该用户已被删除
17#
发表于 2015-4-13 00:09:02 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
金色的骷髅 该用户已被删除
18#
发表于 2015-4-20 19:15:08 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
蒙在股里 该用户已被删除
19#
发表于 2015-4-26 21:11:50 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
admin 该用户已被删除
20#
发表于 2015-4-30 00:44:12 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 01:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表