1. 如何用Java實現Web伺服器
WEB容器工作原理
市面上的javaweb容器常見的有兩種,一種是jetty,一種是tomcat。要想用java實現web容器,首先要知道其工作雹孫原理。
以Tomcat為例,我們通常開發出來的war包,會放在tomcat中的webapp下面,tomcat會自動解壓war包。解壓完成後,其實就是一個servlet應用!換句話說,我們寫的war包中的servlet應用只需要關注業務層面的,處理http等網路鏈接的事情交給都交給tomcat了,一個請求到達tomcat的流程:
所以其實我們也可以手寫一個web容器,只要能接收請求並轉發給相應的servlet請求即可。
手寫一個小的web容器
整體結構大致如下
1、寫一個處理網路請求連接請求實體類、一個和網路請求連接響應實體類
2、寫一個容器主類,包括啟動棗山監聽埠等
3、寫容器的凳肆中介面,以及註解相關的url附加類便於讓應用servlet
4、寫一個app測試servlet,類似tomcat中跑的war包
如果你監聽的埠是8888,那麼就可以訪問localhost:8888/app,就可以測試了
結語
java寫web容器,其實沒什麼難的,簡單的寫一下了解一下原理即可,真實工作中是不建議自己寫的,有很多問題會考慮不周的。關於web容器網上也有很多例子,可以借鑒了解一下。祝你學習愉快。
2. 用 java 編寫一個 基於Web Service的軟體
1.首先說一下兩個開發webservices的工具包:axis 和XFire 本人首先接觸的是axis。
兩者比較如下:
相對於Axis來說,目前XFire相對受歡迎,加上其提供了和Spring集成的支持,在目前的Web Service開源社區擁有眾多的追隨者。並且因為XFire為Spring提供的支持,使得我們可以很容易在Spring中使用XFire構建Web Service應用。
知道了這兩個框架你研究起來也就不難了。
下面我就基於xfire說一下開發說明:
xfire對WebServices的開發非常方便,在Eclipse里開發就更方便了。總結起來有這么幾點:
1.編寫類,跟普通JAVABEAN沒什麼區別。
2.配置文件
如果是要深層次的去理解WebServices還需努力,下面是我給你找的一個網上的例子作為參考:
使用XFire+Spring構建Web Service
XFire是與Axis 2並列的新一代Web Service框架,通過提供簡單的API支持Web Service各項標准協議,幫助你方便快速地開發Web Service應用。
相 對於Axis來說,目前XFire相對受歡迎,加上其提供了和Spring集成的支持,在目前的Web Service開源社區擁有眾多的追隨者。並且因為XFire為Spring提供的支持,使得我們可以很容易在Spring中使用XFire構建Web Service應用。
XFire與Axis2相比具有如下特徵:
l 支持一系列Web Service的新標准--JSR181、WSDL2.0 、JAXB2、WS-Security等;
l 使用Stax解釋XML,性能有了質的提高。XFire採用Woodstox 作Stax實現;
l 容易上手,可以方便快速地從pojo發布服務;
l 支持Spring、Pico、Plexus、Loom等容器;
l 靈活的Binding機制,包括默認的Aegis,xmlbeans,jaxb2,castor;
l 高性能的SOAP 棧設計;
l 支持Spring、Pico、Plexus、Loom等容器。
XFire與Axis1性能的比較如下:
l XFire比Axis1.3快2-6倍;
l XFire的響應時間是Axis1.3的1/2到1/5。
XFire在WebService框架中開始較晚,它從現有的框架中借鑒了許多優秀的理念,力爭將Web Service的應用開發難度降到最低。此外,還提供了各種綁定技術、支持多種傳輸協議,對WebService體系中許多新的規范提供了支持。
下面讓我們來看一個XFire於Spring集成的helloWorld的簡單例子。
一.實現的功能和特點
本例具有如下功能和特點:
1) 基於J2EE平台的Web Service服務;
2) 開發方便,配置簡單;
3) 與spring無縫集成。
XFire是完全基於流數據處理進行工作的系統,這意味著XFire不是將整個SOAP文檔緩存在內存中,而是以管道的方式接收SOAP流數據。這種工作方式的轉變帶來了可觀的性能回報,同時節省了內存的佔用。
XFire從 管道中接收一個SOAP請求到返回一個SOAP響應,會經歷一系列的階段。在管道調用的任何一個階段,XFire都可以添加一些額外的Handler,在 對消息進行加工處理後再傳入到下一個階段中。在SOAP請求消息對Web Service發起真正調用之前,分別會經過傳輸、預轉發、轉發、策略實施、用戶信息處理、預調用、服務調用等階段。
二.開發環境
筆者的開發環境描述如下:
1) jdk: 1.5版本;
2) Tomcat:5.5.20;
3) MyEclipse:5.1.1 GA。
三.開發步驟
1. 工程與環境的建立
在MyEclipse 中新建Web工程,名為webservice_helloworld。選擇該工程後,點擊右鍵選擇MyEclipse->Add Web Service Capabilities,彈出Add Web Service Capabilities對話框,點擊「Next」,彈出Project Library Configuration對話框,默認選擇Core Libraries,點擊「Finish」按鈕,完成XFire核心包的添加。為了後續的客戶端的測試,還需讀者加入commons- httpclient.jar包到WEB-INF/lib下。
部署後可看到此時WEB-INF/lib的jar包列表如下:
activation-1.1.jar、commons -beanutils-1.7.0.jar、commons-codec-1.3.jar、commons-httpclient.jar、 commons-logging-1.0.4.jar、jaxen-1.1-beta-9.jar、jaxws-api-2.0.jar、jdom- 1.0.jar、jsr173_api-1.0.jar、mail-1.4.jar、saaj-api-1.3.jar、saaj-impl- 1.3.jar、spring-1.2.6.jar、stax-api-1.0.1.jar、wsdl4j-1.5.2.jar、wstx-asl- 3.0.1.jar、xbean-2.1.0.jar、xbean-spring-2.5.jar、xfire-aegis-1.2.2.jar、 xfire-annotations-1.2.2.jar、xfire-core-1.2.2.jar、xfire-java5-1.2.2.jar、 xfire-jaxws-1.2.2.jar、xfire-jsr181-api-1.0-M1.jar、xfire-spring- 1.2.2.jar、XmlSchema-1.1.jar
為了後續的開發和測試,在src目錄下分別建立test和webservice目錄,分別用於存放測試文件和webservice的相關類。
2.Web Service實現的編寫
在本例中,我們只是做一個helloWorld的簡單例子。Web Service服務端提供一個根據輸入的名字信息回復相應的helloWorld信息的。例如,當名字為「阿蜜果」時,恢復信息為「hello,阿蜜果」。下面讓我們一步一步來開始進行編碼。
1)web.xml的配置
一 般情況下,我們通過HTTP作為Web Service的傳輸協議,這樣我們只需啟動一個Web伺服器(如Tomcat,在本例中使用的是Tomcat5.5.20),這樣客戶端就可以通過 HTTP訪問到Web Service服務。為了集成Spring容器,XFire專門提供一個XFireSpringServlet,我們可以在web.xml中配置該 Servlet,將Spring容器中定義的Web Service在某個URI下發布。
為了能正確使用XFire,需在web.xml中進行相應配置,在該文件中配置XFire的servlet和servlet-mapping。同時因為本實例需要將XFire集成到Spring中,因而需要在web.xml文件中載入Spring的相應配置文件。在本實例中,我們首先在WEB-INF下建立兩個配置Spring配置文件,一個為applicationContext.xml,該文件用來定義本工程的bean,一個為xfire-servlet.xml,用來配置XFire的相關bean。修改後的web.xml的內容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>XFireService</display-name>
<!-- begin Spring配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml</param-value>
</context-param>
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class> org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
<!-- end Spring配置 -->
<!-- begin XFire 配置 -->
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>*.ws</url-pattern>
</servlet-mapping>
<servlet>
<!-- 配合Spring容器中XFire一起工作的Servlet-->
<servlet-name>xfireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfireServlet</servlet-name>
<!-- 在這個URI下開放Web Service服務 -->
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
<!-- end XFire 配置 -->
</web-app>
2)Web Service的介面類HelloWorld.java和對應實現類HelloWorldImpl.java
為了用Web Service完成HelloWorld功能,我們首先在src/webservice目錄下建立介面類HelloWold.java。它僅包含一個sayHelloWorld(String name)的方法,其詳細內容如下:
package webservice;
/** *//**
*HelloWorld的介面類.
*/
publicinterface HelloWorld {
/** *//**
*對名字為name的人打招呼.
*@paramname名字
*@return返回打招呼的字元串
*/
String sayHelloWorld(String name);
}
我們還需要建立一個對應的實現類,來實現sayHelloWorld的功能,該實現類即為HelloWorldImpl.java。該類的詳細內容如下:
package webservice;
/** *//**
*HelloWorld的實現類.
*/
publicclass HelloWorldImpl implements HelloWorld {
public String sayHelloWorld(String name) {
String helloWorld = "hello," + name;
return helloWorld;
}
}
3)Spring配置文件applicationContext.xml和xfire-servlet.xml的配置
首先我們在applicationContext.xml文件中配置對應的bean——HelloWorldBean,該xml文件的內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="HelloWorldBean" class="webservice.HelloWorldImpl"/>
</beans>
這個配置文件很簡單,在此不詳述。
XFire為Spring 提供了方便易用的導出器XFireExporter,藉助該導出器的支持,我們可以在Spring容器中將一個POJO導出為Web Service。HelloWorld是業務服務類,在此擁有一個sayHelloWorld的方法,我們希望將此方法開放為Web Service。在實際應用中,如果某個類具有眾多的方法,而其中的某些方法不需要開放為Web Service的情況下,我們可以定義一個窄介面,該介面中只需定義那些開放為Web Service的業務方法。
將一個業務類所有需要開放為Web Service的方法通過一個窄介面來描述是值得推薦的作法,這讓Web Service的介面顯得很「干凈」。其次,XFire的導出器也需要服務介面的支持,因為它採用基於介面的動態代理技術。
窄介面中的方法在真實的系統中可能需要引用其它的業務類或DAO獲取資料庫中的真實數據,為了簡化實例,我們在此簡化了實例。
下面讓我們看看在xfire-servlet.xml文件中導出器的設置,該文件內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 引入XFire預配置信息 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!—定義訪問的url-->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/HelloWorldService.ws">
<ref bean="HelloWorldService" />
</entry>
</map>
</property>
</bean>
<!-- 使用XFire導出器 -->
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
<!-- 引用xfire.xml中定義的工廠 -->
<property name="serviceFactory" ref="xfire.serviceFactory" />
<!-- 引用xfire.xml中的xfire實例 -->
<property name="xfire" ref="xfire" />
</bean>
<bean id="HelloWorldService" parent="baseWebService">
<!-- 業務服務bean -->
<property name="serviceBean" ref="HelloWorldBean" />
<!-- 業務服務bean的窄介面類 -->
<property name="serviceClass" value="webservice.HelloWorld" />
</bean>
</beans>
在 上面的配置中,我們可以看到,在該配置文件中引入了xfire.xml這個Spring配置文件。它是在XFire核心JAR包中擁有一個預定義的 Spring配置文件,它定義了XFire在Spring中必須用到的一些Bean和資源,需要引入這個預定義的配置文件。從該配置文件中可以看出,我們 通過XFireExporter將業務類導出為Web Service,對於任何導出器,我們都需要引入XFire環境,即serviceFactory和xfire,這是標準的配置。ServiceFactory是XFire的核心類,它可以將一個POJO生成為一個Web Service。
在本實例中,我們通過定義一個baseWebService,其餘的webService配置都將該bean作為父bean,這樣可以簡化Spring的配置,不需要多次引入serviceFactory和xfire。
3. Web Service的測試
在上一步操作完成之後,我們的這個簡單的Web Service已經編寫完畢,下面讓我們來看看自己的勞動成果吧。
在瀏覽器中輸入地址:http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl,我們可以看到HelloWorldService對應的WSDL信息,閱讀這個WSDL文檔,我們可以知道HelloWorld的sayHelloWorld方法已經被成功地發布為Web Service了。只要拿到這個WSDL就可以開發相應的客戶端調用程序了。
XFire為訪問服務端Web Service提供了各種方便的方式:我們一般根據服務地址和窄介面類創建客戶調用程序。
在不能獲得服務窄介面類的情況下,XFire允許我們通過WSDL文件生成客戶端調用程序,通過指定服務介面的方式調用服務。
1)通過WSDL文件生成客戶端調用程序
首先我們通過http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl我們可以獲得WSDL文件HelloWorldService.wsdl,並將其放在src目錄下面,接著我們通過程序訪問該WSDL文件,並調用需測試的方法。此時測試類WebServiceClientTest.java的內容如下所示:
package test;
import org.codehaus.xfire.client.Client;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import webservice.HelloWorld;
/** *//**
*Copyright2007GuangZhouAmigo.
*Allrightreserved.
*HelloWorld的webservice的測試類.
*@author<a href="mailto:[email protected]">AmigoXie</a>
*@version1.0
*Creationdate:2007-9-16-下午05:36:05
*/
publicclass WebServiceClientTest {
HelloWorld helloWorld = null;
publicstaticvoid main(String[] args) throws Exception {
WebServiceClientTest test = new WebServiceClientTest();
test.testClient();
}
publicvoid testClient() throws Exception {
String wsdl = "HelloWorldService.wsdl"; //對應的WSDL文件
Resource resource = new ClassPathResource(wsdl);
Client client = new Client(resource.getInputStream(), null); //根據WSDL創建客戶實例
Object[] objArray = new Object[1];
objArray[0] = "阿蜜果";
//調用特定的Web Service方法
Object[] results = client.invoke("sayHelloWorld", objArray);
System.out.println("result: " + results[0]);
}
}
運行該類,可得到如下輸出結果:
result: hello,阿蜜果
可看出運行結果正確。
2)根據服務地址創建客戶端調用程序
接著讓我們來看一個根據服務地址創建客戶端調用程序的例子。我們可以通過測試類來測試Web Service的正確性,下面讓我們來看一個簡單的測試類,首先我們在src/test目錄建立WebServiceClientTest.java文件,並在src目錄下建立客戶端調用的Spring配置文件client.xml。在client.xml配置文件中我們定義了一個testWebService的bean,該bean訪問wsdlDocumentUrl為http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl的WSDL。該xml文件的詳細內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="testWebService" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
<property name="serviceClass">
<value>webservice.HelloWorld</value>
</property>
<property name="wsdlDocumentUrl">
<value>http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl</value>
</property>
</bean>
</beans>
在WebServiceClientTest.java文件中獲得HelloWorld,並調用它的sayHelloWorld方法來完成測試,該類的詳細內容如下所示:
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.;
import webservice.HelloWorld;
/** *//**
*HelloWorld的webservice的測試類.
*/
publicclass WebServiceClientTest {
HelloWorld helloWorld = null;
publicstaticvoid main(String[] args) {
WebServiceClientTest test = new WebServiceClientTest();
test.testClient();
}
publicvoid testClient() {
ApplicationContext ctx = new (
"client.xml");
helloWorld = (HelloWorld) ctx.getBean("testWebService");
System.out.println(helloWorld.sayHelloWorld("阿蜜果"));
}
}
在啟動webservice_helloworld工程的情況下,運行WebServiceClientTest類,可看到控制台包含如下信息:
hello,阿蜜果
由此可看出調用Web Service成功。
四.總結
與Axis 相比,在實施Web Service時XFire更加簡潔高效,並且XFire對Spring提供了強大的支持,可以非常方便地在Spring中使用XFire實施Web Service,因此XFire在短短的時間里成為了受Web Service開發者喜愛的框架。
XFire為客戶端提供了多種訪問Web Service的方式,如果可以獲取客戶端的窄介面類,則可以採用窄介面類調用Web Service。如果僅能獲取WSDL,XFire也可以採用動態反射的機制調用Web Service。XFire為Eclipse提供了一個可以根據WSDL生成客戶端存根代碼的插件,相信XFire也將為其它非Java語言提供類似的插 件。
在Axis2中也開始使用Stax來處理XML,還有Xfire不支持WSDL2.0, 而Axis2支持WSDL2.0。
還可使用Xfire的後續版本,Apache CXF (相當於 Xfire2.0).
3. 常用的自動化測試工具有哪些
1、Appium
AppUI自動化測試
Appium 是一個移動端自動化測試 開源工具,支持iOS 和Android 平台,支持Python、Java 等語言,即同一套Java 或Python 腳本可以同時運行在iOS 和Android平台,Appium 是一個C/S 架構,核心是一個 Web 伺服器,它提供了一套 REST 的介面。當收到客戶端的連接後,就會監聽到命令,然後在移動設備上執行這些命令,最後將執行結果放在 HTTP 響應中返還給客戶端。
2、Selenium
WebUI自動化測試
Selenium是一個用於Web應用程序測試的工具,Selenium已經成為Web自動化測試工程師的首選。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。測試系統功能——創建回歸測試檢驗軟體功能和用戶需求。支持自動錄制動作和自動生成 .Net、Java、Perl等不同語言的測試腳本。Selenium 是ThoughtWorks專門為Web應用程序編寫的一個驗收測試工具。其升級版本為Webdriver。
3、Postman
介面測試
Postman 提供功能強大的 Web API 和 HTTP 請求的調試,它能夠發送任何類型的HTTP 請求 (GET, POST, PUT, DELETE…),並且能附帶任何數量的參數和 Headers。不僅如此,它還提供測試數據和環境配置數據的導入導出,付費的 Post Cloud 用戶還能夠創建自己的 Team Library 用來團隊協作式的測試,並能夠將自己的測試收藏夾和用例數據分享給團隊。
4.Robot Framework
Robot Framework是一個開源自動化框架,它實現了用於驗收測試和驗收測試驅動開發(ATDD)的關鍵字驅動方法。 Robot Framework為不同的測試自動化需求提供框架。 但是,通過使用Python和Java實現其他測試庫,可以進一步擴展其測試功能。 Selenium WebDriver是Robot Framework中常用的外部庫。
測試工程師可以利用Robot Framework作為自動化框架,不僅可以進行Web測試,還可以用於Android和iOS測試自動化。 對於熟悉關鍵字驅動測試的測試人員,可以輕松學習Robot Framework。
5、Soapui
介面測試
SoapUI提供了所有所需的工具來測試和完善的測試。總覽標簽給你一個項目的所有內容和全面的看法。只需一次點擊,您可以添加任何數量的斷言為驗證傳入的消息TestStep。使用功能強大的HTTP監視器記錄,分析甚至修改客戶機 - 伺服器通信,因為它發生。和SoapUI臨帶來了更專業和先進的功能,保持遙遙領先其他測試工具。輕松創建和運行數據驅動測試。該數據源TestStep讀取測試數據從任何外部來源 - Excel中,XML,JDBC,文件,等等 - 到標准SoapUI屬性。
針對上面的自動化測試工具,每一個都有自己優勢的功能,隨著計算機行業的發展,自動化測試工具會越來越多,越來越完善。
4. 現在有什麼好用的java開發框架
分享10個最好的工具、框架和庫,以幫助 Java 開發人員在不同的 Java 項目中更好地執行單元測試和集成測試。
▌JUnit
JUnit 應該不需要過多介紹。哪怕你是一位 Java 初學者,我想你也應該聽說過它,它能夠讓你為 Java 代碼編寫單元測試。
幾乎所有常用的 IDE,比如 Eclipse、NetBeans 和 IntelliJ,都能夠集成 JUnit,這意味著開發者直接可以在這些 IDE 中編寫並運行單元測試。
目前大多數人仍然在使用 JUnit 4,事實上新的 JUnit 5 已經發布。你可以用 JUnit 進行單元測試和集成測試,此外,它還支持 Java 8 功能。
5. java中有沒有第三方包有HttpWebRequest類的
Java開源Web爬蟲
Heritrix
Heritrix是一個開源,可擴展的web爬蟲項目。Heritrix設計成嚴格按照robots.txt文件的排除指示和META robots標簽。
更多Heritrix信息
WebSPHINX
WebSPHINX是一個Java類包和Web爬蟲的互動式開發環境。Web爬蟲(也叫作機器人或蜘蛛)是可以自動瀏覽與處理Web頁面的程序。WebSPHINX由兩部分組成:爬蟲工作平台和WebSPHINX類包。
更多WebSPHINX信息
WebLech
WebLech是一個功能強大的Web站點下載與鏡像工具。它支持按功能需求來下載web站點並能夠盡可能模仿標准Web瀏覽器的行為。WebLech有一個功能控制台並採用多線程操作。
更多WebLech信息
Arale
Arale主要為個人使用而設計,而沒有像其它爬蟲一樣是關注於頁面索引。Arale能夠下載整個web站點或來自web站點的某些資源。Arale還能夠把動態頁面映射成靜態頁面。
更多Arale信息
JSpider
JSpider:是一個完全可配置和定製的Web Spider引擎.你可以利用它來檢查網站的錯誤(內在的伺服器錯誤等),網站內外部鏈接檢查,分析網站的結構(可創建一個網站地圖),下載整個Web站點,你還可以寫一個JSpider插件來擴展你所需要的功能。
更多JSpider信息
spindle
spindle
是一個構建在Lucene工具包之上的Web索引/搜索工具.它包括一個用於創建索引的HTTP
spider和一個用於搜索這些索引的搜索類。spindle項目提供了一組JSP標簽庫使得那些基於JSP的站點不需要開發任何Java類就能夠增加搜
索功能。
更多spindle信息
Arachnid
Arachnid:
是一個基於Java的web
spider框架.它包含一個簡單的HTML剖析器能夠分析包含HTML內容的輸入流.通過實現Arachnid的子類就能夠開發一個簡單的Web
spiders並能夠在Web站上的每個頁面被解析之後增加幾行代碼調用。
Arachnid的下載包中包含兩個spider應用程序例子用於演示如何使用該框架。
更多Arachnid信息
LARM
LARM能夠為Jakarta Lucene搜索引擎框架的用戶提供一個純Java的搜索解決方案。它包含能夠為文件,資料庫表格建立索引的方法和為Web站點建索引的爬蟲。
更多LARM信息
JoBo
JoBo
是一個用於下載整個Web站點的簡單工具。它本質是一個Web
Spider。與其它下載工具相比較它的主要優勢是能夠自動填充form(如:自動登錄)和使用cookies來處理session。JoBo還有靈活的
下載規則(如:通過網頁的URL,大小,MIME類型等)來限制下載。
更多JoBo信息
snoics-reptile
snoics-
reptile是用純Java開發的,用來進行網站鏡像抓取的工具,可以使用配製文件中提供的URL入口,把這個網站所有的能用瀏覽器通過GET的方式獲
取到的資源全部抓取到本地,包括網頁和各種類型的文件,如:圖片、flash、mp3、zip、rar、exe等文件。可以將整個網站完整地下傳至硬碟
內,並能保持原有的網站結構精確不變。只需要把抓取下來的網站放到web伺服器(如:Apache)中,就可以實現完整的網站鏡像。
下載地址:
snoics-reptile2.0.part1.rar
snoics-reptile2.0.part2.rar
snoics-reptile2.0-doc.rar
更多snoics-reptile信息
Web-Harvest
Web-Harvest是一個Java開源Web數據抽取工具。它能夠收集指定的Web頁面並從這些頁面中提取有用的數據。Web-Harvest主要是運用了像XSLT,XQuery,正則表達式等這些技術來實現對text/xml的操作。
更多Web-Harvest信息
ItSucks
ItSucks是一個java web spider(web機器人,爬蟲)開源項目。支持通過下載模板和正則表達式來定義下載規則。提供一個swing GUI操作界面。
更多ItSucks信息
Smart and Simple Web Crawler
Smart
and Simple Web
Crawler是一個Web爬蟲框架。集成Lucene支持。該爬蟲可以從單個鏈接或一個鏈接數組開始,提供兩種遍歷模式:最大迭代和最大深度。可以設置
過濾器限制爬回來的鏈接,默認提供三個過濾器ServerFilter、BeginningPathFilter和
RegularExpressionFilter,這三個過濾器可用AND、OR和NOT聯合。在解析過程或頁面載入前後都可以加監聽器。
更多Smart and Simple Web Crawler信息
Crawler4j
Crawler4j是一個開源的Java類庫提供一個用於抓取Web頁面的簡單介面。可以利用它來構建一個多線程的Web爬蟲。
更多Crawler4j信息
Ex-Crawler
Ex-Crawler分成三部分(Crawler Daemon,Gui Client和Web搜索引擎),這三部分組合起來將成為一個靈活和強大的爬蟲和搜索引擎。其中Web搜索引擎部分採用PHP開發,並包含一個內容管理系統CMS用於維護搜索引擎。
更多Ex-Crawler信息
Crawler
Crawler是一個簡單的Web爬蟲。它讓你不用編寫枯燥,容易出錯的代碼,而只專注於所需要抓取網站的結構。此外它還非常易於使用。
CrawlerConfiguration cfg = new CrawlerConfiguration("http://www.open-open.com");
PageCrawler crawler = new PageCrawler(cfg);
crawler.crawl(new YourPageVisitor());
收錄時間:2011-03-05 09:41:09
更多Crawler信息
Encog
Encog是一個高級神經網路和機器人/爬蟲開發類庫。Encog提供的這兩種功能可以單獨分開使用來創建神經網路或HTTP機器人程序,同時Encog還支持將這兩種高級功能聯合起來使用。Encog支持創建前饋神經網路、Hopfield神經網路、自組織圖。
Encog提供高級HTTP機器人/爬蟲編程功能。支持將多線程爬蟲產生的內容存在內存或資料庫中。支持HTM解析和高級表單與Cookie處理。
收錄時間:2011-05-13 16:36:41
更多Encog信息
Crawljax
Crawljax是一個開源Java工具用於Ajax Web應用程序的自動化抓取和測試。Crawljax能夠抓取/爬行任何基於Ajax的Web應用程序通過觸發事件和在表單中填充數據。
收錄時間:2011-05-18 09:50:32
更多Crawljax信息
6. 如何使用junit測試javaweb工程
一:創建一個測試類,建議將測試類單獨放在一個包中(在 maven 項目里有測試類專門的存放位置),新建一個Junit Test Case類,下一步
測試類的命名建議是你將要測試的類名+Test,然後點 Browse, 你可以選擇要進行測試的類(一般選擇 Service, 因為 Service 關心的是業務需求),用這種方式創建可以自動生成要測試類的測試類,你只需要進行測試代碼的書寫.
@Test
public void testqueryById(){
} @Test
public void testQueryAll(){
} @Test
public void testReceNumber(){
}123456789101112
如果裡面有自動生成的代碼,刪除或注釋即可…
二:配置 spring 和 junit 整合, junit 啟動時載入 springIOC 容器,這里你需要 Spring-test jar包
@RunWith(SpringJUnit4ClassRunner.class) //告訴junitspring配置文件
@ContextConfiguration(locations = {"classpath:spring/spring-.xml"})123
同樣的,在測試類中我們會調用 Service 的邏輯,由於我們使用的是 Spring+SpringMVC+ 持久化框架,所以要注入一個 IService 介面(這里我直接對 DAO 進行測試了)
@Autowired
private SeckillDao seckillDao;12
接下來是測試邏輯,在編寫測試代碼之前建議覆蓋實體中的 toString 方法,不然列印會很麻煩.
@Test public void testqueryById(){ long id = 1000;
Seckill seckill = seckillDao.queryById(id);
System.out.println(seckill.getSeckillName());
System.out.println(seckill);
} //JAVA沒有保存形參的記錄,如果你在 中傳了多個參數,那麼需要聲明它的形參對應的實參,否則 JVM 會顯示找不到參數.聲明方式稍後奉上
@Test public void testQueryAll(){
List<Seckill> seckills = seckillDao.queryAll(0, 100); for(Seckill seckill:seckills){
System.out.println(seckill);
}
}
@Test public void testReceNumber(){
Date killTime = new Date(); //對增加進行測試的時候,只要資料庫增加了一條數據,我們就默認這個方法執行成功了
int updateCount = seckillDao.receNumber(1000L, killTime);
System.out.println("updateCount = "+updateCount);
}
解決JAVA不保存形參的記錄
int receNumber(@Param("seckillId")long seckillId,@Param("killTime")Date killTime);
Seckill queryById(long seckillId); /**
* mysql的分頁查詢
* @param offset 告訴它實際的形參
* @param limit
* @return
*/
List<Seckill> queryAll(@Param("offset")int offset,@Param("limit")int limit);1234567891011
接下來我們根據他返回的結果和我們想要的結果對應就可以了. 測試類不用部署項目, 測試周期非常短, 而且可以進行專項測試. 測試類代碼邏輯十分簡單, 幾乎不會出錯. 如果結果不是預期的, 那麼根據你的需求修改!
當然, 它的局限性也很打. 從單元測試不能看出頁面傳值的錯誤, 許多項目在伺服器中的表現也不能模擬.
那麼我們什麼時候用junit呢?
當你的資料庫操作非常復雜, 你不確定能輸出你想要的值的時候, 相比用 debug 調試, 使用 Junit 是更方便的手段.或者新手出錯概率非常大, 也不用在伺服器中專門測試項目的表現, Junit 是個必備的工具!而且測試類的測試代碼重用性很高.
如果你的數據和預期相悖, 那麼修改業務邏輯; 否則, 查看頁面是否有錯! Junit在一定程度上減輕了我們業務代碼調試的壓力, 讓我們關注於一點解決錯誤.