﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-西部村里人</title><link>http://www.blogjava.net/jdyao/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:02:41 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:02:41 GMT</pubDate><ttl>60</ttl><item><title>WebWork标签技术的简化版本--JSP模板</title><link>http://www.blogjava.net/jdyao/archive/2006/03/16/35728.html</link><dc:creator>西部村里人</dc:creator><author>西部村里人</author><pubDate>Thu, 16 Mar 2006 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/jdyao/archive/2006/03/16/35728.html</guid><wfw:comment>http://www.blogjava.net/jdyao/comments/35728.html</wfw:comment><comments>http://www.blogjava.net/jdyao/archive/2006/03/16/35728.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jdyao/comments/commentRss/35728.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jdyao/services/trackbacks/35728.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; WebWork标签非常出色，在有些应用中，可能不想使用其环境，但希望能够使用其标签思路。JSP模板的使用面更广，随简化WebWork方式，提供思路供大家参考。<br>
<br>
1、开发标签基础类：<br>
import java.io.IOException;<br>
import java.io.OutputStream;<br>
import java.io.OutputStreamWriter;<br>
import java.io.PrintWriter;<br>
import java.io.RandomAccessFile;<br>
import java.io.Writer;<br>
import java.util.Iterator;<br>
import java.util.LinkedList;<br>
<br>
import javax.servlet.RequestDispatcher;<br>
import javax.servlet.ServletException;<br>
import javax.servlet.ServletOutputStream;<br>
import javax.servlet.ServletRequest;<br>
import javax.servlet.http.HttpServletRequest;<br>
import javax.servlet.http.HttpServletResponse;<br>
import javax.servlet.http.HttpServletResponseWrapper;<br>
import javax.servlet.jsp.JspException;<br>
import javax.servlet.jsp.tagext.BodyTagSupport;<br>
public abstract class AbstractTag extends BodyTagSupport {<br>
<br>
&nbsp;&nbsp;&nbsp; protected String templateName ;<br>
<br>
&nbsp;&nbsp;&nbsp; private final static String templatePath = "/WEB-INF/tags/";<br>
<br>
&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = -1201668454354226175L;<br>
<br>
&nbsp;&nbsp;&nbsp; public String getTemplateName() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return templateName;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; public void setTemplateName(String templateName) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.templateName = templateName;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; protected String getBody() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (bodyContent == null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "";<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return bodyContent.getString().trim();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; protected abstract void prepareData ();<br>
<br>
&nbsp;&nbsp;&nbsp; public int doEndTag() throws JspException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; prepareData ();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; include(templatePath + this.getTemplateName(), pageContext.getOut(),<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pageContext.getRequest(),<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (HttpServletResponse)
pageContext.getResponse());<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception e) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // e.printStackTrace();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new JspException(e);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return EVAL_BODY_INCLUDE;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; public int doStartTag() throws JspException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pageContext.getOut().write(getBody());<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (IOException e) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new RuntimeException("IOError: " + e.getMessage(), e);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return EVAL_PAGE;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; public static void include(String aResult, Writer writer,ServletRequest request,<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; HttpServletResponse response) throws ServletException, IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String resourcePath = aResult;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RequestDispatcher rd = request.getRequestDispatcher(resourcePath);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (rd == null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new ServletException("Not a valid resource path:"<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + resourcePath);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Include the resource<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PageResponse pageResponse = new PageResponse(response);<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Include the resource<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rd.include((HttpServletRequest) request, pageResponse);<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // write the response back to the JspWriter, using the correct encoding.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String encoding = "GB2312";<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (encoding != null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // use the encoding specified in the property file<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pageResponse.getContent().writeTo(writer, encoding);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // use the platform specific encoding<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pageResponse.getContent().writeTo(writer, null);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; static final class PageResponse extends HttpServletResponseWrapper {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; protected PrintWriter pagePrintWriter;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; protected ServletOutputStream outputStream;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private PageOutputStream pageOutputStream = null;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* Create PageResponse wrapped around an existing HttpServletResponse.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public PageResponse(HttpServletResponse response) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super(response);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* Return the content buffered inside the {@link PageOutputStream}.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @return<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* @throws IOException<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public FastByteArrayOutputStream getContent() throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // if we are using a writer, we need to flush the<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // data to the underlying outputstream.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // most containers do this - but it seems Jetty 4.0.5 doesn't<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pagePrintWriter != null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pagePrintWriter.flush();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ((PageOutputStream) getOutputStream()).getBuffer();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* Return instance of {@link PageOutputStream} allowing all data written<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* to stream to be stored in temporary buffer.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public ServletOutputStream getOutputStream() throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pageOutputStream == null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pageOutputStream = new PageOutputStream();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return pageOutputStream;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* Return PrintWriter wrapper around PageOutputStream.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public PrintWriter getWriter() throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pagePrintWriter == null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; pagePrintWriter = new PrintWriter(new
OutputStreamWriter(<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
getOutputStream(), getCharacterEncoding()));<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return pagePrintWriter;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; static final class PageOutputStream extends ServletOutputStream {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private FastByteArrayOutputStream buffer;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public PageOutputStream() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffer = new FastByteArrayOutputStream();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* Return all data that has been written to this OutputStream.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;*/<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public FastByteArrayOutputStream getBuffer() throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; flush();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return buffer;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void close() throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffer.close();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void flush() throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffer.flush();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void write(byte[] b, int o, int l) throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffer.write(b, o, l);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void write(int i) throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffer.write(i);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void write(byte[] b) throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; buffer.write(b);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; static public class FastByteArrayOutputStream extends OutputStream {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Static --------------------------------------------------------<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private static final int DEFAULT_BLOCK_SIZE = 8192;<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private LinkedList buffers;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Attributes ----------------------------------------------------<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // internal buffer<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private byte[] buffer;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // is the stream closed?<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private boolean closed;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private int blockSize;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private int index;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; private int size;<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Constructors --------------------------------------------------<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public FastByteArrayOutputStream() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this(DEFAULT_BLOCK_SIZE);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public FastByteArrayOutputStream(int aSize) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; blockSize = aSize;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer = new byte[blockSize];<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public int getSize() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return size + index;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void close() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; closed = true;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public byte[] toByteArray() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] data = new byte[getSize()];<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Check if we have a list of buffers<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pos = 0;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buffers != null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator iter = buffers.iterator();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iter.hasNext()) {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
byte[] bytes = (byte[]) iter.next();<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
System.arraycopy(bytes, 0, data, pos, blockSize);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos += blockSize;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // write the internal buffer directly<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.arraycopy(buffer, 0, data, pos, index);<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return data;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public String toString() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new String(toByteArray());<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // OutputStream overrides ----------------------------------------<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void write(int datum) throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (closed) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IOException("Stream closed");<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (index == blockSize) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addBuffer();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // store the byte<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer[index++] = (byte) datum;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void write(byte[] data, int offset, int length) throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (data == null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new NullPointerException();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if
((offset &lt; 0) || ((offset + length) &gt; data.length) || (length
&lt; 0)) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IndexOutOfBoundsException();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (closed) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IOException("Stream closed");<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((index + length) &gt; blockSize) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int copyLength;<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (index == blockSize) {<br>&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
addBuffer();<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<br>
<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
copyLength = blockSize - index;<br>
<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (length &lt; copyLength) {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
copyLength = length;<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<br>
<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
System.arraycopy(data, offset, buffer, index, copyLength);<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
offset += copyLength;<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
index += copyLength;<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
length -= copyLength;<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} while (length &gt; 0);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// Copy in the subarray<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
System.arraycopy(data, offset, buffer, index, length);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index += length;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Public<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void writeTo(OutputStream out) throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Check if we have a list of buffers<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buffers != null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator iter = buffers.iterator();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iter.hasNext()) {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
byte[] bytes = (byte[]) iter.next();<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
out.write(bytes, 0, blockSize);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // write the internal buffer directly<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(buffer, 0, index);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void writeTo(RandomAccessFile out) throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Check if we have a list of buffers<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buffers != null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator iter = buffers.iterator();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iter.hasNext()) {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
byte[] bytes = (byte[]) iter.next();<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
out.write(bytes, 0, blockSize);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // write the internal buffer directly<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(buffer, 0, index);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void writeTo(Writer out, String encoding) throws IOException {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Check if we have a list of buffers<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buffers != null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator iter = buffers.iterator();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iter.hasNext()) {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
byte[] bytes = (byte[]) iter.next();<br>
<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (encoding != null) {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
out.write(new String(bytes, encoding));<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
out.write(new String(bytes));<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // write the internal buffer directly<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (encoding != null) {<br>
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
out.write(new String(buffer, 0, index, encoding));<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(new String(buffer, 0, index));<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /**<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; * Create a new buffer and store the<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; * current one in linked list<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; */<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; protected void addBuffer() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (buffers == null) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffers = new LinkedList();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffers.addLast(buffer);<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer = new byte[blockSize];<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size += index;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index = 0;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
}<br>
<br>
2、定义一个具体的标签类<br>
public class ListTag extends RiseAbstractTag {<br>
<br>
&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = 3385568988234498913L;<br>
<br>
&nbsp;&nbsp;&nbsp; protected String templateName = "list.jsp";<br>
<br>
&nbsp;&nbsp;&nbsp; private String id;<br>
<br>
&nbsp;&nbsp;&nbsp; public String getId() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return id;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; public void setId(String id) {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.id = id;<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; protected void prepareData() {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.setTemplateName(this.templateName);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pageContext.getRequest().setAttribute("id", this.id);<br>
&nbsp;&nbsp;&nbsp; }<br>
}<br>
<br>
3、定义TLD文件<br>
&nbsp;&nbsp; 参考TLD文档<br>
4、定义list.jsp模板<br>
&lt;%@ page contentType="text/html; charset=GBK" %&gt;<br>
<br>
&lt;%<br>
String id = (String)request.getAttribute("id");<br>
%&gt;<br>
&lt;table width="90%" border="0" cellpadding="0" cellspacing="2"&gt;<br>
<br>
&nbsp; &lt;tr&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;td&gt;Id&lt;/td&gt;<br>
&nbsp;&nbsp;&nbsp; &lt;td align="right"&gt;&lt;%= id %&gt;&lt;/td&gt;<br>
&nbsp; &lt;/tr&gt;<br>
&lt;/table&gt;<br>
5、使用默认模板<br>
&nbsp;&nbsp; &lt;WWTag:list id="Hello World！"/&gt;<br>
6、使用自定义模板<br>
&nbsp;&nbsp; a: 定义模板<br>
&lt;%@ page contentType="text/html; charset=GBK" %&gt;<br>
<br>
&lt;%<br>
String id = (String)request.getAttribute("id");<br>
out.println("Id is : " + id);<br>
%&gt;<br>
&nbsp;&nbsp; b: use it , 模板名：testList.jsp，放在/WEB-INF/tags目录下<br>
&nbsp;&nbsp; &lt;WWTag:list id="Hello World！" templateName="testList.jsp"/&gt;<br>
<br>
<br>
<img src ="http://www.blogjava.net/jdyao/aggbug/35728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jdyao/" target="_blank">西部村里人</a> 2006-03-16 22:57 <a href="http://www.blogjava.net/jdyao/archive/2006/03/16/35728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>团队在局域网中共享ADSL方法(windows, linux)</title><link>http://www.blogjava.net/jdyao/archive/2006/03/16/35658.html</link><dc:creator>西部村里人</dc:creator><author>西部村里人</author><pubDate>Thu, 16 Mar 2006 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/jdyao/archive/2006/03/16/35658.html</guid><wfw:comment>http://www.blogjava.net/jdyao/comments/35658.html</wfw:comment><comments>http://www.blogjava.net/jdyao/archive/2006/03/16/35658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jdyao/comments/commentRss/35658.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jdyao/services/trackbacks/35658.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 团队在外地封闭开发，没有带交换机功能能的HUB来连接到ADSL。只好共享ADSL方式。<br>
&nbsp;&nbsp; 1、windows下共享非常简单，把ADSL共享即可，但不要把每一个连接都拨号给选上，否则无法使用。此时局域网内IP地址在192.168.0.1--192.168.0.2XX之间。问题是：容易坏，不稳定。随改用Linux。<br>
&nbsp;&nbsp; 2、Linux环境下使用。Red Hat Linux ES3版本。（文档来自网络收集，共享大家使用）<br>
<br>


<p class="MsoNormal" style="text-align: center; line-height: 12.85pt;" align="center"><font color="#0000ff" size="3"><b><span style="font-size: 11.5pt; font-family: 宋体; color: rgb(213, 43, 111);" lang="EN-US">http://www.chinalinuxpub.com/read.php?wid=558<o:p></o:p></span></b></font></p>


<p class="MsoNormal" style="text-align: center; line-height: 12.85pt;" align="center"><font color="#0000ff" size="3"><b><span style="font-size: 11.5pt; font-family: 宋体; color: rgb(213, 43, 111);" lang="EN-US"><o:p>&nbsp;</o:p></span></b></font></p>


<p class="MsoNormal" style="text-align: left; line-height: 12.85pt;" align="left"><span style="font-size: 8.5pt; font-family: 宋体; color: black; display: none;" lang="EN-US"><o:p>&nbsp;</o:p></span></p>


<div align="center">

<table class="MsoNormalTable" style="background: white none repeat scroll 0%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;" border="0" cellpadding="0" cellspacing="0" height="1247" width="636">
 <tbody><tr style="">
  <td style="padding: 3.75pt;" valign="top">
  <p class="MsoNormal" style="text-align: left; line-height: 12.85pt;" align="left"><font color="#0000ff" size="3"><font size="4"><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">1</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、 网卡配置。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">我这里用的网卡是<span lang="EN-US">RTL8029</span>和<span lang="EN-US">3com905</span>。在系统中，<span lang="EN-US">RTL8029</span>标记为<span lang="EN-US">eth0</span>，<span lang="EN-US">3com905</span>标记为<span lang="EN-US">eth1</span>。<span lang="EN-US">RTL8029</span>和<span lang="EN-US">3com905</span>的<span lang="EN-US">IP</span>地址分别是<span lang="EN-US">192.168.0.1</span>、<span lang="EN-US">192.168.1.1</span>（其他的地址也可），掩码均为<span lang="EN-US">255.255.255.0</span>。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">eth0</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">用于连接网通，<span lang="EN-US">eth1</span>用于连接内网，局域网网段为<span lang="EN-US">192.168.0.0</span>。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">注意：此处两块网卡均不能设网关。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">2</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、<span lang="EN-US"> PPPoE</span>软件的升级与安装</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">1</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">） 在 <span lang="EN-US"><a href="http://www.roaringpenguin.com/pppoe/#downloa" target="_blank"><span style="color: black; text-decoration: none;">http://www.roaringpenguin.com/pppoe/#downloa</span></a>d
  </span>下载</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">2</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">） 安装<span lang="EN-US">rp-pppoe</span>。以<span lang="EN-US">root</span>身份执行</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">rpm </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">–<span lang="EN-US">Uvh
  rp-pppoe-3.5-1.i386.rpm</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">3</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、 修改<span lang="EN-US">/etc/ sysctl.conf</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">将其中的</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">net.ipv4.ip_forward
  = 0</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">改为</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">net.ipv4.ip_forward
  = 1</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">4</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、 去除<span lang="EN-US">ipchains</span>模块，只选择<span lang="EN-US">iptables</span>方法如下：</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">1</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）<span lang="EN-US">setup</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">2</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）选择<span lang="EN-US">system service</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">3</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）去除<span lang="EN-US">ipchains</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">4</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）选中<span lang="EN-US">iptables</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">5</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）重启机器</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">5</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、<span lang="EN-US"> PPPoE</span>客户端配置</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">在<span lang="EN-US">rp-pppoe-3.5-1.i386.rpm</span>安装完毕后，接下来就可进行<span lang="EN-US">PPPoE</span>客户端配置了。过程如下。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">#/usr/sbin/adsl-setup</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">&gt;&gt;&gt;
  Enter your PPPoE user name: </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">——此处输入拨号帐号的用户名</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">&gt;&gt;&gt;
  Enter the Ethernet interface connected to the ADSL modem For Solaris, this is
  likely to be something like /dev/hme0. For Linux, it will be ethn, where 'n'
  is a number. (default eth0): </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">——输<span lang="EN-US">eth0</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">&gt;&gt;&gt;
  Enter the demand value (default no): </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">——输<span lang="EN-US">no</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">&gt;&gt;&gt;
  Enter the DNS information here: </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">——输<span lang="EN-US">210.83.130.18</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">&gt;&gt;&gt;
  Please enter your PPPoE password: </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">——输网通用户口令</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">&gt;&gt;&gt;
  Choose a type of firewall (0-2): </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">——输<span lang="EN-US">0</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">&gt;&gt;&gt;
  Accept these settings and adjust configuration files (y/n)? </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">——输<span lang="EN-US">y</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">6</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、 启动拨号连接</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">/usr/sbin/adsl-start</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">成功连接后，屏幕显示<span lang="EN-US">Connected</span>。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">此时这台<span lang="EN-US">linux</span>已可以上网浏览了。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">7</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、<span lang="EN-US"> IP</span>伪装</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">为了使局域网中的其他机器能通过<span lang="EN-US">Linux</span>服务器共享上网，至少须执行下面的命令：</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">iptables
  -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">完成后，在<span lang="EN-US">192.168.0.0</span>网段（网关为<span lang="EN-US">192.168.0.1</span>）的<span lang="EN-US">PC</span>机就可透过<span lang="EN-US">Linux</span>上网了！</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">8</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、 开机自启动</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">为了使<span lang="EN-US">Linux</span>服务器能够自动拨号，执行下面步骤。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">1</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）<span lang="EN-US">chkconfig --add adsl</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">2</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）<span lang="EN-US">setup</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">3</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）选择<span lang="EN-US">system services</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">4</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）选中<span lang="EN-US">ADSL</span></span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">5</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）<span lang="EN-US">OK</span>退出</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">6</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">）打开<span lang="EN-US">/etc/rc.d/rc.local</span>，在该文件的末尾添上下面语句</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">echo
  "[OK]"</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">echo
  "Drop ICMP form anywhere"</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">echo
  1 &gt; /proc/sys/net/ipv4/icmp_echo_ignore_all</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">echo
  "[OK]"</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">iptables
  -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">说明：前面四句用于关闭<span lang="EN-US">ICMP</span>，防止别人<span lang="EN-US">Ping</span>。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US">9</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">、 至此，一切<span lang="EN-US">OK</span>，一个简单的拨号建成了。重启机器后，发现<span lang="EN-US">linux</span>的<span lang="EN-US">internet</span>共享连接已经一切就绪了，好妙！！！</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  <br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">为了建立更安全的拨号连接，请再设置各种安全机制吧，好事多磨嘛。</span><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><br>
  </span><span style="font-size: 8.5pt; font-family: 宋体; color: black;">另外，如果网关后面的客户机无法通过<span lang="EN-US">linux</span>上网，请留意一下<span lang="EN-US">linux</span>的防火墙设置。</span></font><span style="font-size: 8.5pt; font-family: 宋体; color: black;" lang="EN-US"><o:p></o:p></span></font></p>
  </td>
 </tr>
</tbody></table>

</div>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">REDHAT9</span><span style="font-family: 宋体;">上</span><span lang="EN-US">ADSL</span><span style="font-family: 宋体;">最终解决方案</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">发布于</span><st1:chsdate isrocdate="False" islunardate="False" day="29" month="5" year="2005" w:st="on"><span lang="EN-US">2005-05-29</span></st1:chsdate><span lang="EN-US"> </span><span style="font-family: 宋体;">被读</span><span lang="EN-US">559</span><span style="font-family: 宋体;">次</span>
<span style="font-family: 宋体;">【字体：大</span> <span style="font-family: 宋体;">中</span> <span style="font-family: 宋体;">小】</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">在</span><span lang="EN-US">LINUXSIR</span><span style="font-family: 宋体;">和</span><span lang="EN-US">LINUXFANS</span><span style="font-family: 宋体;">上看了很多关于</span><span lang="EN-US">ADSL</span><span style="font-family: 宋体;">的文章</span><span lang="EN-US">,</span><span style="font-family: 宋体;">都没有解决我的</span><span lang="EN-US">REDHAT9</span><span style="font-family: 宋体;">上</span><span lang="EN-US">ADSL</span><span style="font-family: 宋体;">上网的问题</span><span lang="EN-US">,</span><span style="font-family: 宋体;">今天实在是没有办法</span><span lang="EN-US">,</span><span style="font-family: 宋体;">重新建立连接</span><span lang="EN-US">,</span><span style="font-family: 宋体;">曲折的经历</span><span lang="EN-US">,</span><span style="font-family: 宋体;">终于上网了</span><span lang="EN-US">(</span><span style="font-family: 宋体;">非常激动</span><span lang="EN-US">,</span><span style="font-family: 宋体;">可能表达的不是很好</span><span lang="EN-US">),</span><span style="font-family: 宋体;">特的写下我的过程</span><span lang="EN-US">,</span><span style="font-family: 宋体;">作为参考</span><span lang="EN-US">:</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">REDHAT</span><span style="font-family: 宋体;">默认的</span><span lang="EN-US">PPPOE</span><span style="font-family: 宋体;">有问题</span><span lang="EN-US">,</span><span style="font-family: 宋体;">需要</span><span lang="EN-US">RPM -E,</span><span style="font-family: 宋体;">然后</span><span lang="EN-US">,</span><span style="font-family: 宋体;">安装这个 --<font color="#ff0000">实际在RedES3上没必要按照这个共享包。</font><br>
</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">http://www.roaringpenguin.com/pppoe/rp-pppoe-3.5.tar.gz(</span><span style="font-family: 宋体;">北南兄推荐</span><span lang="EN-US">)</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">解压和安装：</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">#tar zxvf rp-pppoe-3.5.tar.gz</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">进入解压目录执行</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">#sh ./go</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">然后再来设置</span><span lang="EN-US">ADSL</span><span style="font-family: 宋体;">。这一处，我们要用命令。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">#adsl-setup</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Welcome to the Roaring Penguin ADSL client
setup. First, I will run</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">some checks on your system to make sure the
PPPoE client is installed</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">properly...</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Looks good! Now, please enter some
information:</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">USER NAME</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">&gt;&gt;&gt; Enter your PPPoE user name
(default XXX): </span><span style="font-family: 宋体;">在这里输入</span><span lang="EN-US">ADSL</span><span style="font-family: 宋体;">的用户名</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">INTERFACE</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">&gt;&gt;&gt; Enter the Ethernet interface
connected to the ADSL modem</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">For Solaris, this is likely to be something
like /dev/hme0.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">For Linux, it will be ethn, where 'n' is a
number.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">(default eth0):</span><span style="font-family: 宋体;">如果一张网卡就设置写上</span><span lang="EN-US">eth0</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Do you want the link to come up on demand,
or stay up continuously?</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">If you want it to come up on demand, enter
the idle time in seconds</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">after which the link should be dropped. If
you want the link to</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">stay up permanently, enter 'no' (two
letters, lower-case.)</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">NOTE: Demand-activated links do not
interact well with dynamic IP</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">addresses. You may have some problems with
demand-activated links.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">&gt;&gt;&gt; Enter the demand value
(default no):</span><span style="font-family: 宋体;">不用写什么</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">DNS</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please enter the IP address of your ISP's
primary DNS server.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">If your ISP claims that 'the server will
provide DNS addresses',</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">enter 'server' (all lower-case) here.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">If you just press enter, I will assume you
know what you are</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">doing and not modify your DNS setup.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">&gt;&gt;&gt; Enter the DNS information
here:</span><span style="font-family: 宋体;">在这里写上</span><span lang="EN-US">202.96.134.133</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">下一个</span><span lang="EN-US">DNS</span><span style="font-family: 宋体;">是</span><span lang="EN-US">202.96.168.68 //</span><span style="font-family: 宋体;">这里根据个人不同可以修改</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">PASSWORD</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">&gt;&gt;&gt; Please enter your PPPoE
password:</span><span style="font-family: 宋体;">输入密码</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">&gt;&gt;&gt; Please re-enter your PPPoE
password:</span><span style="font-family: 宋体;">再输入一次</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">FIREWALLING</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please choose the firewall rules to use.
Note that these rules are</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">very basic. You are strongly encouraged to
use a more sophisticated</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">firewall setup; however, these will provide
basic security. If you</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">are running any servers on your machine,
you must choose 'NONE' and</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">set up firewalling yourself. Otherwise, the
firewall rules will deny</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">access to all standard servers like Web,
e-mail, ftp, etc. If you</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">are using SSH, the rules will block
outgoing SSH connections which</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">allocate a privileged source port.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">The firewall choices are:</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">0 - NONE: This script will not set any
firewall rules. You are responsible</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">for ensuring the security of your machine.
You are STRONGLY</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">recommended to use some kind of firewall
rules.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">1 - STANDALONE: Appropriate for a basic
stand-alone web-surfing workstation</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">2 - MASQUERADE: Appropriate for a machine
acting as an Internet gateway</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">for a LAN</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">&gt;&gt;&gt; Choose a type of firewall
(0-2):</span><span style="font-family: 宋体;">这里添写为</span><span lang="EN-US">2</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">** Summary of what you entered **</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Ethernet Interface: eth0</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">User name: XXX</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Activate-on-demand: No</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">DNS: Do not adjust</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Firewalling: MASQUERADE</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">&gt;&gt;&gt; Accept these settings and
adjust configuration files (y/n)?</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">弄完后，就按一个</span><span lang="EN-US">y</span><span style="font-family: 宋体;">键。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">(</span><span style="font-family: 宋体;">以上为北南兄文章里面内容</span><span lang="EN-US">)</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">不要急于连接</span><span lang="EN-US">,REBOOT -N</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">然后进入网络设置</span><span lang="EN-US">,</span><span style="font-family: 宋体;">停止</span><span lang="EN-US">ETH1(</span><span style="font-family: 宋体;">我的是用他</span><span lang="EN-US">)</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">然后</span><span lang="EN-US">ADSL-START</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">PING </span><span style="font-family: 宋体;">你的</span><span lang="EN-US">DNS,</span><span style="font-family: 宋体;">如果可以</span><span lang="EN-US">,</span><span style="font-family: 宋体;">那么</span><span lang="EN-US">,</span><span style="font-family: 宋体;">恭喜你</span><span lang="EN-US">!</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">其中部分内容可能不同</span><span lang="EN-US">,</span><span style="font-family: 宋体;">仅作参考</span><span lang="EN-US">,</span><span style="font-family: 宋体;">主要在连接后</span><span lang="EN-US">,</span><span style="font-family: 宋体;">能够</span><span lang="EN-US">PING</span><span style="font-family: 宋体;">通</span><span lang="EN-US">DNS</span><span style="font-family: 宋体;">即可</span><span lang="EN-US">!</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">==========================================================================</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">首先应该确定您是否安装了</span><span lang="EN-US">pppoe</span><span style="font-family: 宋体;">的应用程序。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">　　如果确实已经安装了，可以在终端用</span><span lang="EN-US"> adsl</span><span style="font-family: 宋体;">－</span><span lang="EN-US">setup</span><span style="font-family: 宋体;">命令启动</span><span lang="EN-US">adsl</span><span style="font-family: 宋体;">配置，提示过程为英文。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">　　大概为</span><span lang="EN-US">:</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">[root@localhost root]# adsl-setup</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Welcome to the ADSL client setup. First, I
will run some checks on</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">your system to make sure the PPPoE client
is installed properly...</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">The following DSL config was found on your
system:</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Device: Name:</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">ppp0 DSLppp0</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please enter the device if you want to
configure the present DSL config</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">(default ppp0) or enter 'n' if you want to
create a new one: ppp0 //</span><span style="font-family: 宋体;">默认为</span><span lang="EN-US">ppp0</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">LOGIN NAME</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Enter your Login Name (default SJ<st1:chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="411210" unitname="a" w:st="on">00411210A</st1:chmetcnv>1): anthrax //</span><span style="font-family: 宋体;">这里用你自己的用户名代替我的</span><span lang="EN-US">anthrax:)</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">INTERFACE</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Enter the Ethernet interface connected to
the ADSL modem</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">For Solaris, this is likely to be something
like /dev/hme0.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">For Linux, it will be ethX, where 'X' is a
number.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">(default eth0): eth0 //</span><span style="font-family: 宋体;">默认网卡设备为</span><span lang="EN-US">eth0</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Do you want the link to come up on demand,
or stay up continuously?</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">If you want it to come up on demand, enter
the idle time in seconds</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">after which the link should be dropped. If
you want the link to</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">stay up permanently, enter 'no' (two
letters, lower-case.)</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">NOTE: Demand-activated links do not
interact well with dynamic IP</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">addresses. You may have some problems with
demand-activated links.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Enter the demand value (default no): no //</span><span style="font-family: 宋体;">这里使用默认</span><span lang="EN-US">no</span><span style="font-family: 宋体;">就可以了，断线后不自动拨号。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">DNS</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please enter the IP address of your ISP's
primary DNS server.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">If your ISP claims that 'the server will provide
dynamic DNS addresses',</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">enter 'server' (all lower-case) here.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">If you just press enter, I will assume you
know what you are</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">doing and not modify your DNS setup.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Enter the DNS information here:
202.96.134.133 //</span><span style="font-family: 宋体;">主</span><span lang="EN-US">DNS</span><span style="font-family: 宋体;">地址设置，根据您的具体情况替换。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please enter the IP address of your ISP's
secondary DNS server.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">If you just press enter, I will assume
there is only one DNS server.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Enter the secondary DNS server address
here: 202.96.134.133 //</span><span style="font-family: 宋体;">第二</span><span lang="EN-US">DNS</span><span style="font-family: 宋体;">地址设置。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">PASSWORD</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please enter your Password: //</span><span style="font-family: 宋体;">这里设置密码，和</span><span lang="EN-US">unix</span><span style="font-family: 宋体;">规则一样，密码并不回显，因此不要认为您的键盘出了毛病</span><span lang="EN-US">:)</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please re-enter your Password:</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">//</span><span style="font-family: 宋体;">确认密码</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">USERCTRL</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please enter 'yes' (two letters,
lower-case.) if you want to allow</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">normal user to start or stop DSL connection
(default yes): yes //</span><span style="font-family: 宋体;">是否允许普通用户共享</span><span lang="EN-US">ADSL</span><span style="font-family: 宋体;">。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">FIREWALLING</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please choose the firewall rules to use.
Note that these rules are</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">very basic. You are strongly encouraged to
use a more sophisticated</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">firewall setup; however, these will provide
basic security. If you</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">are running any servers on your machine,
you must choose 'NONE' and</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">set up firewalling yourself. Otherwise, the
firewall rules will deny</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">access to all standard servers like Web,
e-mail, ftp, etc. If you</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">are using SSH, the rules will block
outgoing SSH connections which</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">allocate a privileged source port.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">The firewall choices are:</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">0 - NONE: This script will not set any
firewall rules. You are responsible</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">for ensuring the security of your machine.
You are STRONGLY</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">recommended to use some kind of firewall
rules.</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">1 - STANDALONE: Appropriate for a basic
stand-alone web-surfing workstation</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">2 - MASQUERADE: Appropriate for a machine
acting as an Internet gateway</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">for a LAN</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Choose a type of firewall (0-2): 1 //</span><span style="font-family: 宋体;">配置防火墙等级，根据您的需要选择。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Start this connection at boot time</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Do you want to start this connection at
boot time?</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Please enter no or yes (default no):no //</span><span style="font-family: 宋体;">是否允许开机自动加载，这里选择</span><span lang="EN-US">no</span><span style="font-family: 宋体;">，否则系统启动速度太慢</span><span lang="EN-US">!</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">** Summary of what you entered **</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Ethernet Interface: eth0</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">User name: anthrax</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Activate-on-demand: No</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Primary DNS: 202.96.134.133</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Secondary DNS: 202.96.134.133</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Firewalling: STANDALONE</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">User Control: yes</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US">Accept these settings and adjust
configuration files (y/n)?</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">　　选择</span><span lang="EN-US">y</span><span style="font-family: 宋体;">，配置完成。您可以用</span><span lang="EN-US"> adsl</span><span style="font-family: 宋体;">－</span><span lang="EN-US">start</span><span style="font-family: 宋体;">命令启动，可以用</span><span lang="EN-US">adsl</span><span style="font-family: 宋体;">－</span><span lang="EN-US">stop</span><span style="font-family: 宋体;">命令停止。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span style="font-family: 宋体;">　　为了方便，可以在桌面建立一个应用程序链接，命令就使用</span><span lang="EN-US">adsl</span><span style="font-family: 宋体;">－</span><span lang="EN-US">start</span><span style="font-family: 宋体;">。这样每次双击那个快捷图标就可以建立</span><span lang="EN-US">adsl</span><span style="font-family: 宋体;">链接了，跟</span><span lang="EN-US">windows</span><span style="font-family: 宋体;">中一样方便。</span></font></p>


<p class="MsoNormal"><font color="#0000ff" size="3"><span lang="EN-US"><o:p>&nbsp;</o:p></span></font></p>


<p class="MsoNormal" style="text-indent: 21pt;"><font color="#0000ff" size="3"><span style="font-family: 宋体;">好了，现在就开始您的网络之旅吧。</span><span lang="EN-US">(</span><span style="font-family: 宋体;">技巧</span><span lang="EN-US">:</span><span style="font-family: 宋体;">如果依据本内容操作扔不能链接网络，可以尝试在</span><span lang="EN-US">"</span><span style="font-family: 宋体;">系统设置－</span><span lang="EN-US">&gt;</span><span style="font-family: 宋体;">网路</span><span lang="EN-US">"</span><span style="font-family: 宋体;">中删除当前的网卡，重新配置</span><span lang="EN-US">adsl</span><span style="font-family: 宋体;">项。</span><span lang="EN-US">)</span></font></p>

<br>
<img src ="http://www.blogjava.net/jdyao/aggbug/35658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jdyao/" target="_blank">西部村里人</a> 2006-03-16 15:31 <a href="http://www.blogjava.net/jdyao/archive/2006/03/16/35658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse CVS 在局域网中与防火墙共用</title><link>http://www.blogjava.net/jdyao/archive/2006/03/16/35655.html</link><dc:creator>西部村里人</dc:creator><author>西部村里人</author><pubDate>Thu, 16 Mar 2006 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/jdyao/archive/2006/03/16/35655.html</guid><wfw:comment>http://www.blogjava.net/jdyao/comments/35655.html</wfw:comment><comments>http://www.blogjava.net/jdyao/archive/2006/03/16/35655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jdyao/comments/commentRss/35655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jdyao/services/trackbacks/35655.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 在打开windows网络防火墙的情况下，cvs的验证过程非常慢，几乎难以忍受。关闭防火墙虽然比较快捷，但计算机的安全性受到考验。<br>
&nbsp;&nbsp;&nbsp; 方法1、使用天网等防火墙产品，允许所有低端端口，允许局域网访问所有端口。注：此时它关闭了Windows的防火墙，使用自己提供的功能。<br>
&nbsp;&nbsp;&nbsp; 方法2、Windows配置，打开113，2401在局域网范围内的TCP端口。<br>
<img src ="http://www.blogjava.net/jdyao/aggbug/35655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jdyao/" target="_blank">西部村里人</a> 2006-03-16 15:11 <a href="http://www.blogjava.net/jdyao/archive/2006/03/16/35655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>补充：(Hibernate XDoclet 在Eclipse中的模版随笔)</title><link>http://www.blogjava.net/jdyao/archive/2006/03/12/34911.html</link><dc:creator>西部村里人</dc:creator><author>西部村里人</author><pubDate>Sun, 12 Mar 2006 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/jdyao/archive/2006/03/12/34911.html</guid><wfw:comment>http://www.blogjava.net/jdyao/comments/34911.html</wfw:comment><comments>http://www.blogjava.net/jdyao/archive/2006/03/12/34911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jdyao/comments/commentRss/34911.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jdyao/services/trackbacks/34911.html</trackback:ping><description><![CDATA[原文：<a id="viewpost1_TitleUrl" href="../archive/2006/03/10/34577.html">Hibernate XDoclet 在Eclipse中的模版</a><br>补充：<a id="CategoryEntryList1_EntryStoryList_Entries__ctl0_TitleUrl" href="../articles/34910.html">Hibernate对象关联--UML基础知识、XDoclet---- 5 XDoclet Template In Eclipse</a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (系列内容参看：<a HREF="/jdyao/category/8354.html">浏览</a>)<br><img src ="http://www.blogjava.net/jdyao/aggbug/34911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jdyao/" target="_blank">西部村里人</a> 2006-03-12 15:38 <a href="http://www.blogjava.net/jdyao/archive/2006/03/12/34911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些Java技术网站--四处收集--没有分类</title><link>http://www.blogjava.net/jdyao/archive/2006/03/12/34908.html</link><dc:creator>西部村里人</dc:creator><author>西部村里人</author><pubDate>Sun, 12 Mar 2006 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/jdyao/archive/2006/03/12/34908.html</guid><wfw:comment>http://www.blogjava.net/jdyao/comments/34908.html</wfw:comment><comments>http://www.blogjava.net/jdyao/archive/2006/03/12/34908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jdyao/comments/commentRss/34908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jdyao/services/trackbacks/34908.html</trackback:ping><description><![CDATA[<a href="http://www.javaalmanac.com/">http://www.javaalmanac.com</a> - Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处. <br><a href="http://www.onjava.com/">http://www.onjava.com</a> - O'Reilly的Java网站. 每周都有新文章. <br><a href="http://java.sun.com/">http://java.sun.com</a> - 官方的Java开发者网站 - 每周都有新文章发表. <br><a href="http://www.developer.com/java">http://www.developer.com/java</a> - 由Gamelan.com 维护的Java技术文章网站. <br><a href="http://www.java.net/">http://www.java.net</a> - Sun公司维护的一个Java社区网站. <br><a href="http://www.builder.com/">http://www.builder.com</a> - Cnet的Builder.com网站 - 所有的技术文章, 以Java为主. <br><a href="http://www.ibm.com/developerworks/java">http://www.ibm.com/developerworks/java</a> - IBM的Developerworks技术网站; 这是其中的Java技术主页. <br><a href="http://www.javaworld.com/">http://www.javaworld.com</a> - 最早的一个Java站点. 每周更新Java技术文章. <br><a href="http://www.devx.com/java">http://www.devx.com/java</a> - DevX维护的一个Java技术文章网站. <br><a href="http://www.fawcette.com/javapro">http://www.fawcette.com/javapro</a> - JavaPro在线杂志网站. <br><a href="http://www.sys-con.com/java">http://www.sys-con.com/java</a> - Java Developers Journal的在线杂志网站. <br><a href="http://www.javadesktop.org/">http://www.javadesktop.org</a> - 位于Java.net的一个Java桌面技术社区网站. <br><a href="http://www.theserverside.com/">http://www.theserverside.com</a> - 这是一个讨论所有Java服务器端技术的网站. <br><a href="http://www.jars.com/">http://www.jars.com</a> - 提供Java评论服务. 包括各种framework和应用程序. <br><a href="http://www.jguru.com/">http://www.jguru.com</a> - 一个非常棒的采用Q&amp;A形式的Java技术资源社区. <br><a href="http://www.javaranch.com/">http://www.javaranch.com</a> - 一个论坛，得到Java问题答案的地方，初学者的好去处。 <br><a href="http://www.ibiblio.org/javafaq/javafaq.html">http://www.ibiblio.org/javafaq/javafaq.html</a> - comp.lang.java的FAQ站点 - 收集了来自comp.lang.java新闻组的问题和答案的分类目录. <br><a href="http://java.sun.com/docs/books/tutorial/">http://java.sun.com/docs/books/tutorial/</a> - 来自SUN公司的官方Java指南 - 对于了解几乎所有的java技术特性非常有帮助. <br><a href="http://www.javablogs.com/">http://www.javablogs.com</a> - 互联网上最活跃的一个Java Blog网站. <br><a href="http://java.about.com/">http://java.about.com/</a> - 来自About.com的Java新闻和技术文章网站.<br>http://www.codechina.net 提供大量的java源代码及教程。<img src ="http://www.blogjava.net/jdyao/aggbug/34908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jdyao/" target="_blank">西部村里人</a> 2006-03-12 14:34 <a href="http://www.blogjava.net/jdyao/archive/2006/03/12/34908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate XDoclet 在Eclipse中的模版</title><link>http://www.blogjava.net/jdyao/archive/2006/03/10/34577.html</link><dc:creator>西部村里人</dc:creator><author>西部村里人</author><pubDate>Thu, 09 Mar 2006 16:28:00 GMT</pubDate><guid>http://www.blogjava.net/jdyao/archive/2006/03/10/34577.html</guid><wfw:comment>http://www.blogjava.net/jdyao/comments/34577.html</wfw:comment><comments>http://www.blogjava.net/jdyao/archive/2006/03/10/34577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jdyao/comments/commentRss/34577.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jdyao/services/trackbacks/34577.html</trackback:ping><description><![CDATA[开发Hibernate很久，最终还是XDoclet提供的帮助最大。能够处理复杂的对象关系，也最符合面向对象的原则。<br><b>方法1：</b><br><font size="-1"><font color="#0000ff">OO类图--〉数据库设计--〉MiddleGen
(能够处理基本的关联关系--打开XDoclet标签生成开关，但不能处理继承概念，较为遗憾ing)--&gt;在Eclipse手工更新Java类中
的XDoclet标签，然后XDoclet生成Hbm文件。当然了再写个JUnit测试一下关联关系是否正确，必要的Lazy是否标注。</font><i><br></i></font><br>下载Template： <a href="http://raibledesigns.com/wiki/Wiki.jsp?page=XDocletEclipse#hibcolidx">http://raibledesigns.com/wiki/Wiki.jsp?page=XDocletEclipse#hibcolidx</a> 非常感谢<font size="-1"><i><a class="wikipage" href="http://raibledesigns.com/wiki/Wiki.jsp?page=MattRaible">MattRaible</a>.<br></i><i><br>在中文环境中，window xp的字符切换键与Eclipse模版的字符快捷键重合，需要修改之。为了避免麻烦，直接修改Template文件，简单添加@标示符：全文如下：<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;templates&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibarray" description="@hibernate.array" context="javadoc" enabled="true"&gt;@hibernate.array table=&amp;quot;&amp;quot; cascade=&amp;quot;save-update&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibbag" description="@hibernate.bag" context="javadoc" enabled="true"&gt;@hibernate.bag table=&amp;quot;&amp;quot; lazy=&amp;quot;false&amp;quot; cascade=&amp;quot;none&amp;quot; inverse=&amp;quot;false&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibclass" description="@hibernate.class" context="javadoc" enabled="true"&gt;@hibernate.class table=&amp;quot;${enclosing_type}&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibcolelm" description="@hibernate.collection-element" context="javadoc" enabled="true"&gt;@hibernate.collection-element column=&amp;quot;&amp;quot; type=&amp;quot;&amp;quot; length=&amp;quot;&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibcolidx" description="@hibernate.collection-index" context="javadoc" enabled="true"&gt;@hibernate.collection-index column=&amp;quot;&amp;quot; type=&amp;quot;&amp;quot; length=&amp;quot;&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibcolkey" description="@hibernate.collection-key" context="javadoc" enabled="true"&gt;@hibernate.collection-key column=&amp;quot;&amp;quot; generator-class=&amp;quot;native&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibcolmtm" description="@hibernate.many-to-many" context="javadoc" enabled="true"&gt;@hibernate.set name=&amp;quot;${enclosing_method}&amp;quot; table=&amp;quot;link_table_name_here&amp;quot; cascade=&amp;quot;save-update&amp;quot; inverse=&amp;quot;true|false&amp;quot; lazy=&amp;quot;true&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* @hibernate.collection-key column=&amp;quot;${enclosing_type}_ID&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* @hibernate.collection-many-to-many class=&amp;quot;relationship_class_the_set_contains&amp;quot; column=&amp;quot;relationship_foreign_key&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* @return ${return_type}&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibcolotm" description="@hibernate.one-to-many relationship" context="javadoc" enabled="true"&gt;@hibernate.set name=&amp;quot;${enclosing_method}&amp;quot; table=&amp;quot;relationship_table&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sort=&amp;quot;comparator_class&amp;quot; inverse=&amp;quot;true|false&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cascade=&amp;quot;save-update&amp;quot; lazy=&amp;quot;true&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* @hibernate.collection-key column=&amp;quot;${enclosing_type}_ID&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* @hibernate.collection-one-to-many class=&amp;quot;relationship_class&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;*<br>&nbsp;&nbsp;&nbsp; &nbsp;* @return ${return_type}&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibcomelm" description="@hibernate.collection-composite-element" context="javadoc" enabled="true"&gt;@hibernate.collection-composite-element class=&amp;quot;&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibcomp" description="@hibernate.component" context="javadoc" enabled="true"&gt;@hibernate.component class=&amp;quot;component_class_name&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibdisc" description="@hibernate.discriminator" context="javadoc" enabled="true"&gt;@hibernate.discriminator column=&amp;quot;subclass&amp;quot; type=&amp;quot;character&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibid" description="@hibernate.id" context="javadoc" enabled="true"&gt;Note: unsaved-value An identifier property value that indicates that an instance <br>&nbsp;&nbsp;&nbsp; &nbsp;* is newly instantiated (unsaved), distinguishing it from transient instances that <br>&nbsp;&nbsp;&nbsp; &nbsp;* were saved or loaded in a previous session.&nbsp; If not specified you will get an exception like this:<br>&nbsp;&nbsp;&nbsp; &nbsp;* another object associated with the session has the same identifier<br>&nbsp;&nbsp;&nbsp; &nbsp;*<br>&nbsp;&nbsp;&nbsp; &nbsp;* @hibernate.id generator-class=&amp;quot;&amp;quot; type=&amp;quot;${return_type}&amp;quot; column=&amp;quot;${enclosing_type}_ID&amp;quot; <br>&nbsp;&nbsp;&nbsp; &nbsp;* unsaved-value=&amp;quot;null&amp;quot; length=&amp;quot;&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* @return ${return_type}&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hiblist" description="@hibernate.list" context="javadoc" enabled="true"&gt;@hibernate.list table=&amp;quot;relationship-table&amp;quot; lazy=&amp;quot;false&amp;quot; cascade=&amp;quot;none&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibmap" description="@hibernate.map" context="javadoc" enabled="true"&gt;@hibernate.map name=&amp;quot;${enclosing_method}&amp;quot; table=&amp;quot;relationship-table&amp;quot; lazy=&amp;quot;false&amp;quot; cascade=&amp;quot;none&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibmto" description="@hibernate.many-to-one" context="javadoc" enabled="true"&gt;@hibernate.many-to-one column=&amp;quot;${return_type}_ID&amp;quot; class=&amp;quot;package.${return_type}&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;*<br>&nbsp;&nbsp;&nbsp; &nbsp;* @return ${return_type}<br>&nbsp;&nbsp;&nbsp; &nbsp;*&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hiboto" description="@hibernate.one-to-one" context="javadoc" enabled="true"&gt;hibernate.one-to-one cascade=&amp;quot;none&amp;quot; class=&amp;quot;&amp;quot; outer-join=&amp;quot;auto&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibprimarr" description="@hibernate.primitive-array" context="javadoc" enabled="true"&gt;@hibernate.primitive-array table=&amp;quot;&amp;quot; cascade=&amp;quot;none&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibprop" description="@hibernate.property" context="javadoc" enabled="true"&gt;@hibernate.property name=&amp;quot;${enclosing_method}&amp;quot; column=&amp;quot;${enclosing_method}&amp;quot; type=&amp;quot;${return_type}&amp;quot; not-null=&amp;quot;false&amp;quot; unique=&amp;quot;false&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @return ${return_type}&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibquery" description="@hibernate.query" context="javadoc" enabled="true"&gt;@hibernate.query name=&amp;quot;&amp;quot; query=&amp;quot;&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibset" description="@hibernate.set" context="javadoc" enabled="true"&gt;@hibernate.set name=&amp;quot;${enclosing_method}&amp;quot; table=&amp;quot;relationship_table&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sort=&amp;quot;comparator_class&amp;quot; inverse=&amp;quot;true&amp;quot;<br>&nbsp;&nbsp;&nbsp; &nbsp;* &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cascade=&amp;quot;save-update&amp;quot; lazy=&amp;quot;true&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibsubc" description="@hibernate.subclass" context="javadoc" enabled="true"&gt;@hibernate.subclass name=&amp;quot;&amp;quot; discriminator-value=&amp;quot;&amp;quot;&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibts" description="@hibernate.timestamp" context="javadoc" enabled="true"&gt;@hibernate.timestamp column=&amp;quot;${enclosing_method}&amp;quot; <br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @return ${return_type}&lt;/template&gt;<br>&nbsp;&nbsp;&nbsp; &lt;template name="@hibver" description="@hibernate.version" context="javadoc" enabled="true"&gt;@hibernate.version column=&amp;quot;${enclosing_method}&amp;quot; <br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;* @return ${return_type}&lt;/template&gt;<br>&lt;/templates&gt;<br><br>使用时：先把XML内容单独保存为文件，然后在Eclipse--&gt;Windows--&gt;Preferences<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Preferences--&gt;Java--&gt;Editor--&gt;Templates 点击Import按钮导入之前已经保存的XML文件。<br><br>方法2：<br></i></font><font size="-1"><font color="#0000ff">OO类图--〉在Eclipse手工编写属性--〉生成Get/Set方法--〉更新Java类中
的XDoclet标签，然后XDoclet生成Hbm文件。当然了再写个JUnit测试一下关联关系是否正确，必要的Lazy是否标注。<br></font>要求先修改Get方法的模板：源代码编辑器中鼠标右键--〉Source--〉Generate Getters And Setters..<br><img src="http://www.blogjava.net/images/blogjava_net/jdyao/bb.PNG" alt="bb.PNG" border="0" height="567" width="569"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击打开面板中Code Template链接。<br><img src="http://www.blogjava.net/images/blogjava_net/jdyao/aa1.PNG" alt="aa1.PNG" border="0" height="531" width="652"><br><br>编辑Getter方法模板：<br>/**<br>&nbsp;* @hibernate.property name="${bare_field_name}" column="${field}" type="${field_type}" not-null="false" unique="false" length="128"<br>&nbsp;* @return Returns the ${bare_field_name}.<br>&nbsp;*/<br>然后生成代码，手工微调部分属性。也能够节约大量时间。<br><br><font color="#ff0000" size="2">注意：在编写Java POJO类时，java属性用完整的带包名的类，例如：<br></font>/**<br> * @author jdyao<br>&nbsp;* @hibernate.class table="respri"<br>&nbsp;* @version<br>&nbsp;*/<br>public class Resource implements Serializable {<br><br>&nbsp;&nbsp;&nbsp; private static final long serialVersionUID = 1505581058179605003L;<br><br>&nbsp;&nbsp;&nbsp; private java.lang.String guid;<br><br>&nbsp;&nbsp;&nbsp; private java.lang.String context;<br><br>&nbsp;<br><br>&nbsp;&nbsp;&nbsp; public </font><font size="-1">Resource </font><font size="-1">() {<br><br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* @return java.lang.String<br>&nbsp;&nbsp;&nbsp; &nbsp;* @hibernate.property name="context" type="java.lang.String"<br>&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; length="128"<br>&nbsp;&nbsp;&nbsp; &nbsp;* <br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; public java.lang.String getContext() {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return context;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; public void setContext(java.lang.String context) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.context = context;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp; &nbsp;* @return java.lang.String<br>&nbsp;&nbsp;&nbsp; &nbsp;* @hibernate.id generator-class="guid" type="java.lang.String" column="guid"<br>&nbsp;&nbsp;&nbsp; &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsaved-value="null" length="38"<br>&nbsp;&nbsp;&nbsp; &nbsp;*/<br>&nbsp;&nbsp;&nbsp; public java.lang.String getGuid() {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return guid;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; public void setGuid(java.lang.String guid) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.guid = guid;<br>&nbsp;&nbsp;&nbsp; <font color="#000000">}</font></font><font color="#000000"><br></font><font size="-1"><font color="#ff0000" size="2"><font color="#000000">}<br>原因：XDoclet在生成的时候，如果type="string",有时会出现错误，无法生成Hbm文件，为了避免这个不必要的错误，务必要写全类名。<br><font color="#ff0000"><b><br>XDoclet build.xml文件：</b></font><br><font color="#0000ff">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br><br>&lt;project name="XDoclet Examples" default="hibernate" basedir="."&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="xdoclet.root.dir" value="${basedir}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property file="${xdoclet.root.dir}/build.properties"/&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;!-- Include the build-dist properties. Since properties are immutable,<br>&nbsp;&nbsp;&nbsp; this will not override available properties. You do not have to include<br>&nbsp;&nbsp;&nbsp; this in your own build file. --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property file="build-dist.properties"/&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;!-- See CustomerBean. This is to demonstrate property substitution. --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="ejb.prefix" value="blah"/&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- Define the class path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;path id="samples.class.path"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${lib.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${samples.lib.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${dist.lib.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/path&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- Initialise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;target name="init"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tstamp&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;format property="TODAY" pattern="d-MM-yy"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tstamp&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;taskdef<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="xdoclet"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classname="xdoclet.DocletTask"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classpathref="samples.class.path"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;taskdef<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="hibernatedoclet"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classname="xdoclet.modules.hibernate.HibernateDocletTask"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classpathref="samples.class.path"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br><br><br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- Prepares the directory structure&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;target name="prepare" depends="init"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${samples.classes.dir}"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${samples.gen-src.dir}"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${samples.meta-inf.dir}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br><br><br><br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- Invoke XDoclet's hibernate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;target name="hibernate" depends="prepare" description="Generate mapping documents (run jar first)"&gt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;+---------------------------------------------------+&lt;/echo&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&lt;/echo&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;| R U N N I N G&nbsp;&nbsp; H I B E R N A T E D O C L E T&nbsp;&nbsp;&nbsp;&nbsp; |&lt;/echo&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&lt;/echo&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo&gt;+---------------------------------------------------+&lt;/echo&gt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;hibernatedoclet<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destdir="${samples.gen-src.dir}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mergedir="${samples.src.dir}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excludedtags="@version,@author,@todo,@see"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; force="${samples.xdoclet.force}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verbose="false"&gt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${samples.java.dir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="**/**/*.java"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;hibernate version="3.0"/&gt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/hibernatedoclet&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- Clean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- =================================================================== --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;target name="clean"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;delete dir="${samples.dist.dir}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br><br>&lt;/project&gt;<br></font></font></font></font><font size="-1"><font color="#ff0000" size="2"><font color="#000000"><font color="#0000ff">build-dist.properties 文件：<br># These properties are only used when building the samples expanded from the distribution.<br><br>lib.dir = ${xdoclet.root.dir}/lib<br>dist.lib.dir = ${lib.dir}<br><br>samples.dir = ${xdoclet.root.dir}<br>samples.dist.dir = ${samples.dir}/target<br>samples.lib.dir = ${samples.dir}/lib<br>samples.src.dir = ${samples.dir}/src<br>samples.java.dir = ${samples.src.dir}/java<br>samples.gen-src.dir = ${samples.dist.dir}/gen-src<br><br>samples.meta-inf.dir = ${samples.dist.dir}/meta-inf<br>samples.web-inf.dir = ${samples.dist.dir}/web-inf<br>samples.merge.dir = ${samples.src.dir}/merge<br>samples.classes.dir = ${samples.dist.dir}/classes<br>samples.web.dir = ${samples.src.dir}/web<br>samples.xdoclet.force = false<br><br><font color="#000000">工程目录结构：<a href="http://xdoclet.sourceforge.net/xdoclet/">从XDoclet</a>网站下载该包，解压缩后，把Example目录单独copy出来，把这2个文件放在Example目录下，同时建立lib目录，把XDoclet目录下--〉lib目录下的*.jar拷贝到Example新建立的lib目录下。</font><br></font></font></font></font><img src ="http://www.blogjava.net/jdyao/aggbug/34577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jdyao/" target="_blank">西部村里人</a> 2006-03-10 00:28 <a href="http://www.blogjava.net/jdyao/archive/2006/03/10/34577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>