`

今年一些小研究的总结报告

 
阅读更多

 

今年一些小研究的总结报告

 

今年弄过一些小研究,但不是太成功或未完善,

所以把这些零碎的经验和总结写在这里。

以后有时间再单独写博文或把测试工程上传至github。

 

目录:

一、使用Maven和XSL处理XML

二、MinGW中运行strace(略)

三、Java/JSP的ajax技术

四、MinGW中运行gprof和相关工具对Lua进行性能剖析

 

-------------------------------------

一、使用Maven和 XSL 处理XML

 

1. 创建maven快速开始工程 

(参考资料:

http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

$ mvn archetype:generate -DgroupId=com.iteye.weimingtom -DartifactId=testmavenxsl -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

$ cd testmavenxsl

$ ls

pom.xml src

$ mvn package

 

2. 嵌入xml-maven-plugin插件到pom.xml

(参考资料:

http://search.maven.org/

http://mojo.codehaus.org/xml-maven-plugin/plugin-info.html

http://mojo.codehaus.org/xml-maven-plugin/examples/transform-basic.html

http://mojo.codehaus.org/xslt-maven-plugin/migrate_to_xml-maven-plugin.html

在pom.xml中的<build><plugins>节点内加入xml-maven-plugin插件,如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.iteye.weimingtom</groupId>

  <artifactId>testmavenxsl</artifactId>

  <packaging>jar</packaging>

  <version>1.0-SNAPSHOT</version>

  <name>testmavenxsl</name>

  <url>http://maven.apache.org</url>

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

  </dependencies>

 

  <build>

    <plugins>

      <plugin>

        <groupId>org.codehaus.mojo</groupId>

        <artifactId>xml-maven-plugin</artifactId>

        <version>1.0</version>

        <executions>

          <execution>

            <goals>

              <goal>transform</goal>

            </goals>

          </execution>

        </executions>

        <configuration>

          <transformationSets>

            <transformationSet>

              <dir>src/main/xml</dir>

              <stylesheet>src/main/stylesheet.xsl</stylesheet>

              <destDir>target/generated-resources/xml/xslt</destDir>

            </transformationSet>

          </transformationSets>

        </configuration>

      </plugin>

    </plugins>

  </build>

 

</project>

然后根据这个配置放置xml文件到src/main/xml目录。

放置xsl文件到src/main/stylesheet.xsl。

 

3. 执行xsl转换

(参考资料:

http://mojo.codehaus.org/xml-maven-plugin/plugin-info.html

http://appfuse.org/display/APF/Eclipse

http://maven.apache.org/guides/introduction/introduction-to-plugin-prefix-mapping.html

在命令行中执行:

$ mvn xml:transform

或者用插件的全称调用任务(xxx插件对应的全称是xxx-maven-plugin)

$ mvn org.codehaus.mojo:xml-maven-plugin:transform

如果想查看帮助,可以执行:

$ mvn xml:help

$ mvn xml:help -Ddetail=true -Dgoal=transform

最终生成文件输出到

target\generated-resources\xml\xslt

目录下(可以用pom.xml指定)。

 

-------------------------------------

二、MinGW中运行strace(略)

 

http://ftp.ntua.gr/mirror/mingw/OldFiles/

http://sourceforge.net/project/shownotes.php?release_id=46827

 

MSYS-1.0.11-20080821-src.tar.gz

MSYS-1.0.11-20080821-dll.tar.gz

MSYS-1.0.11-20080821-dbg.tar.gz

msysCORE-1.0.17-1-msys-1.0.17-src.tar.lzma

 

strace.cc

strace.h

 

-------------------------------------

三、Java/JSP的ajax技术

 

一、开发环境

* Windows XP

* Eclipse JEE

* Maven 2

* MinGW

 

二、笔记

1. 创建工程

执行mvn archetype:generate进入交互模式

选择maven-archetype-webapp

(由于列表太长,

可以用mvn archetype:generate > list.txt 2>1保存到list.txt文件中)

然后根据向导创建maven工程目录

(1)选择创建模板maven-archetype-webapp的序号。

(2)选择版本,默认,回车即可。

(3)输入Java包名(如com.company)。

(4)输入工程短名(如test)。

(5)其余默认,回车即可。

 

2. 测试打包

执行以下命令

mvn compile

mvn package

 

3. 添加到pom.xml:

<project>

    <build>

        <plugins>

            <plugin>

                <groupId>org.mortbay.jetty</groupId>

                <artifactId>maven-jetty-plugin</artifactId>

                <version>6.1.21</version>

                <configuration>

                    <scanIntervalSeconds>10</scanIntervalSeconds>

                </configuration>

            </plugin>

        </plugins>

    </build>

</project>

(或者更改jetty插件的相关信息)

然后执行mvn jetty:run测试

浏览器URL为http://localhost:8080/<工程名>/index.jsp

显示Hello World!字样

按Ctrl+C关闭服务器

 

4. 转换到Eclipse工程

mvn eclipse:eclipse -Dwtpversion=2.0

用Eclipse右键的Import导入,然后按Eclipse右上角切换到Java视角,

打开Porblems视图中右上角下拉菜单选择Show

取消勾选All Errors,改为勾选Errors/Warnings on Project

然后选择工程,显示错误:

Java compiler level does not match the version of the installed Java project facet.

工程右键菜单->Properties->Project Facets->把Java由1.4改为6.0。

(注:这个问题可以用下面的maven-compiler-plugin配置来解决)

消除上面的错误。

切换到Eclipse右上角的Web视角,看到Deployment Descriptor为2.3

 

5. 修改默认JSP的字符集

主菜单->Window->Preferences->Web->JSP Files

把Encoding改为ISO 10646/Unicode(UTF-8)

另外最好把Eclispe的General->Workspace设置中

Text file encoding也设置为Other:UTF-8

以后新建JSP文件就会以UTF-8标注文件开头

 

6. 修改默认打开JSP的编辑器

主菜单->Window->Preferences->General->Editors->File Associations

点击*.jsp,把Associated editors中Web Page Editor设为Default(默认)

这样就可以高亮JSP文件,

并且可以在设计视图中用图形界面方式改变页面的样式。

在输入标签时,还可以打开Properties视图中的Attributes,

获得当前HTML标签的属性提示。

按Ctrl+Shift+F9/F10/F11/F12或工具栏上的按钮可以把布局设置为

设计器和编辑器平行显示或只显示其中一个。

 

7. 创建Servlet类

注意必须先创建src\main\java目录,

接着,打开工程的Properties对话框的Java Build Path分类,

把src\main\java目录添加到Source目录中(Add Folder...按钮)。

然后在工程右键->New->Servlet创建Servlet类。

注意,在创建对话框中

把Source folder的\<工程名>\src\main\resources

改为\<工程名>\src\main\java

创建完类后,Eclipse会提示出错,

那是因为无法导入javax.servlet下的类

(必需的jar文件不在classpath中)

打开pom.xml,在dependencies标签内加入

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.4</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<version>2.0</version>

<scope>provided</scope>

</dependency>

可以更改其中的版本,

其中,依赖的scope为provided,

表示这些jar由Java的Web容器提供,不会被打包到war中。

保存pom.xml后,在Eclipse中工程右键->Delete键卸载工程(但不删除硬盘文件)

接着,重新用mvn eclipse:eclipse -Dwtpversion=2.0生成Eclipse工程文件,

在Eclispe中右键->Import...把工程目录重新导入到Eclipse,

(注:其实这里可以直接转换,然后用refresh刷新即可,不需要重新import)

把工程的Facets的Java版本改为6.0以消除Eclipse的错误。

在执行mvn jetty:run前可以用mvn package打包war文件,

然后用7zip或winrar打开war文件,可以看到里面\WEB-INF\classes下有

Servlet类编译后的class文件。

如果之后运行mvn jetty:run启动服务器后,修改JSP或Servlet的代码,

jetty服务器会自动重启(不需要手动按Ctrl+C)。

 

8. 修改web.xml的注意问题

<servlet>和<servlet-mapping>不能交错写

 

9. 在pom.xml设置.java文件的编译器字符集

需要在<plugins>标签内加入encoding的设置(加到jetty插件配置前)

<plugin>  

<groupId>org.apache.maven.plugins</groupId>  

<artifactId>maven-compiler-plugin</artifactId>  

<configuration>  

<source>1.6</source>  

<target>1.6</target>  

<encoding>UTF-8</encoding>  

</configuration>  

</plugin>  

<plugin>  

<groupId>org.apache.maven.plugins</groupId>  

<artifactId>maven-resources-plugin</artifactId>  

<configuration>  

<encoding>UTF-8</encoding>  

</configuration>  

</plugin>

然后重新执行mvn clean compile package

 

 

10. 安装DWR(http://directwebremoting.org/)

(1)在pom.xml中的<dependencies>标签内加入依赖

<dependency>

<groupId>org.apache.geronimo.bundles</groupId>

<artifactId>dwr</artifactId>

<version>3.0.M1_1</version>

</dependency>

 

<dependency>

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

<version>1.1.1</version>

</dependency>

(2)html文件

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<script type='text/javascript' src='dwr/engine.js'> </script> 

<script type='text/javascript' src='dwr/util.js'> </script> 

<script type='text/javascript' src='dwr/interface/TestDWR.js'> </script> 

<script type='text/javascript' src='dwr.js'></script>

</head>

<body>

<p>

  Name:

  <input type="text" id="demoName"/>

  <input value="Send" type="button" onclick="update()"/>

  <br/>

  Reply: <span id="demoReply"></span>

</p>

</body>

</html>

(3)嵌入的JavaScripts文件

function update() {

  var name = dwr.util.getValue("demoName");

  TestDWR.sayHello(name, function(data) {

    dwr.util.setValue("demoReply", data);

  });

}

(4)WEB-INF/web.xml(注意<servlet>和<servlet-mapping>不能交错书写)

  <servlet>

    <servlet-name>dwr-invoker</servlet-name> 

    <display-name>DWR Servlet</display-name> 

    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>

    <init-param>

      <param-name>debug</param-name>

      <param-value>true</param-value>

    </init-param>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>dwr-invoker</servlet-name>

    <url-pattern>/dwr/*</url-pattern>

  </servlet-mapping>

(5)WEB-INF/dwr.xml

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

 

<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr//dwr30.dtd">

 

<dwr>

  <allow>

    <create creator="new" javascript="TestDWR">

      <param name="class" value="com.ugame.TestDWR"/>

    </create>

  </allow>

</dwr>

上面HTML文件中出现的dwr/engine.js,dwr/util.js和dwr/interface/TestDWR.js是自动生成的。

TestDWR.sayHello的接口定义在dwr/interface/TestDWR.js中,对应Java端的API。

Java端的API由WEB-INF/web.xml指定。

(6)总结:

pom.xml引入必要的jar库(由于没有继承DWR里的类,所以不需要重新创建Eclipse工程)。

客户端的*.html对应服务器端的web.xml。

客户端的*.js对应服务器端的dwr.xml。

 

 

11. 在jetty上配置Perl/PHP/Python CGI

(1)WEB-INF/web.xml(注意<servlet>和<servlet-mapping>不能交错书写)

  <!-- see http://docs.codehaus.org/display/JETTY/Jetty+and+PHP -->

 <servlet>

   <servlet-name>jetty-perl</servlet-name>

   <servlet-class>org.mortbay.servlet.CGI</servlet-class> 

   <init-param>

        <param-name>commandPrefix</param-name>

        <param-value>C:/Perl/bin/perl.exe</param-value>

   </init-param>

 </servlet>

 

<!-- 

see http://docs.codehaus.org/display/JETTY/Jetty+and+PHP

需要自己创建一个批处理php-cgi-prefix.bat处理文件名问题:

在Windows下

@set SCRIPT_FILENAME=%1

@"C:\Program Files\PHP\php-cgi.exe" 

在Linux下

$!/bin/sh

export SCRIPT_FILENAME=$1

/your/path/to/php-cgi

-->

 

  <!-- 注意:ENV_REDIRECT_STATUS意思是设置REDIRECT_STATUS为环境变量 -->

 <servlet>

   <servlet-name>jetty-php</servlet-name>

   <servlet-class>org.mortbay.servlet.CGI</servlet-class> 

   <init-param>

        <param-name>commandPrefix</param-name>

        <param-value>"C:/Program Files/PHP/php-cgi-prefix.bat"</param-value>

   </init-param>

   <init-param>

      <param-name>ENV_SystemRoot</param-name>

      <param-value>C:/WINDOWS</param-value>

   </init-param>

   <init-param>

         <param-name>ENV_REDIRECT_STATUS</param-name>

         <param-value>yes</param-value>

   </init-param>

 </servlet>

 

 <servlet>

   <servlet-name>jetty-python</servlet-name>

   <servlet-class>org.mortbay.servlet.CGI</servlet-class> 

   <init-param>

        <param-name>commandPrefix</param-name>

        <param-value>C:/python26/python.exe</param-value>

   </init-param>

 </servlet>

 

  <servlet-mapping>

    <servlet-name>jetty-perl</servlet-name>

    <url-pattern>/perl/*</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

    <servlet-name>jetty-php</servlet-name>

    <url-pattern>/php/*</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

    <servlet-name>jetty-python</servlet-name>

    <url-pattern>/python/*</url-pattern>

  </servlet-mapping>

(2)安装问题

php-cgi有较强的安全限制,需要创建php-cgi-prefix和设置相关的环境变量。

而Perl和Python在jetty上的CGI配置比较简单。

(3)利用CGI,可以运行url-pattern指定目录下的脚本文件。

Perl CGI例子:

#!c:\perl\bin\perl.exe

##

##  printenv -- demo CGI program which just prints its environment

##

print "Content-type: text/html\n\n";

print "<pre>*** Please define header of file *.pl or *.cgi with<b>

&nbsp;&nbsp;&nbsp; #!c:\\perl\\bin\\perl.exe</b>\n\n\n";

foreach $var (sort(keys(%ENV))) {

    $val = $ENV{$var};

    $val =~ s|\n|\\n|g;

    $val =~ s|"|\\"|g;

    print "${var}=\"${val}\"\n";

}

(4)PHP CGI例子:

<?php

phpinfo();

?>

(5)Python CGI例子:

#!c:/python26/python.exe

import cgitb

cgitb.enable()

import time

import cgi

print "Content-type: text/html"

print

print """<html>

<head>

<title></title>

</head>

<body>

%s<br/>""" % time.strftime("%I:%M:%S %p")

cgi.print_environ()

print "</body></html>"

print

 

-------------------------------------

四、MinGW中运行gprof和相关工具对Lua进行性能剖析

1. Lua 5.1.4 Makefile修改

(1)添加-g -pg

CC= gcc -g -pg

(2)去除ranlib

$(LUA_A): $(CORE_O) $(LIB_O)

$(AR) $@ $?

#$(RANLIB) $@

 

2. 使用gprof2dot生成图例

gprof ./lua.exe | /c/python26/python gprof2dot.py -n0 -e0 | dot -Tpng -o output.png

 

see http://www.51testing.com/?uid-13997-action-viewspace-itemid-79952

 

-------------------------------------

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics