何不试试使用xsl+jsp+xml+taglibs来实现web显示层! _shengbox的博客-程序员秘密

技术标签: xsl  stylesheet  java  web  jsp  xml  

目前大多数使用j2ee开发B/S结构的方案,在显示层大多使用的是jsp,具体点就就是java代码内嵌html页面的实现!对于这里的jsp,他的主要功能还是为了在页面显示后台生成的有用数据,这样做最大的问题就是页面和代码的混乱,致使美工无从下手,程序员维护起来也是苦不堪言,做jsp的兄弟一定很清楚!

目前解决此方法的手段最主要就是靠jsp的taglibs(jsp扩展标记库),它的主要功能就是把jsp中的java代码结构条理的放到指定的java类中去解决掉,这样非常明显的减少了java代码在jsp页面中的使用量,就像现在比较流行的“减少代码量,增加脚本配置”这个模式,最明显的例子就是struts的自定义标记库,例如使用struts-html.tld文件中给出的很多已经实现好的方法,可以很好的解决jsp中经常使用到的一些功能,在jsp中也是简简单单的在需要调用的地方加入相应的taglibs调用语句就可以了!这样做是减轻了jsp中的混乱性,但是并没有真正实现页面和程序的分离,程序员不仅要有高超的结构组织技能,而且同样还要面对代码和html标记混杂的程序!

目前xml的出现提供了新的有效的方式,在这里xml就是一种有结构的存放数据的数据源,就像是一个中间联系人一样,xsl也是xml的一种特定实现技术,它的实现就是让html融入自己的机体内,然后把html有按结构合理的分开,每一部分实现特定的功能,每个部分可以互相的调用,对于html中需要从后台得到数据就可以从xml取出,因为xsl本质就是xml,所以它才可以按照xml的结构从xml中取出数据!

xsl文件中的示例
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!--开始必须的标志,声明它是xsl>
<xsl:template match="/"> <!--这里主要定义了此处需要从xml中的跟节点开始取值-->
<html>
<head>
<title>test</title>
</head>
<body>
<xsl:apply-templates select="root/node"/> <!--这里调用了底下的template,相当于函数调用一样,它们是通过xml结构的匹配来调用其他模板的 -->
</body>
</xsl:template>
<xsl:template match="root/node">
<input type="text" name="ID" value="{ID}" /> <!--这里就把ID节点里面存的值取了出来,在页面显示中也就是输入框中有了默认的一个值 -->
</xsl:template>
</xsl:stylesheet>

xml文件示例
<root>
<node>
<ID>001</ID> <!--页面的输入框就会显示001>
</node>
</root>

怎么在web中显示这些呢,需要一个xsl解析器,一般比较流行的是xalan,它已经集成在了jboss中,可以使用sun制定的JAXP通用接口来实现xml和xsl的结合,在web方式使用中xsl是以一个文件的性质存在,而xml是通过taglibs中定义的具体java类在内存中生成一颗xml结构树来实现。使用的方式是jsp取出具体的xsl文件,放到taglibs中通过JAXP接口把内存中的xml一起解析出来,形成jsp流,让jsp文件显示在页面,这里的jsp只是一句话而已

<%@page contentType="text/html; charset=gb2312"%>
<%@ taglib uri="/WEB-INF/coal.tld" prefix="testXsl" %>
<coal:testXsl xslUri="test.xsl" xslCache="true"/>

所有的操作都由taglibs和xsl还解决了
taglibs中调用的java类输出具体的xml结构,可以参考jdom,它就是专门提供java接口来输入xml格式的Document对象!使用很方便,可以去它的网站看看!
www.jdom.org

具体xml和xsl怎么转换成jsp流可以参考使用下面的方法
TransformerFactory tf = TransformerFactory.newInstance();//生成解析器的工厂类实例
URL url = context.getResource(xslUri);//把xsl的地址转换成URL对象
templates = tf.newTemplates(new StreamSource(url.toExternalForm()));
Transformer transformer = templates.newTransformer();//生成具有xsl指向,可以转换的Transformer对象,
Document doc = 解析过来的XML结构的Document对象
JDOMSource xmlSource = new JDOMSource(doc) //taglibs生成的Document对象放入解析源
JspWriter jw = pageContext.getOut(); //从jsp中得到jsp流对象,
StreamResult xmlResult = new StreamResult(new BufferedWriter(jw));//生成解析的结果对象,主要是把结果给jspWriter
transformer.transform(xmlSource, xmlResult); //进行解析,边解析,边输出jsp流,那么jsp流就自动显示在了页面!

具体怎么做需要兄弟们自己动手了,可以参考ibm的一些文章,不过首先要搞清楚结构,一般servlet使用struts架构比较合适,建议之谈!

这样做就可以让xsl做数据显示位置的工作,taglibs具体做这么取数据的工作,程序员主要维护java代码和配置教本,美工可以发挥自己的想像,xsl+xml程序员也可以轻松的对程序和页面进行维护!

这些只是我的一点拙见,希望大家能给出更好的方法,解决当前的技术问题,不过在国外xsl+xml+stuts+。。。已经很流行了,呵呵,希望国内早些走到这一部!
 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shengbox/article/details/2280883

智能推荐

使用HtmlUnit实现数据抓取_weixin_33869377的博客-程序员秘密

HtmlUnit将HttpClient和java自带的网络API进行结合,使抓取数据变的更加容易、更加易于操作。HtmlUnit的底层还是封装了HttpClient,但是经过封装后,解析出来的内容更像一个网页,而不是抽象的请求和响应,所以更加便于开发人员上手。//[1]new一个WebClient,在其中定义一种浏览器WebClientwebClent=newW...

java 保留两位小数,小数转换成百分比显示使用DecimalFormat_xuehuagongzi000的博客-程序员秘密

1、保留两位小数DecimalFormat df = new DecimalFormat("0.00");System.out.println(df.format(2.1274));结果:2.132、小数转换成百分比DecimalFormat df = new DecimalFormat("0.00%");System.out.println(df.format(0.127...

Jabber介绍_Lutts的博客-程序员秘密

Jabber介绍一. 前言    这是我粗略读了一遍Jabber协议和相关技术文章后的产物,有些地方不一定准确。在文章中引用的一些代码来自www.jabber.org上的文章。二. 什么是Jabber    Jabber就像ICQ,MSN一样,是一个基于Internet的即时通讯系统,但是同这些即时通讯软件不同的是,它是一个开放的即时通讯系统,也是一个基于XML Stream 的协议,用于在I

运营商 sni 服务器,什么是服务器名称指示(SNI)_吃货落拓的博客-程序员秘密

在HTTPS大热的今日,在过去的HTTP时代,解决基于名称的主机在同一IP地址上托管多个网站的问题并不难。当一个客户端请求某特定网站时,把请求的域名作为主机头(Host)放在HTTP Header中,服务器端知道应该把请求引向哪个域名,并把匹配的网站传送给客户端。但使用HTTPS时就无法故技重施了。因为在SSL握手的过程中,不会有Host的信息,所以服务器端通常返回的是配置中的第一个可用证书。因...

unity中实现背景滚动_kevinfkq的博客-程序员秘密_unity动态背景

让图片上下/左右滚动1.导入一张需要滚动的背景,将Texture Type设置为Defauit2.新建一个材质Material将Shader设置为Unit/Texture,并将上面设置好的背景图片拖入3.新建一个3D物体Quad,设置款高比例和背景图片相同,将上面设置好的Material拖入Quad,此时控制Offset参数就可以实现背景滚动效果。4.给背景Quad上Scriptsusing System.Collections;using System.Collections.Gener

Django基础_weixin_30568591的博客-程序员秘密

Django框架简介MVC框架和MTV框架MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。想要更详细的了解MVC模式? :&gt;&gt;点我Django的MTV模式 Model...

随便推点

SpringBoot集成knife4j_code2roc的博客-程序员秘密_springboot集成knife4j

前言项目api编写有文档但是调试麻烦,需要借助postman/apipost等第三方工具,需要在开发框架中内置接口管理及调试功能增加开发便捷性pom配置说明,框架使用springboot版本为2.0.0.RELEASE &lt;dependency&gt; &lt;groupId&gt;com.github.xiaoymin&lt;/groupId&gt; &lt;artifactId&gt;knife4j-spring-boot-sta

[知识图谱] 5.1-知识图谱开源数据获取_weixin_33806914的博客-程序员秘密

学习知识图谱技术离不开数据,其实很多互联网公司都有公开的一些数据源供爱好使用。下面整理一些,仅供参考。国外知识图谱开源数据wikidata:包含所有维基数据实体列表freebase:类似维基百科,不同的时freebase是结构化数据webkb-2:允许Web用户在WebKB服务器机器上的一个大的知识库中存储、组织和检索知识dbpedia:它从维基百科的词条里撷取出结构化的...

HBase Master启动过程_mark_yueye的博客-程序员秘密

master启动过程: -->首先初始化HMaster-->创建一个rpcServer,其中并启动-->启动一个Listener线程,功能是监听client的请求,将请求放入nio请求队列,逻辑如下:-->创建n个selector,和一个n个线程的readpool,n由"ipc.server.read.threadpool.size"决定,默认为10-->读取每个请求的头和

vba的正则表达式使用_m0_37847492的博客-程序员秘密

Sub getNum1()    ' 这种使用方式需要&quot;工具&quot;&quot;引用&quot;    ' 引用Microsoft VBScript Regular Expressions 5.5类库    Dim i As Integer    Dim j As Integer    j = 1        Dim reg As New RegExp    Set reg = CreateObject...

安装Tez 0.9.0_新西雪的博客-程序员秘密

安装Tez 0.9.0 安装这个东西,花了3天时间..............网上找的资料大部分都是要么低版本的,要么写很乱,又不详细..........走了许多弯路,最后在大神的帮助下,完成了tez0.9.0的安装。希望对大家有帮助!一、首先到官网下载tez0.9.0-bin.tar.gz版本的压缩包这里选择bin包的原因是不需要手动地去编译,节省时间

推荐文章

热门文章

相关标签