欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
ANT忠誠伴侶XDoclet基本任務(wù)手冊



任何人都想過(guò)自動(dòng)生成的代碼,自己去寫(xiě)個(gè)分析器不是件容易的事,而XDoclet給我們機會(huì )建立自己的代碼生成器。

XDoclet最早用來(lái)對付EJB,因為生成EJB的本地和遠程接口以及對應的HOME和描述符是一件簡(jiǎn)單但是枯燥的事,本來(lái)我以為,只有JBuilder這樣的集成編輯器可以很好的簡(jiǎn)化工作,后來(lái)知道XDoclet也能夠完成得不錯。

我最早用XDoclet是因為學(xué)習hibernate,hibetnate的描述文件并不復雜,關(guān)鍵的部分不多,可是一旦對POJO修改,就必須要勞師動(dòng)眾的找到對應的描述符來(lái)修改,增加了一次出錯的機會(huì ),而使用了XDoclet就可以做到同步的修改。

還有就是struts,首先是配置文件,許多人操作同一個(gè)文件會(huì )產(chǎn)生沖突,有了XDoclet我們就不怕了,還有validate文件也一樣,有了XDoclet就會(huì )解決大部分沖突問(wèn)題。


之所以起這么一個(gè)名字,主要因為XDoclet和Ant結合得很緊,盡管實(shí)際上做的工作并沒(méi)有直接的聯(lián)系,但XDoclet除了Ant接口就只有些Maven接口插件了,所以XDoclet幾乎是完全依賴(lài)Ant的。


本篇文章的目錄結構如下,因為只是為了說(shuō)明問(wèn)題,在我的ant的build文件中并沒(méi)有包括路徑名的引用,一切是直接的方式。
├─classes
├─doc
├─gen
├─lib
│ commons-collections-2.1.jar
│ commons-logging-1.0.3.jar
│ commons-validator.jar
│ log4j-1.2.8.jar
│ servlet.jar
│ struts.jar
│ xdoclet-1.2.1.jar
│ xdoclet-apache-module-1.2.1.jar
│ xdoclet-ejb-module-1.2.1.jar
│ xdoclet-hibernate-module-1.2.1.jar
│ xdoclet-web-module-1.2.1.jar
│ xdoclet-xdoclet-module-1.2.1.jar
│ xjavadoc-1.0.3.jar
├─merge
├─src
├─todo
└─web

只列出lib中的文件,每一個(gè)的作用在后面慢慢描述。

build.xml
開(kāi)頭增加
<path id="xdoclet.classpath">
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
<pathelement location="classes"/>
</path>
**************************************************************************************************

1,最簡(jiǎn)單的todolist

每 一篇講XDoclet都送這里開(kāi)始,有很多原因的。XDoclet的靈感來(lái)自JavaDoc,JavaDoc把文檔寫(xiě)在代碼里,緩解了困擾編程領(lǐng)域多年的 文檔與程序同步問(wèn)題。這里有個(gè)很有趣的事,就是UNIX業(yè)界的人們傳遞下來(lái)這樣一個(gè)傳統,就是代碼是最好的文檔,保持文檔的同步實(shí)在是費力不討好的事,所 以他們提出這樣一個(gè)好主意,不過(guò)JavaDoc更聰明,文檔是程序注釋的一部分,而且可以提取出來(lái)。

來(lái)吧,看這個(gè)任務(wù)。
<target name="todolist" description="todolist">
<taskdef name="documentdoclet" classname="xdoclet.modules.doc.DocumentDocletTask" classpathref="xdoclet.classpath"/>
<documentdoclet destdir="todo" >
<fileset dir="src">
<include name="**/*.java" />
</fileset>
<info header="Todo list" projectname="XDoclet in Action" tag="todo"/>
</documentdoclet>
</target>

然后src寫(xiě)這么一個(gè)文件
package xdoclet;

public class TodoListTest {
/**
* @todo 我有許多工作要做,只是測試,忽略吧
*/
public TodoListTest() {
}

/**
* @todo 我還不知道名字 ,只是測試,忽略吧
*
*/
public String getYourName(){
return null;
}
}

注意要按照javadoc的寫(xiě)法。還要注意ant中的子任務(wù)系統,其中info就是我們定義的documentdoclet任務(wù)的子任務(wù),我們以后會(huì )看到很多類(lèi)似的情況.
然后運行ant todolist
結果就是一個(gè)結構類(lèi)似javadoc,但是只包括todo標簽的html文檔,呵呵,可以看看項目里有哪些待辦的事。





2,web.xml和taglib
作servlet映射是個(gè)討厭的工作,當你接收別的項目的時(shí)候,這個(gè)項目的servlet怎么用可能比較麻煩,可能當時(shí)web.xml的映射找不到了,這時(shí)怎么辦呢?

看這個(gè)文件
package com.xdocletbook.blog.servlet;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

/**
* @web.servlet
* name="HomePage"
* @web.servlet-init-param
* name="LogLevel"
* value="${LOG_LEVEL}"
* @web.servlet-mapping
* url-pattern="/home"
*
* @web.security-role
* role-name="${OwnerRole}"
* @web.security-role-ref
* role-name="blogowner"
* role-link="${OwnerRole}"
*/


public class HomePageServlet
extends HttpServlet {
private static Logger LOGGER = Logger.getLogger(HomePageServlet.class);
public void init() throws ServletException {
String logLevel = getInitParameter("LogLevel");
if (logLevel != null && logLevel.length() > 0) {
LOGGER.setLevel(Level.toLevel(logLevel));
}
}

public void service(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
LOGGER.debug("Displaying home page");
request.getRequestDispatcher("jsp/home.jsp").forward(request, response);
}
}
然后配置build.xml增加如下任務(wù)

<target name="generate-web">
<taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.classpath"/>
<!-- Generate servlet and JSP Tag "stuff" -->
<webdoclet destdir="gen" mergeDir="merge">
<fileset dir="src">
<include name="**/*.java" />
</fileset>
<deploymentdescriptor destdir="web" distributable="false" />
</webdoclet>
</target>

然后運行ant generate-web

結果就是這樣一個(gè)web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app >

<!--
To use non XDoclet filters, create a filters.xml file that
contains the additional filters (eg Sitemesh) and place it in your
project‘s merge dir. Don‘t include filter-mappings in this file,
include them in a file called filter-mappings.xml and put that in
the same directory.
-->

<!--
To use non XDoclet filter-mappings, create a filter-mappings.xml file that
contains the additional filter-mappings and place it in your
project‘s merge dir.
-->

<!--
To use non XDoclet listeners, create a listeners.xml file that
contains the additional listeners and place it in your
project‘s merge dir.
-->

<servlet>
<servlet-name>StrutsActionServlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>

<servlet>
<servlet-name>HomePage</servlet-name>
<servlet-class>com.xdocletbook.blog.servlet.HomePageServlet</servlet-class>

<init-param>
<param-name>LogLevel</param-name>
<param-value>1</param-value>
</init-param>

<security-role-ref>
<role-name>blogowner</role-name>
<role-link>aOwner</role-link>
</security-role-ref>
</servlet>

<servlet-mapping>
<servlet-name>StrutsActionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>HomePage</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>

<!--
To specify mime mappings, create a file named mime-mappings.xml, put it in your project‘s mergedir.
Organize mime-mappings.xml following this DTD slice:

<!ELEMENT mime-mapping (extension, mime-type)>
-->

<!--
To specify error pages, create a file named error-pages.xml, put it in your project‘s mergedir.
Organize error-pages.xml following this DTD slice:

<!ELEMENT error-page ((error-code | exception-type), location)>
-->

<!--
To add taglibs by xml, create a file called taglibs.xml and place it
in your merge dir.
-->

<!--
To set up security settings for your web app, create a file named web-security.xml, put it in your project‘s mergedir.
Organize web-security.xml following this DTD slice:

<!ELEMENT security-constraint (display-name?, web-resource-collection+, auth-constraint?, user-data-constraint?)>
<!ELEMENT web-resource-collection (web-resource-name, description?, url-pattern*, http-method*)>
<!ELEMENT web-resource-name (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT http-method (#PCDATA)>
<!ELEMENT user-data-constraint (description?, transport-guarantee)>
<!ELEMENT transport-guarantee (#PCDATA)>

<!ELEMENT login-config (auth-method?, realm-name?, form-login-config?)>
<!ELEMENT auth-method (#PCDATA)>
<!ELEMENT realm-name (#PCDATA)>
<!ELEMENT form-login-config (form-login-page, form-error-page)>
<!ELEMENT form-login-page (#PCDATA)>
<!ELEMENT form-error-page (#PCDATA)>
-->

<security-role>
<role-name>aOwner</role-name>
</security-role>

</web-app>


仔 細看這個(gè)文件,你一定詫異struts的配置信息怎樣得來(lái),這是XDoclet的另一種方式,對于第三方的Servlet,我們沒(méi)有辦法再處理原代碼,所 以我們有了merge選項,看<webdoclet destdir="gen" mergeDir="merge">這一句就知道了,在merge目錄里我們有兩個(gè)文件:

servlets.xml

<servlet>
<servlet-name>StrutsActionServlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>


servlet-mappings.xml

<servlet-mapping>
<servlet-name>StrutsActionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


還要注意的是${LOG_LEVEL},這個(gè)是說(shuō)要引用ant 中的變量,所以我的build.xml前面中增加了這兩項
<property name="LOG_LEVEL" value="1"/>
<property name="OwnerRole" value="aOwner"/>

所以,我們就可以動(dòng)態(tài)的改變部署的Log級別



3,struts自動(dòng)配置

Struts中有兩樣比較重要的類(lèi),Action和Form。
對于A(yíng)ction,我們需要配置Action的映射和Forward屬性,對于Form我們也需要注冊名字和校驗參數,以下就是我們能用XDoclet做到的。
對于A(yíng)ction我們寫(xiě)這樣一個(gè)Java文件

package com.xdocletbook.blog.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
* Simple class to test Jakarta Struts generation (Jakarta Struts 1.2 beta 2 only).
*
* @struts.action
* path="/struts/foo"
* name="userForm"
* input="jsp/createBlog.jsp"
*
* @struts.action-forward
* name="success"
* path="/struts/getAll.do"
* redirect="false"
*
*
* @struts.action-exception
* type="com.xdocletbook.blog.exception.ApplicationException"
* key="app.exception"
* path="jsp/error.jsp"
*
* @struts.action-form name="blog.Create"
*/
public final class StrutsAction extends Action
{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
return mapping.findForward("success");
}
}

關(guān)鍵部分就是注釋部分。

看我們增加build.xml一個(gè)任務(wù),
<target name="generate-web">
<taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask" classpathref="xdoclet.classpath"/>
<!-- Generate servlet and JSP Tag "stuff" -->
<webdoclet destdir="gen" mergeDir="merge">
<fileset dir="src">
<include name="**/*.java" />
</fileset>
<strutsconfigxml version="1.1"/>
</webdoclet>
</target>

運行ant generate-web,我們就在gen得到了struts-config.xml
其中關(guān)鍵內容如下
<action
path="/struts/foo"
type="com.xdocletbook.blog.servlet.StrutsAction"
name="userForm"


scope="request"
input="jsp/createBlog.jsp"
unknown="false"
validate="true"
>
<exception


key="app.exception"
type="com.xdocletbook.blog.exception.ApplicationException"
path="jsp/error.jsp"
/>


<forward
name="success"
path="/struts/getAll.do"
redirect="false"
/>
</action>

如果我們有許多Action,就可以隨時(shí)生成這樣一個(gè)文件,不必在意有人改過(guò)這個(gè)文件。同時(shí)你也不必擔心不小心忘了改這個(gè)文件,因為你改了

Java時(shí),許多默認的屬性也跟這改了。






看到這里,許多用過(guò)workshop的一定感覺(jué)到頁(yè)面流不就是這樣嗎?當通過(guò)圖形界面定義流程時(shí),看看頁(yè)面流的源碼你就會(huì )發(fā)現,注釋中有一些

特殊的標記,這說(shuō)明workshop的注釋有著(zhù)xdoclet一樣的功能,只不過(guò)workshop提供了很好的界面,而不需要自己寫(xiě)注釋?zhuān)襴orkshop提供了

更好的語(yǔ)法檢查,呵呵,只是將許多action寫(xiě)到一起,是有些亂。



Struts的另一個(gè)主要的部分就是Form了,雖然我一開(kāi)始覺(jué)得Form有些麻煩,對付動(dòng)態(tài)的Form有些無(wú)能為力,但是結合一些相關(guān)的插件后,效果

確實(shí)不錯。


這是我們的Form文件,我們還使用ValidatorForm來(lái)做自動(dòng)驗證。

package com.xdocletbook.blog.servlet;

import java.io.Serializable;
import org.apache.struts.validator.ValidatorForm;

/**
*
* @struts.form
* name="blog.Create"
*/
public class BlogCreateForm
extends ValidatorForm
implements Serializable {
private String name;
private String owner;
private String email;
public BlogCreateForm() {}

public String getName() {
return this.name;
}
/**
* @struts.validator
* type="required"
*/

public void setName(String name) {
this.name = name;
}


public String getOwner() {
return this.owner;
}
/**
* @struts.validator
* type="required"
*/

public void setOwner(String owner) {
this.owner = owner;
}

public String getEmail() {
return this.email;
}
/**
* @struts.validator
* type="required"
* @struts.validator
* type="email"
*/

public void setEmail(String email) {
this.email = email;
}
}


然后運行ant generate-web

這樣struts-config.xml就有了
<form-beans>
<form-bean
name="blog.Create"
type="com.xdocletbook.blog.servlet.BlogCreateForm"
/>

<!

--
If you have non XDoclet forms, define them in a file called struts-forms.xml and
place it in your merge

directory.
-->
</form-beans>

這里有一個(gè)陷阱,就是Struts XDoclet處理form-beans時(shí),只處理類(lèi)型是Form的,對于類(lèi)型是ValidatorForm的Form如果你不把對應的類(lèi)文件放

到classpath下,XDoclet就會(huì )忽略它,所以struts的包一定要放到類(lèi)路徑下,讓XDoclet有機會(huì )知道ValidatorForm是Form的子類(lèi)。

還有每一個(gè)setXXX方法,有一些表示限制的注釋?zhuān)@些幫助我們生成了

validation.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons

Validator Rules Configuration 1.0//EN" "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">

<form-validation>
<!--


Define global validation config in validation-global.xml
-->
<formset>
<form name="blog.Create">


<field property="name"
depends="required">

<arg0 key="blog.Create.name"/>


</field>
<field property="owner"
depends="required">

<arg0

key="blog.Create.owner"/>
</field>
<field property="email"


depends="required,email">

<arg0 key="blog.Create.email"/>
</field>
</form>


</formset>
</form-validation>


不錯吧。








用 xdoclet 生成 spring config:

<taskdef name="springdoclet" classname="xdoclet.modules.spring.SpringDocletTask">
<classpath refid="build-classpath"/>
</taskdef>

<!-- generate spring config file using xdoclet -->
<target name="gen-spring-conf" depends="init" description="generate spring config file">
<!-- make spring beans config file -->
<springdoclet
destDir="${gen.dir}"
mergeDir="${conf.dir}"
force="false"
excludedtags="@version,@author,@todo">
<fileset dir="${src.dir}" includes="**/*.java" />
<springxml destinationFile="dispatcher-servlet.xml" xmlencoding="iso-8859-1" />
</springdoclet>
<!-- copy generated configure files to web dir -->
<copy todir="${web.dir}/WEB-INF">
<fileset file="${gen.dir}/dispatcher-servlet.xml" />
</copy>
</target>






打印
發(fā)送郵件
RSS Feed
訂閱
常規模式
線(xiàn)索模式
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
學(xué)Struts2從HelloWorld示例開(kāi)始
Xdoclet是什么?
ANT+Xdoclet自動(dòng)生成Hibernate配置文件\映射文件(正確)
通過(guò)XDoclet(ant)生成Hibernate映射文件
Struts的后代:Shale不是Struts
tomcat的web.xml設置問(wèn)題:<servlet-name>Action</servlet-name><url-pattern>*.do的含義
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久