今年一些小研究的总结报告
今年弄过一些小研究,但不是太成功或未完善,
所以把这些零碎的经验和总结写在这里。
以后有时间再单独写博文或把测试工程上传至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>
#!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 """<html>
<head>
<title></title>
</head>
<body>
%s<br/>""" % time.strftime("%I:%M:%S %p")
cgi.print_environ()
print "</body></html>"
-------------------------------------
四、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
-------------------------------------
相关推荐
技术研究总结报告(摘要).docx
软件试运行总结报告 总结 报告 试运行总结报告
北航研究生实习总结报告.pdf
测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告
测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告
测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告测试总结报告
项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发总结报告项目开发...
失眠产品定量研究总结报告.pptx
HW总结报告模板.docxHW总结报告模板.docxHW总结报告模板.docxHW总结报告模板.docxHW总结报告模板.docxHW总结报告模板.docxHW总结报告模板.docxHW总结报告模板.docx
中国沉浸式产业发展研究报告暨〈不眠之夜〉上海版3周年总结报告.rar
GJB 软件研制总结报告(模板)
软件工程文档模板(可行性研究报告-项目开发计划-项目开发总结报告)
双减课题小结中小学生课堂作业设计与作业评价的研究阶段性总结报告.doc
Low Poly 低多变形风格工作总结报告ppt模板,有数据图、定性图等……
主要描述本人2013年度总结报告情况。涉及到个人工作经验感想、及其来年的设想。
工作总结报告
财务总监 2023年 年度总结 报告及2024年工作计划 财务总监 2023年 年度总结 报告及2024年工作计划 财务总监 2023年 年度总结 报告及2024年工作计划 财务总监 2023年 年度总结 报告及2024年工作计划 财务总监 2023年 ...
物联网试点总结报告
软件项目开发总结报告 软件项目开发总结报告 软件项目开发总结报告 软件项目开发总结报告
保健品市场研究总结报告.ppt