精华内容
下载资源
问答
  • web 开发 - 编译工具1

    2010-11-12 00:26:00
    保证每个项目的开发人员都可以一键发布,新加入的开发人员快速在本机进行部署。江南白衣在四种软件开发实践中建议每三个礼拜就发布一次。我认为在项目开发开始后,每个礼拜都进行软件的发布,每三个礼拜进行一次...

    在项目开始编程的第一天就发布你的HelloWorld.

    我们编写的程序最终需要发布,我的建议是在项目的第一天就建立好的你的发布脚步,在开发的过程中随时发布最新的进展到dev服务器上。每次项目会议时,demo演示环节,访问服务器而不是开发人员的本机。 保证每个项目的开发人员都可以一键发布,新加入的开发人员可快速在本机进行部署。

     

    江南白衣在四种软件开发实践中建议每三个礼拜就发布一次。我认为在项目开发开始后,每个礼拜都进行软件的发布,每三个礼拜进行一次内部开发版本的增加(0.00 0.01)。每个开发人员都知道目前软件的全景,在进行软件feature brain storm时,非常清晰的界定哪些是已实现,哪些还是思维中孕育的云雾。基本上在一个feature的雏形出来后,下一个最重要的feature就跃然脑中了。往往你的头脑可以同时做两件事:当前feature的细节实现(coding),下一个feature的定义(requirements)。这种交替对你stuck时非常有益处。

     

    Ant

     

    如果你是c/c++程序员,相信你必然写过不少的make脚本。如果你是java程序,ant就是你必须掌握的第一个(如果你从notepad 下的helloworld开始)或者第二个工具(假如你从eclipse平台开始)

     

    Ant是什么?

    Ant is a Java-based build tool. 主要完成以下三个任务:

    • 编译

    • 打包/发布

    • 运行测试

    为什么不直接使用javac来编译我的程序,然后使用jar来打包我的程序?

    兄弟,想必你也了解任何一个非hello world的程序都会引用到许多的其他lib,任何一个web类的java程序在打包时都会有一大堆WEB-INF(页面,configcssjavascript)的文件。Ant就是来自动帮你来include lib引用,组织你的web app文件...

     

    Hello Ant

    任何一个hello world 类的 tutorial,包含以下四步:

    • Find a simple example

    • Try it

    • Have some basic concept

    • Know how to dig it more.

    在学习踢球时,教练一般是先跟你示范,然后让你模仿,最后是跟你理论。同样,我们学习任何一个工具,框架,语言时,基本上遵守三步走的原则: color: #000000;">示范模仿理论。如果你悟性较高,就会有第四步:创新。学习的另外一个基本原则就是从整体局部。假如你给一位老先生讲解汽车的结构,首先你拿出一个单独的轮子,告诉他汽车有四个这样的轮子,接着整出一单独的方向盘,随后又是一个单独的油罐,一单独的发动机,除非老先生是Karl Benz,否则他是断然不能从这些零件中组装拼凑出一个完整的汽车模样。

     

    我们学习任何一样新的事物,第一件事情,总是Find a example and try it,有一个整体的认识后,对一个个局部的概念组件进行分解。废话略过,翠花,上hello, ant

    Download

    下载工具和文档

    http://ant.apache.org/bindownload.cgi

    注意下载最新的版本,阅读相应版本的文档(除非你找不到对应的文档)antzip包里面已经包含有manual,所以不用另外下载。当然你也可以bookmarkmanual文档网址http://ant.apache.org/manual/index.html

    Install

    • 解压到电脑任何一个有空间的地方,比如D:/apache-ant/ant-1.7
    • antbin(D:/apache-ant/ant-1.7/bin)路径加入到path(windows下:我的电脑 – 右键 property - 高级 – 环境变量)。习惯的做法是创建一个ANT_HOME的环境变量,指向ant目录(D:/apache-ant/ant-1.7),然后修改path

                     path=%ANT_HOME%/bin;%PATH%

     

    打开一个新的CMD窗口,输入 ant,验证是否设置成功。

    如果提示你找不到build.xml,安装成功;如果提示没有ant这个命令,请google如何设置环境变量.

    Try it

    java 源文件  hello ant

     

     

    build.xml文件

    使用ant,就从build.xml文件开始。在CMD下面运行ant命令,默认会读入当前目录下build.xml文件,执行指定的target.

    example

     

     

     

    目录结构

     

    -Myproject

          -src

               -Hello.java

          -build.xml


    使用ant命令,打开CMD,切换到Myproject目录,执行不同的task,观察CMD控制台输出和Myproject目录下新文件的生成

    > ant

     

    > ant clean

     

    > ant init

     

    > ant compile

     

    > ant dist

     

    麻雀虽小,可也五脏俱全。ant到底做了哪些事情?从build文件结构即可看出端倪:

    变量定义properties: 如同java程序中,我们经常会抽取重复的字面常量为一个静态变量,以便修改,ant中的property的一个重要作用就是定义对字符串常量的引用,比如你可以将一个很长的路径定义为property

    <property name=”long.path” value=””/>

    在引用该路径时,只需要使用${long.path}即可。这样如果改路径修改为E:/xx/yy/zz,你只需要修改该property即可,而不用对所有使用到该路径的地方进行replaceProperty另外一个重要的作用则对构建过程进行customize。比如我们在dev(开发), test(测试), prod(产品)中分别有不同的config文件(数据库的连接,不同的数据库服务器的ip),在打包时,我们希望生成的jar/war根据需要包含相应的config。这时我们可以使用${config.target},在执行ant命令时,通过-D参数选项来指定这个property值。

    ant -Dconfig.target=prod

    初始化 init: 生成build目录,编译过程中产生的class文件,放于在此目录

    编译compile(javac): 将给定目录下(src)的所有java文件进行编译,指定目标目录为init中生成的build目录

    打包 dist(jar): 将给定目录下(build)class文件,打成jar

    清理clean:将构建中生成的一些临时目录删除

     

    Ant Concept

    project

    熟悉XML文件的都知道,一个xml文件的node tree从一个根节点开始。build.xml 文件的根节点是project, 有三个很有用的属性

    • name – 可使用 ${ant.project.name} 来引用, 关于property,下文会进一步说明

    • default – 默认运行的target

    • basedir – build.xml 文件中所有相对路径的参考路径

    target

    官方文档: A target is a container of tasks that cooperate to reach a desired state during the build process

    target对应我们构建过程中的一个环节, 编译,打包...。在ant中,则是task的容器(xml包含task子节点的父节点)

     

    我们在构建中,各个环会有先后依赖关系,要打包生成jar文件,首先需要编译生成class文件。Targetdepends属性 制定依赖关系。例子中dist依赖于compile,compile依赖于init

    In a chain of dependencies stretching back from a given target such as D above, each target gets executed only once, even when more than one target depends on it.

    两个最基本的属性

    • name

    • depends

    task

    官方文档: A task is a piece of code that can be executed.

    Ant不过是脚本, 真正做事情的是什么呢? 编译,jdk bin下面的 javac; 生成目录,batmkdir命令... ant中的task则是调用这些命令的接口。Ant build-in task 很多,最常用的以下5

    javac

    java

    jar

    mkdir

    delete

    property

    最简单的property就是一变量,有两个最基本的属性

     

    • name
    • value

     

     

    比如,<property name="foo.dist" value="dist"/>, 然后可使用${foo.dist}引用

    你可以从properties文件里一次引入多个property<property file="foo.properties"/>
     
    还可以引入环境变量
       <property environment="env"/>
      <echo message="ANT_HOME is set to = ${env.ANT_HOME}"/>
    
    此外,ant 还有一些内建的property

    Build_in_property: 使用频率最高的当是前面提到的${ant.project.name} ${basedir}

     

    path like structures

    在我使用ant的初期,最常用而又最迷糊的就是path 类的结构。

    我们编译时候,往往需要classpath,来包含给类的依赖jar包;在打包文件时,往往需要指定哪些文件需要被包含。

    这正是path/classpath 用武之地。

    例子

    定义一个path结构,在javac中使用classpathref来应用这个path,从而指定依赖的jar包

    下面例子中包含${lib.dir}目录下所有的jar包(包括子目录中的jar)

    注意,ref引用时不需要${}来引用, path 中可以通过refid嵌套另外一个path,通过refid来引用另外一个path也是直接使用名称即可

     也可以直接嵌套classpath,不过我们为了复用,往往另外定义path

    从上面的例子中可以看出,path类结构有以下几种写法

     

    • pathelement 
      •  指定location属性,指向单个文件或目录
      •  指定path属性, ; : 分隔的多个location, 或者引用另外一个path
    • 使用refid 进行嵌套 (或者classpathref 属性进行引用)
    • 包含resouces colloection其中最常用的当属于FileSet,通常我们指定一个dir,通过includeexclude来选出我们要包含的文件
    <include name="**/*.java"/>
    <exclude name="**/*Test*"/>
    模式pattern,经常用到两种,*
    **。我们都知道*表示匹配任意的character(包括空)。ant中是进行path匹配,因此考虑嵌套结构(子目录):
    单个*,则指对一层目录(per-directory)结构进行匹配,
    两个**,则表示0层或者多层目录结构,
    test/*   只匹配 test目录下的文件, such as test/x.java, test/y.html, but not test/foo/bar/xyz.html
    test/**  匹配所有嵌套目录(子目录), such as test/x.java, or test/foo/bar/xyz.html, but not /xyz.xml.

     

    Reference

    (如有雷同,纯属拷贝):

    http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html
    http://ant.apache.org/manual/tutorial-writing-tasks.html

     

     

     

    How to dig it more ?

    本人也尚在dig之中,但以为要想dig more,无非以下几种

    1. practice more 更多的练习

    2. use it more 更多的使用。我们经常说用english来思考,用java来思考,同样的,用ant进行思考。换一种说法,真正的运用它来帮助你解决实际的问题。如果你在开发中总是重复的做一件事情,比如将生成的war包拷贝到Tomcatwebapp目录下来测试最新的代码,这时就该想想使用ant来自动化copy。老赵说他说c++几次下来都没有坚持到底。我有同感,学校上机考试用的都是c++,可工作后从没有使用c++,现在也忘得差不多了。为什么? c++难吗?非也,未用而已。如果在某人的简历上写着精通c/c++,java,delphi, python, php, ruby, perl, javascript,...十多种语言,一定要问问这些语言是否解决过实际的问题,是否有真正的生产力。如果仅仅是hello worldtoy,一天通一门非难事。

    3. read more ant build file in open source project。外行看热闹,内行看门道。优秀的开源项目不仅是源代码一流,build文件和文档往往也是一流。

    4. go through the manual1), 2), 3)是点滴的经验积累,要想通盘掌握,了然于胸,go through是必不可少的环节。同样的,在熟悉掌握一个框架时,go through 所有的classAPI也是你自己挖掘隐藏属性的好方法。

    5. summary。本文也是summary之作...

    6. jump out of ant: other tools, maven

    展开全文
  • 开源最前线(ID:OpenSourceTop) 猿妹编译链接:https://opensource.com/article/20/4/open-source-css-frameworks大多数人想到Web开发时,通常会想到HTML或JavaScript,往往忽略了CSS,根据Wikipedia的说法,CSS既是...

    开源最前线(ID:OpenSourceTop) 猿妹编译

    链接:https://opensource.com/article/20/4/open-source-css-frameworks

    大多数人想到Web开发时,通常会想到HTML或JavaScript,往往忽略了CSS,根据Wikipedia的说法,CSS既是网页中最重要也是最常被遗忘的部分之一,尽管它是万维网的三大基础技术之一。今天就和大家分享9个流行的、强大的前端开源框架,帮助你轻松构建漂亮的网站前端。1、BootstrapBootstrap无疑是最流行的CSS框架,它是最早的Web前端框架,由Twitter开发。Bootstrap还提供了许多示例来帮助你入门。

    2eb535c110e4bc82968816b1a453a4ff.png

    使用Bootstrap,你可以将不同的组件和布局组合在一起,从而创建有趣的页面设计。它还提供了大量详细的文档。目前在Github上已经有1100多个贡献者,19000多个提交。(Github地址:https://github.com/twbs/bootstrap)2、PatternFlyPatternFly是Red Hat的开源CSS框架,和Bootstrap不同的是,Bootstrap是为那些想要创建漂亮网站的人而设计的,而PatternFly主要专注于企业应用程序开发人员,提供诸如条形图、图表、导航之类的组件,实际上Red Hat就是使用它创建了OpenShift。

    bbcd91bf5bd028d110f3b30327d42cb6.png

    除了静态HTML,PatternFly还支持ReactJS框架,这是Facebook开发的流行JavaScript框架。PatternFly具有许多适用于企业级应用程序的高级组件,如条形图,图表,模式和布局。PatternFly在GitHub上一共有1,050多个提交和44个贡献者。(Github地址:https://github.com/patternfly/patternfly)3、Material Components for the webMaterial Components for the web(MDC Web),是谷歌专为Web设计的全新前端框架。MDC Web可帮助开发人员执行Material Design,组件由谷歌的核心工程师团队和UX设计人员开发。这些组件可以建立可靠的开发工作流程,以构建美观且功能强大的Web项目。

    c63ea079f945680468a958a172580154.png

    MDC Web在Github上共有5700多个提交和349个贡献者。(Github地址:https://github.com/material-components/material-components-web)4、PureBootstrap,Patternfly和MDC Web是功能非常强大的CSS框架,但它们可能非常繁琐和复杂。如果你想要一个轻量级的CSS框架,可以尝试Pure.css,它本身更接近于CSS编程,但又可以帮助你构建一个不错的网页。Pure是具有最小占用空间的轻量级CSS框架,它由Yahoo开发,根据BSD许可是开源的。

    1d2651b97bcd8c68a1d035a24bf582aa.png

    Pure在Github上共有565多个提交和59个贡献者。(Github地址:https://github.com/pure-css/pure)5、FoundationFoundation声称是世界上最先进的响应式前端框架。它提供了用于构建专业网站的高级功能和教程。许多公司,组织都使用该框架,并且该框架具有大量可用的文档。

    a0c5fc559dae83b5d754a5bb003a189e.png

    Foundation在Github上有将近17000个提交和1000个贡献者。(Github地址:https://github.com/foundation/foundation-sites)6、BulmaBulma是一个基于Flexbox的开源框架,可根据MIT许可证开源。Bulma是一个非常轻量级的框架,因为它只需要一个CSS文件。Bulma拥有简洁明了的文档,可轻松选择你想要的主题。它还具有许多Web组件,你可以在设计中使用它们。

    7fe00d2404c0a09d8435d49484c489b6.png

    Bulma在Github上有1400多个提交和300个贡献者。(Github地址:https://github.com/jgthms/bulma)7、Skeleton如果说还有什么框架比Pure更加轻量级,那一定是Skeleton。Skeleton库只有大约400行,并且该框架仅提供一些基本的CSS框架组件。尽管如此,Skeleton还是提供了详细的文档来帮助你快速上手。

    6ff9f8e3caff20ac962d70c321bf6bb8.png

    Skeleton在Github上共有167个提交和22个贡献者,但它不是最活跃的项目,它最新一次的更新是在2014年。(Github地址:https://github.com/dhg/Skeleton)8、Materialize Materialize 是一个基于 Material Design风格的一个现代化的响应式前端框架,解决了最繁重的工作,结合你的自定义组件,为你提供默认的样式。Materialize的文档页面非常全面,并且很容易遵循。其组件页面包括按钮,卡片,导航等。

    9140673a4139adfd630647b5cb686a2e.png

    Materialize在Github上共有3800多个提交和250个贡献者。(Github地址:https://github.com/Dogfalo/materialize)9、BootflatBootflat是从Twitter的Bootstrap派生的开源CSS框架。与Bootstrap相比,Bootflat更简单,并且更加轻量级。Bootflat的文档似乎几乎受到了IKEA的启发,大部分都是图像,没有太多的文字。

    c2b1cb0a2374951258bdfeb9aeaf9536.png

    Bootflat是在MIT许可证下开源的,在Github上有159个提交和8个贡献者。(Github地址:https://github.com/bootflat/bootflat.github.io)

    ●编号975,输入编号直达本文

    ●输入shuku获取免费电子资源

    ●输入m获取到文章目录

    4ec2922afc10e8e4cf7879fe0fc00bf8.png

    展开全文
  • 本文转自:https://blog.csdn.net/dennk/article/details/51834508#commentBox以前用eclipse开发web项目时,配置文件直接放在src目录下面,部署的时候会把配置文件也编译到classpath下面。用IDEA不同了,同样的...

    本文转自:https://blog.csdn.net/dennk/article/details/51834508#commentBox


    以前用eclipse开发web项目时,配置文件直接放在src目录下面,部署的时候会把配置文件也编译到classpath下面。

    用IDEA可不同了,同样的做法部署时classpath下没有找到配置文件。

    解决方案:

    将配置文件放在resources路径下即可(如果没有则新建一个,右击resources——>Mark directory As——>resources root)


    展开全文
  • 使用Flask开发Web应用程序,它会编译您尝试(至少提交一次)但无法获得“接受判决”的所有Codeforce问题。 为了方便起见,可以按索引(即A,B等)或等级(即小于1000、1000和1200之间,依此类推)对问题进行区分。...
  • Web开发服务器,让您导入任何内容* *如果您的意思是:JavaScript ES2015 +,TypeScript,JSON,JSX,TSX,AssemblyScript,Rust,C,C ++,WebAssembly,将来还会编译成JavaScript或WebAssembly。 Zwitterion...
  • 基于Axis2和Tomcat的自动化配置Web Service开发     目录 一、背景介绍...3 二、自动创建流程...3 1. Web Service Request.3 2. Web Service名称获取... 3 3. Web Service代码生成... 3 4. Web ...

     

     

    基于Axis2Tomcat的自动化可配置Web Service开发

     

     

    目录

    一、背景介绍...3

    二、自动创建流程...3

    1. Web Service Request.3

    2. Web Service名称获取... 3

    3. Web Service代码生成... 3

    4. Web Service代码编译... 4

    5. Web Service调用... 4

    三、开发准备...4

    1. Install Tomcat.4

    2. Install Axis2.5

    3. Tomcat设定...5

    4. Axis2设定...5

    四、Web Service配置文件...6

    1. Simple Service Properties.6

    2. Service Header.7

    3. RequestParameters.7

    4. ServiceOperations.7

    5. ResponseOutput.8

    五、Service代码开发...9

    六、Web Service开发实例...9

    1. simpleService.properties.10

    2. login.xml10

    3. beeCommission.xml13

    4. javaMethod.xml14

    七、注意事项...16

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    一、背景介绍

             为了加快Tomcat环境下基于Axis2引擎的WebService开发,将开发Web Service的处理如参数解析,方法调用和结果返回进行了封装,生成一个Axis2Service.jar包,实现了Web Service的输入,处理和输出的可配置,简化了WebService的开发工作,并使用Axis2hotupdatehotdeploy功能,直接从WebServicepropertiesXML配置文件生成WebService代码,自动编译成class发布,简化了WebService的开发,并可部署相应的URL转换Servlet,缩短了WebService的调用URL

    二、自动创建流程

    1. Web Service Request

        用户或系统Server发出Web Service Request请求,包括Request URL以及相应的参数

    例如http://10.139.8.167:8080/TestService/beeCommission?

    strXMLParameter=<?xml version='1.0' encoding= 'UTF-8'?><requestversion='1.0'><beeCommissionCommand><Parameters><sessionID>112843584</sessionID><startDate>20130101</startDate><endDate></endDate></Parameters></beeCommissionCommand></request>  

    这是XML格式的RequestParameter;

    http://10.139.8.167:8080/TestService/javaMethod?userId=leoliao&orderTime=20130326111259

    这是String格式的RequestParameter

    2. Web Service名称获取

        从服务器上响应上述URLServlet收到的的Request URI中获取Web Service的名称。例如上述Web Service Request中,获得Service Name为:TestService

    3. Web Service代码生成

     Web Service的配置文件分为两种:

    一种是XML文件,是全配置的Web Service,输入,执行操作和输出都可配置;

    另一种是properties文件,是简单配置Web Service,直接将Web Service Mapping到指定的java方法。

        根据Tomcat路径下conf目录中WSConfigure活页夹中所有的web serviceconfigure XML文件及properties文件,依次加载每一个XML文件到WebService对象,加载每一个properties文件到SimpleWebService对象,并生成相应的public java 方法,加上importAxis2Service jar包中的语句,组成Web Servicejava文件,放在Axis2缺省发布class文件作为web service的目录下。

        每个Web Service配置文件都会有Debug的开关,如果所有的Web Service的配置文件中的Debug都是关闭的,则Web Service的自动生成和编译就不会运行。(Web Service Debug完成,正式发布后,应该把所有配置文件中的Debug都关掉。)

    例如,上述例子中,读取Web Service XMLconfigure文件的路径为:E:\java\Tomcat7022\conf\WSConfigure

    生成的Web Service代码文件为TestService.java,存放路径为:

    E:\java\Tomcat7022\webapps\axis2\WEB-INF\pojo

     

    4. Web Service代码编译

    调用Java runtime,执行javac,编译生成的Web Service java代码,生成class文件,被自动发布为Web Servicejava代码里面的每一个公共方法,都将发布成一个Web Service方法。

    5. Web Service调用

       转换短的Web Service调用URL,并处理所有参数,生成新的Web Service URL然后把调用Redirect到新的Web Service URL,完成Web Service调用。

       例如:

    http://10.139.8.167:8080/TestService/javaMethod?userId=leoliao&orderTime=20130326111259

    将被转换为:

    http://10.139.8.167:8080/axis2/services/TestService/javaMethod?userId=leoliao&orderTime=20130326111259

    、开发准备

    1. Install Tomcat

      Install JDK set System VariableJAVA_HOME

      Install Tomcat  apache-tomcat-7.0.22.exe (Tomcat7.exe)

    安装完毕后,在IE中输入http://localhost:8080应能看到如下Tomcat的启动界面

    如果无法看到此界面,说明Tomcat安装不成功,请检查相关配置及安装文件并重新安装直至成功。

                                 

    2. Install Axis2

      Downloadaxis2-1.6.1-bin.zip,unzip,set System variable AXIS2_HOME

      Download axis2.war,copy toTomcat7 webapps

    Tomcat会自动解压axis2.war,在webapps目录中生成一个axis2的活页夹,所有axis2 Web Service引擎的应用文件都在这个目录下。

    Axis2安装完毕,在IE中输入http://localhost:8080/axis应能看到如下Axis2的主界面:

    如果看不到这个界面,说明Axis2安装不成功,请检查相关设置,确保Axis2安装成功。

     

    3. Tomcat设定

      取得Axis2Service.jar包,放入tomcatlib目录中。

      tomcatconf目录下的web.xml,增加TestService(要开发的WebService的名称)的servlet注册:

    <servlet>

        <servlet-name>TestService</servlet-name>

        <servlet-class>com.foxconn.cmmsg.itss.URLTransfer</servlet-class>

    </servlet>

    mapping到对所有以TestService开始的URL,也就是TestService所包含的所有API访问路径,都会由这个Servlet来处理:

    <servlet-mapping>

            <servlet-name>TestService</servlet-name>

           <url-pattern>/TestService/*</url-pattern>

    </servlet-mapping>

    4. Axis2设定

      使用Axis2用最简单的缺省POJO方式发布Web Service,避免打包成aar文件再发布的繁琐步骤:

    直接把编译好的TestService.class文件放到axis2\WEB-INF\pojo目录中

    如果没有pojo目录,则建立该目录;

    如果需要使用其他目录名称,请修改axis2\WEB-INF\conf\axis2.xml中:

    <deployer extension=".class"directory="pojo"class="org.apache.axis2.deployment.POJODeployer"/>

    缺省的pojo为其他的目录名。

      修改axis2\WEB-INF\conf\axis2.xml中:

    <parametername="hotdeployment">true</parameter>

    启用热发布功能,Tomcat不需要重新启动就可以自动发布Web Service

      修改axis2\WEB-INF\conf\axis2.xml中:

    <parameter name="hotupdate">true </parameter>

    启用热更新功能,Tomcat不需要重新启动就可以更新已发布成功的Web Service

    四、Web Service配置文件

    使用Axis2Servic.jar包所包含的框架进行Web Service的开发,最主要的工作就是配置Web ServiceXMLproperties configure文件。这些configure文件缺省路径在Tomcatconf目录下的WSConfigure文件夹:

     

    1.Simple Service Properties

    Web ServiceProperties configure配置文件比较简单:

    例如simpleService.properties内容如下:

    sevice.version =1.0  service版本

    service.ame=simpleService  service名称

    service.debug=true  是否打开debug

    service.datasource=hiverService 数据源JNDI名称

    service.classfolder=WSClass  加载类文件的活页夹

    Mapping2JavaMethod=ServiceImpl.simpleService  service mapping到的java类和公开静态方法名称

    Parameters=para1,para2,para3  service的参数列表

    Web ServiceXMLconfigure配置文件主要分四部分,依次介绍如下:

    2. Service Header

    <?xml version="1.0" encoding="UTF-8"?>

    <service name="JavaMethod" tag="JavaMethod"version="1.0"

             debug="true"datasource="hiver" classfolder="WSClass">

             <errormessageList>

    <errormessage>Success.</errormessage>

                <errormessage>Your accountis locked.</errormessage>

                <errormessage>Fail to pairyour account.</errormessage>

                <errormessage>API version isincorrect.</errormessage>

             </errormessageList>

    这里定义了WebService方法的名称,显示的TagAPI版本,是否打开debug,使用的数据源以及如果使用Java方法,引用的javaclass的活页夹。

    errormessageList部分可以有一条或多条,是针对此web service定义的error message,顺序位置为对应的errorcode

    每个Web Service方法都必须有。

    3.RequestParameters

    <requestParameters format="String">

                       <requestParameter>

                                <name>userId</name>

                                <tag>userId</tag><!--tag-->

                                <type>text</type><!--type-->

                                <required>Yes</required><!--isRequired-->

                                <mapping>_userid</mapping><!--mappingto field -->

                       </requestParameter>

            ….

    这里定义了Web Service方法RequestParameter的格式,可以有XMLJSONSTRING(通过URL QueryString)三种格式;随后是各个RequestParameter的具体定义,可以有0到多个RequestParameter

    RequestParameter定义中:

    nameparameter的名字,

    tagparameterXMLJSONURL中输入时的tag,通常和name保持一致,

    typeparameter的类型,可以是textnumericdoublefloatintegerintdigital

    requiredparameter是否必须,如果为1,y,t,yestrue,则此parameter不许为空,

    mappingparameter作为下一步ServiceOperation输入参数时的参数名称。

    4. ServiceOperations

        <serviceOperations name="{call sp_checkSession(?,?,?) }"

                       format="sp">

                       <operationParameter>

                                <name>_userid</name>

                                <mode>IN</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>userId</mapping>

                       </operationParameter>

    这里定义了Web Service方法要进行的ServiceOperation,格式可以是SPname就是调用SP的语句,包括sp名称;或者java,则name就是要执行的java方法的包名及类名;如果此java方法有参数,则name@@结尾。

    下面ServiceOperations的各个operationParameter定义。可以有0到多个参数:

    nameparameter的名字,

    modeparameter的模式,INOUTINOUT

    typeparameter的类型,因为此类型可能要对应到数据库参数类型,所以有CHAR,VARCHAR,FLOAT,DOUBLE,INTEGER,BIGINT,JAVA方法,可以都填VARCHAR

    preprocessparameter的预处理,目前有以下几种:

    trim

    tolowercase

    touppercase

    md5

    sha1sha-1

    base64

    decodebase64 decode),

    uuid(随机UUID字符串,value为长度,如果value为空,缺省长度为16),

    hex(随机16进制字符串,value为长度,如果value为空,缺省长度为16),

    random(随机字符串,value为长度,如果value为空,缺省长度为16),

    ip

    format(?),其中?为一整数,对value取证到?位,

    hex(?),其中?为一整数,对value转换到16进制?位。

    mappingparameter mappingRequest Parameter的名字,此parameter会取相应的RequestParamter的值;

    如果mapping字符串包含.,则为mappingjava方法取值,如果mapping字符串中不包含(…),则为Java方法无参调用;否则,为有参java方法调用,mapping字符串中方法名后括号中的字符串为参数列表,多个参数以@@分隔,参数名 mappingRequestParamter取值。

    5.ResponseOutput

    <responseOutput format="xml">

             <outputParameter>

                       <name>Success</name>

                       <tag>Success</tag>

                       <mapping>NULL</mapping>

             </outputParameter>

    这里定义的是Web Service方法返回的格式,有XMLJSONSTRING,以及参数,可以有1到多个参数,其中参数nameerrorcode的若值为0,表示成功,其余值表示失败:

    Outputparameter定义中:

    name parameter名,

    tagparameter显示在XMLJSONString中的tag,通常和name保持一致,多级tag中间加.,例如<output><time>这种tag,应设定为output.time,

    mappingparametermappingServiceParameterRequestParameter的名字,

    如果mapping字符串为不含.则为参数取值,NULL表示空值,其余表示mappingService ParameterRequest Parameter取值;

    mapping字符串包含.,则为mappingjava方法取值,如果mapping字符串中不包含(…),则为Java方法无参调用;否则,为有参java方法调用,mapping字符串中方法名后括号中的字符串为参数列表,多个参数以@@分隔,参数名 mappingRequestParamterServiceParameter取值。

    五、Service代码开发

        由于web service的代码已经根据配置文件自动生成了,所以这里的代码开发实际上指的是为了实现web service的特定功能,需要通过反射机制调用的一些java方法的实现。

        例如,<serviceOperationsname="ServiceImpl.SampleService@@"

                       format="java">

    此处定义Web ServiceserviceOperationsformatjava,那么我们就需要实现其name中指定的class及方法,如本例中,要实现ServiceImpl class中的SampleService方法。具体方法及参数定义可见前面Web Service XML Configure文件的解释。

    再比如:<outputParameter>

                                <name>sellCountList</name>

                                <tag>NULL</tag>

                                <mapping>ServiceImpl.getBeeSellCountList</mapping>

                       </outputParameter>

    此处定义此输出参数mappingServiceImpl类中的getBeeSellCountList方法,那么我们就需要实现ServiceImpl class中的getBeeSellCountList方法。具体方法及参数定义可见前面Web Service XML Configure文件的解释。

    要注意的是,定义在指定class中的方法都必须是静态方法,而且参数顺序要和Web Service XML configure中定义一致。同一个class中的方法名及调用参数必须唯一。这些class文件的缺省路径在E:\java\Tomcat7022\conf\WSClass,也可以在web serviceconfigure文件中指定为conf目录下不同的活页夹作为class folder

    六、Web Service开发实例

    此处给出一个simpleServiceproperties文文件实例和三个实际的Web ServiceXML configure 文件的实例。

    1. simpleService.properties

    sevice.version=1.0

    service.name=simpleService

    service.debug=true

    service.datasource=hiverService

    service.classfolder=WSClass

    Mapping2JavaMethod= ServiceImpl.simpleService

    Parameters=para1,para2,para3

    2. login.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <service name="login" tag="loginCommand"version="1.0" debug="true" datasource="hiver"classfolder="WSClass">

             <errormessageList>

               <errormessage>Your account is locked.</errormessage>

               <errormessage>Fail to pair your account.</errormessage>

               <errormessage>API version is incorrect.</errormessage>

             </errormessageList>      

    <!--request parameter -->

             <requestParametersformat="xml">

                       <requestParameter>

                                <name>name</name>

                                <tag>name</tag><!--tag-->

                                <type>text</type><!--type-->

                                <required>Yes</required><!--isRequired-->

                                <mapping>myaccount</mapping><!--mappingto field -->

                       </requestParameter>

                       <requestParameter>

                                <name>password</name>

                                <tag>password</tag>

                                <type>text</type>

                                <required>Yes</required>

                                <mapping>psw</mapping>

                       </requestParameter>

             </requestParameters>

             <serviceOperations name="{callsp_login(?,?,?,?,?,?,?,?,?,?,?) }"

                       format="sp">

                       <operationParameter>

                                <name>myaccount</name>

                                <mode>IN</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>name</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>psw</name>

                                <mode>IN</mode>

                                <type>varchar</type>

                                <preprocess>md5</preprocess>

                                <mapping>password</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>mysessionid</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>mysessionid</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>myaccountname</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>Name</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>myemail</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>email</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>myphone</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>phone</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>myareas</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>areas</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>myWMD</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>wmd</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>myjoindate</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>joindate</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>myGender</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>Gender</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>errorcode</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>errorcode</mapping>

                       </operationParameter>

             </serviceOperations>

             <responseOutputformat="xml">

                       <outputParameter>

                                <name>sessionID</name>

                                <tag>sessionID</tag>

                                <mapping>mysessionid</mapping>

                       </outputParameter>

                       <outputParameter>

                                <name>userInfo</name>

                                <tag>NULL</tag>

    <mapping>com.hiver.service.nda.ServiceUtility.getUserInfo(myaccountname@@myemail@@myphone@@myareas@@myWMD@@myjoindate@@myGender)</mapping>

                       </outputParameter>

             </responseOutput>

    </service>

    3.beeCommission.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <service name="beeCommssion"tag="beeCommssionCommand" version="1.0" debug="true"datasource="hiver" classfolder="WSClass">

             <errormessageList>

               <errormessage>Your account is locked.</errormessage>

               <errormessage>Fail to pair your account.</errormessage>

               <errormessage>API version is incorrect.</errormessage>

             </errormessageList>      

             <!--request parameter -->

             <requestParameters format="xml">

                       <requestParameter>

                                <name>SessionID</name>

                                <tag>sessionID</tag><!--tag-->

                                <type>text</type><!--type-->

                                <required>Yes</required><!--isRequired-->

                                <mapping>_sessionid</mapping><!--mappingto field -->

                       </requestParameter>

                       <requestParameter>

                                <name>StartDate</name>

                                <tag>startDate</tag><!--tag-->

                                <type>text</type><!--type-->

                                <required>Yes</required><!--isRequired-->

                                <mapping>StartDate</mapping><!--mappingto field -->

                       </requestParameter>

                       <requestParameter>

                                <name>EndDate</name>

                                <tag>endDate</tag><!--tag-->

                                <type>text</type><!--type-->

                                <required>Yes</required><!--isRequired-->

                                <mapping>EndDate</mapping><!--mappingto field -->

                       </requestParameter>

             </requestParameters>

             <serviceOperations name="{call sp_checkSession(?,?,?) }"

                       format="sp">

                       <operationParameter>

                                <name>_sessionid</name>

                                <mode>IN</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>SessionID</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>beeid</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>beeid</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>errorcode</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>errorcode</mapping>

                       </operationParameter>

             </serviceOperations>

             <responseOutput format="xml">

                       <outputParameter>

                                <name>beeCommission</name>

                                <tag>NULL</tag>

                                <mapping>ServiceImpl.getBeeCommission(beeid@@StartDate@@EndDate)</mapping>

                       </outputParameter>

             </responseOutput>

    </service>

    4. javaMethod.xml

    <?xml version="1.0"encoding="UTF-8"?>

    <servicename="JavaMethod" tag="JavaMethod" version="1.0"

             debug="true"datasource="hiver" classfolder="WSClass">

             <errormessageList>

                <errormessage>Your account islocked.</errormessage>

                <errormessage>Fail to pair youraccount.</errormessage>

                <errormessage>API version isincorrect.</errormessage>

             </errormessageList>

     <!--request parameter -->

             <requestParametersformat="String">

                       <requestParameter>

                                <name>userId</name>

                                <tag>userId</tag><!--tag -->

                                <type>text</type><!--type -->

                                <required>Yes</required><!--isRequired -->

                                <mapping>_userid</mapping><!--mapping to field -->

                       </requestParameter>

                       <requestParameter>

                                <name>orderTime</name>

                                <tag>orderTime</tag>

                                <type>text</type>

                                <required>Yes</required>

                                <mapping>_ordertime</mapping>

                       </requestParameter>

             </requestParameters>

             <serviceOperationsname="ServiceImpl.SampleService@@"

                       format="java">

                       <operationParameter>

                                <name>_userid</name>

                                <mode>IN</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>userId</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>_ordertime</name>

                                <mode>IN</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>orderTime</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>errorcode</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>errorcode</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>JavaReturn</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>_userid</mapping>

                       </operationParameter>

                       <operationParameter>

                                <name>JavaTime</name>

                                <mode>OUT</mode>

                                <type>varchar</type>

                                <preprocess>trim</preprocess>

                                <mapping>_ordertime</mapping>

                       </operationParameter>

             </serviceOperations>

             <responseOutputformat="xml">

                       <outputParameter>

                                <name>Success</name>

                                <tag>Success</tag>

                                <mapping>NULL</mapping>

                       </outputParameter>

                       <outputParameter>

                                <name>Return</name>

                                <tag>Out.Return</tag>

                                <mapping>JavaReturn</mapping>

                       </outputParameter>

                       <outputParameter>

                                <name>Time</name>

                                <tag>Out.Time</tag>

                                <mapping>JavaTime</mapping>

                       </outputParameter>

             </responseOutput>

    </service>

    七、注意事项

    1. 数据源加载失败的话,会缺省加载tomcat conf目录下的jdbc_ws.properties

    2. 定义在Web Service properties中作为Service mappingXML配置文件中作为parameter mappingJava方法,必须是publicstatic,返回字符串;

    3. 定义在XML配置文件中作为Service Operation mappingjava方法,七返回类型为List<String>,其值依次为各个Service Operation输出参数的取值。

    4. Tomcat conf目录下WSConfigure活页夹中的所有propertiesxml文件,都会被当成service配置文件而加载,只要其中有一个Debugtrue,整个Service就会重新生成,编译和自动部署发布。当系统正式运行后,可以把所有的service中的Debug配置的改为false,以提高Web Service的访问效率。

     

    全部代码及测试工程可到我的资源中下载。

     

    展开全文
  • 被调用时执行的重复使用的代码块。 函数定义 <script type = "text/javascript"> //函数的定义方式,命名方式要遵循小驼峰形式。 function funcName(){ var a = 1; document.write(a); } ...
  • 静态Web开发 JavaScript

    2015-07-29 15:51:00
    静态Web开发 JavaScript 三章 Javascript 1节javascript基本语法和注意事项 脚本,一条条的文字命令。执行时由系统的一个解释器,将其一条条的翻译成机器识别的指令,然后执行。(不需要编译)...
  • 新建Flutter 工程,默认只支持Android,iOS,可以通过命令行配置运行Web ...如果配置成功并且电脑上有Chrome浏览器,在调试工具即可看到Chrome(web),选择Chrome然后运行编译便会打开host的Flutter网页 ...
  • 非常简单的一个实例,可在此基础上开发自己的作品。 CEF功能强大 但使用起来比 Web Browser 复杂的多,而且它的官方例子 cefsimple 和 cefclient 都是使用 Win32 API 开发的,这给大家...vs2012及更高版本可编译运行。
  • 编译原理:parser,语义分析,代码优化,类型推导,静态检查,机器代码 工具: zabbix-Zabbix是由Alexei Vladishev开发的一种网络监视,管理系统,基于服务器-客户端架构。用于监视各种网络服务,服务器和网络...
  • WEB开发技术基础知识整理(3) 第三部分——JavaScript 简介 直译客户端脚本语言,不需要预编译,浏览器直接解释运行。 动态,跨平台,等等…… HTML定义用户互交事件,当事件发生时执行指定JS代码 ECMAScript,...
  • 2: 编译执行程序 不直接修改 编译后是执行程序 不允许直接修改 只能通过反汇编工具进行修改 但是可以通过就加壳技术提高安全性 3: 高扩展性 C语言开发CGI可以像开发普通应用程序那样调用系统库 也调用第...
  • Goweb开发框架ecgo.zip

    2019-07-19 08:47:54
    ecgo 是一个易学、易用、易扩展的go web开发框架。核心功能包括:自动规则路由,支持RESTfulrequest的二次封装可以直接使用格式化的Get,Post,Cookie,Session等变量来处理请求数据方便的上传文件操作response二次...
  • JDK和JRE是在Java环境下进行开发所必不少的,只有很好地掌握它们的配置与使用方法,才能进行以后的Java Web开发。 Tomcat服务器是当今进行Java Web开发使用最广泛的Servlet/JSP服务器。这是因为它运行稳定、性能...
  • 小谈springboot web开发

    2019-07-28 21:28:56
    背景 从出道以来两年半许,记得从在学校学习的JSP,再到前后端分离,再到现在公司自己想的的html混合开发。从技术栈角度分析:JSP:...接下来从编译的角度简单分析一下:JSP-----实际编译为servlet文件执行,直接...
  • Spasm是一个库,用于在D中开发可编译为Webassembly的单页应用程序。 它包含对最常用的Web api的绑定,包括dom,fetch,audio和webgl。 以及一个很小但功能强大的SPA框架,其中包括CSS。 是。 CSS-in-wasm。 目录...
  • Web开发人员很幸运,他们在网上找到了免费的工具和资源,我们每个月都会在我们的“新鲜资源”系列中尽职收集这些工具和资源。 如果您错过了上个月的批处理,请在此处重新访问,或查看今年初编译的其余新资源 。 ...
  • 浅谈Web开发中的定时任务

    千次阅读 2016-09-05 20:47:29
    曾经做过Windows server下的定时任务的业务,最近又做了一些Linux下使用...比如:你开发了一个Windows执行程序,并将其编译成demo.exe,然后你需要该任务每到特定的时间都自动进行执行... 步骤1:打开"开始" ->
  • 对比下来,Revel的资料还是比较多...Revel Web开源框架是一个高效的Go语言Web开发框架, 其思路完全来自 Java 的 Play Framework。https://github.com/robfig/revel特点:热编译,简单选,同步(每个请求都创建自己...
  • 完整的Web开发),AyrıcaLarvel,Vue,Vuex的项目。 格里克西尼姆勒 MySQL 5.7以上 PHP 7.3以上 节点JS 作曲家 Proje'nin当地OrtamaKurulması git clone git@github.com:ozgunz/full-stack.git .env....
  • C#Web应用开发项目源码及PPT教程,,在VS2008~VS2017下直接编译运行
  • 今天用springboot和vue.js通过gradle搭了一个项目,写的...然后想了想不用springboot的开发web的时候可以update classes and resources,用了springboot不可以这么做呢,我注意到run这个选项卡里面有一个reload chan
  • Bootplus是一个前端框架,根据创建和维护的最新Google+外观启发更快,更轻松地进行Web开发。 Bootplus基于要开始使用,请访问 ! 快速开始 提供三个快速入门选项: 。 克隆仓库: git clone git://github....
  • 本文整理了16款重要的Web开发工具,涵盖CSS、JavaScript、图像优化和其他方面的Web开发工作,希望对你的开发工作能有所帮助。  一、CSS工具  1. Simpless  这是一个免费的离线LESS代码编译器。如果你...
  • Mimogear是用于开发静态站点的完整的Web开发样板。 装在Mimogear中,您会找到 , 和样板,以帮助您入门。 对于任何静态站点来说,新手和专业人员都将拥有一个良好的开端! 只需运行gulp构建! 强调 特征 概要 Gulp...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,268
精华内容 507
关键字:

web开发可编译