SiteMesh3简介及使用

最近项目用到SiteMesh3,研究学习一段时间后决定写篇博文来记录收获。

SiteMesh

  • SiteMesh
    • 介绍
    • 工作原理
    • 配置及使用
      • 下载
      • 1添加maven依赖
      • 2webxml中添加SiteMesh过滤器
      • 3创建一个装饰页面decorator page
      • 4创建一个被装饰页面content page
      • 5配置
        • 1XML方式
        • 1Java方式
      • 6查看效果
      • 7高级配置
        • 1XML形式配置
        • 2Java形式配置
      • 自定义标签的使用
        • 装饰页面decorator
        • 内容页面content
        • 效果


介绍

SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的。

Sitemesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权,等等。它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,如htm的内容,使得它的内容也符合你的页面结构的要求。甚至于它能将HTML文件象include那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是GOF的Decorator模式的最生动的实现。尽管它是由java语言来实现的,但它能与其他Web应用很好地集成。

下图是SiteMesh的结构图


SiteMesh3简介及使用_第1张图片


工作原理

SiteMesh是基于Servlet的filter的,即过滤流。它是通过截取response,并进行装饰后再交付给客户。

其中涉及到两个名词: 装饰页面(decorator page)和 被装饰页面(Content page), 即 SiteMesh通过对Content Page的装饰,最终得到页面布局和外观一致的页面,并返回给客户。

运行SiteMesh3至少需要:

  • JDK 1.5
  • 一个Servlet 2.5兼容容器
  • SiteMesh运行时库

配置及使用

下载

wiki上的下载链接为:http://wiki.sitemesh.org/wiki/display/sitemesh3/Home

GitHub上3.0.1版本下载地址为(含demo):https://github.com/sitemesh/sitemesh3/releases/tag/3.0.1


1、添加maven依赖

pom.xml文件添加以下依赖:


<dependency>
     <groupId>org.sitemeshgroupId>
     <artifactId>sitemeshartifactId>
     <version>3.0.1version>
 dependency>

2、web.xml中添加SiteMesh过滤器

<web-app>

    ...

    <filter>
        <filter-name>sitemeshfilter-name>
        <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilterfilter-class>
    filter>

    <filter-mapping>
        <filter-name>sitemeshfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>

web-app>

3、创建一个“装饰页面”(decorator page)

该装饰页面包含Web应用程序中常见得布局和样式,它是一个包含</code>,<code><head></code>和<code><body></code>元素的模板。它至少要包含:</p> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">HTML</span>></span> <span class="hljs-tag"><<span class="hljs-title">HEAD</span>></span> <span class="hljs-tag"><<span class="hljs-title">title</span>></span> <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span> =<span class="hljs-value">'title'</span>/></span> <span class="hljs-tag"></ <span class="hljs-attribute">title</span>></span> <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span> =<span class="hljs-value">'head'</span>/></span> <span class="hljs-tag"></<span class="hljs-title">HEAD</span>></span> <span class="hljs-tag"><<span class="hljs-title">BODY</span>></span> <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span> =<span class="hljs-value">'body'</span>/></span> <span class="hljs-tag"></<span class="hljs-title">BODY</span>></span> <span class="hljs-tag"></<span class="hljs-title">HTML</span>></span></code></pre> <p>标签<code><sitemesh:write property='...'/></code>将会被SiteMesh重写,用来包含从“被装饰页面”(content page)中提取到的值。可以从被装饰页面”(content page)中提取更多的属性,并且可以自定义规则 。 <br> 在WEB应用程序中创建/decorator.html,其中包含:</p> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">html</span>></span> <span class="hljs-tag"><<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">title</span>></span>SiteMesh example: <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span>=<span class="hljs-value">'title'</span>></span>Title goes here<span class="hljs-tag"></<span class="hljs-title">sitemesh:write</span>></span><span class="hljs-tag"></<span class="hljs-title">title</span>></span> <span class="hljs-tag"><<span class="hljs-title">style</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'text/css'</span>></span><span class="css"> <span class="hljs-tag">body</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">font-family</span>:<span class="hljs-value"> arial, sans-serif</span></span>; <span class="hljs-rule"><span class="hljs-attribute">background-color</span>:<span class="hljs-value"> <span class="hljs-hexcolor">#ffffcc</span></span></span>; <span class="hljs-rule">}</span></span> <span class="hljs-tag">h1</span>, <span class="hljs-tag">h2</span>, <span class="hljs-tag">h3</span>, <span class="hljs-tag">h4</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">text-align</span>:<span class="hljs-value"> center</span></span>; <span class="hljs-rule"><span class="hljs-attribute">background-color</span>:<span class="hljs-value"> <span class="hljs-hexcolor">#ccffcc</span></span></span>; <span class="hljs-rule"><span class="hljs-attribute">border-top</span>:<span class="hljs-value"> <span class="hljs-number">1</span>px solid <span class="hljs-hexcolor">#66ff66</span></span></span>; <span class="hljs-rule">}</span></span> <span class="hljs-class">.disclaimer</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">text-align</span>:<span class="hljs-value"> center</span></span>; <span class="hljs-rule"><span class="hljs-attribute">border-top</span>:<span class="hljs-value"> <span class="hljs-number">1</span>px solid <span class="hljs-hexcolor">#cccccc</span></span></span>; <span class="hljs-rule"><span class="hljs-attribute">margin-top</span>:<span class="hljs-value"> <span class="hljs-number">40</span>px</span></span>; <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value"> <span class="hljs-hexcolor">#666666</span></span></span>; <span class="hljs-rule"><span class="hljs-attribute">font-size</span>:<span class="hljs-value"> smaller</span></span>; <span class="hljs-rule">}</span></span> </span><span class="hljs-tag"></<span class="hljs-title">style</span>></span> <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span>=<span class="hljs-value">'head'</span>/></span> <span class="hljs-tag"></<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">body</span>></span> <span class="hljs-tag"><<span class="hljs-title">h1</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">'title'</span>></span>SiteMesh example site: <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span>=<span class="hljs-value">'title'</span>></span>Title goes here<span class="hljs-tag"></<span class="hljs-title">sitemesh:write</span>></span><span class="hljs-tag"></<span class="hljs-title">h1</span>></span> <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span>=<span class="hljs-value">'body'</span>></span>Body goes here. Blah blah blah.<span class="hljs-tag"></<span class="hljs-title">sitemesh:write</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">'disclaimer'</span>></span>Site disclaimer. This is an example.<span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">'navigation'</span>></span> <span class="hljs-tag"><<span class="hljs-title">b</span>></span>Examples:<span class="hljs-tag"></<span class="hljs-title">b</span>></span> [<span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"./"</span>></span>Static example<span class="hljs-tag"></<span class="hljs-title">a</span>></span>] [<span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"demo.jsp"</span>></span>Dynamic example<span class="hljs-tag"></<span class="hljs-title">a</span>></span>] <span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"></<span class="hljs-title">body</span>></span> <span class="hljs-tag"></<span class="hljs-title">html</span>></span></code></pre> <p>在这个例子中,装饰页面是一个静态的.html文件,但是如果你希望用动态页面,那么可以使用诸如JSP,FreeMarker等技术。</p> <h3 id="4创建一个被装饰页面content-page"><strong>4、创建一个“被装饰页面”(content page)</strong></h3> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">html</span>></span> <span class="hljs-tag"><<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">title</span>></span>Hello World<span class="hljs-tag"></<span class="hljs-title">title</span>></span> <span class="hljs-tag"></<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">body</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>Well hello there, fine world.<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>And so concludes this <span class="hljs-tag"><<span class="hljs-title">b</span>></span>SiteMesh<span class="hljs-tag"></<span class="hljs-title">b</span>></span> example.<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"><<span class="hljs-title">h2</span>></span>How it works<span class="hljs-tag"></<span class="hljs-title">h2</span>></span> <span class="hljs-tag"><<span class="hljs-title">ul</span>></span> <span class="hljs-tag"><<span class="hljs-title">li</span>></span>This page (<span class="hljs-tag"><<span class="hljs-title">code</span>></span>/index.html<span class="hljs-tag"></<span class="hljs-title">code</span>></span>) contains vanilla HTML content.<span class="hljs-tag"></<span class="hljs-title">li</span>></span> <span class="hljs-tag"><<span class="hljs-title">li</span>></span>SiteMesh is configured (in <span class="hljs-tag"><<span class="hljs-title">code</span>></span>/WEB-INF/web.xml<span class="hljs-tag"></<span class="hljs-title">code</span>></span>) to apply a decorator to all paths (<span class="hljs-tag"><<span class="hljs-title">code</span>></span>/*<span class="hljs-tag"></<span class="hljs-title">code</span>></span>).<span class="hljs-tag"></<span class="hljs-title">li</span>></span> <span class="hljs-tag"><<span class="hljs-title">li</span>></span>The decorator (<span class="hljs-tag"><<span class="hljs-title">code</span>></span>/decorator.html<span class="hljs-tag"></<span class="hljs-title">code</span>></span>) contains the common look and feel that is applied to the site.<span class="hljs-tag"></<span class="hljs-title">li</span>></span> <span class="hljs-tag"></<span class="hljs-title">ul</span>></span> <span class="hljs-tag"></<span class="hljs-title">body</span>></span> <span class="hljs-tag"></<span class="hljs-title">html</span>></span></code></pre> <p>像装饰页面一样,被装饰页面可以是静态文件,也可以是由Servlet引擎动态生成(例如JSP)。</p> <hr> <h3 id="5配置"><strong>5、配置</strong></h3> <p><mark>SiteMesh配置支持两种方法 : <strong>XML</strong>或<strong>Java</strong>。</mark></p> <h4 id="51xml方式"><strong>5.1、XML方式</strong></h4> <p>在工程的 /WEB-INF/sitemesh3.xml中添加以下设置:</p> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">sitemesh</span>></span> <span class="hljs-tag"><<span class="hljs-title">mapping</span> <span class="hljs-attribute">path</span>=<span class="hljs-value">"/*"</span> <span class="hljs-attribute">decorator</span>=<span class="hljs-value">"/decorator.html"</span>/></span> <span class="hljs-tag"></<span class="hljs-title">sitemesh</span>></span></code></pre> <h4 id="51java方式"><strong>5.1、Java方式</strong></h4> <h2 id="title"> </h2> <p>要使用Java的配置方式,自定义的SitMesh过滤器需要继承<code>org.sitemesh.config.ConfigurableSiteMeshFilter</code>并重写<code>applyCustomConfiguration(SiteMeshFilterBuilder builder)</code>方法。 <br> 具体如下:</p> <pre class="prettyprint"><code class=" hljs java"><span class="hljs-keyword">package</span> com.wangxiaoan1234; <span class="hljs-keyword">import</span> org.sitemesh.builder.SiteMeshFilterBuilder; <span class="hljs-keyword">import</span> org.sitemesh.config.ConfigurableSiteMeshFilter; <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MySiteMeshFilter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">ConfigurableSiteMeshFilter</span> {</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">applyCustomConfiguration</span>(SiteMeshFilterBuilder builder) { builder.addDecoratorPath(<span class="hljs-string">"/*"</span>, <span class="hljs-string">"/decorator.html"</span>); } }</code></pre> <p><strong>既然使用Java配置方式,就不再需要sitemesh3.xml文件,但是在web.xml中要使用自己重写的SiteMesh过滤器。</strong> <br> 即web.xml的设置改成如下所示:</p> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">filter</span>></span> <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>sitemesh<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span> <span class="hljs-tag"><<span class="hljs-title">filter-class</span>></span>com.wangxiaoan1234.MySiteMeshFilter<span class="hljs-tag"></<span class="hljs-title">filter-class</span>></span> <span class="hljs-tag"></<span class="hljs-title">filter</span>></span> <span class="hljs-tag"><<span class="hljs-title">filter-mapping</span>></span> <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>sitemesh<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span> <span class="hljs-tag"><<span class="hljs-title">url-pattern</span>></span>/*<span class="hljs-tag"></<span class="hljs-title">url-pattern</span>></span> <span class="hljs-tag"></<span class="hljs-title">filter-mapping</span>></span></code></pre> <hr> <h3 id="6查看效果"><strong>6、查看效果</strong></h3> <p>本地查看内容页面.html效果如下: <br> <a href="http://img.e-com-net.com/image/info8/b5e17f93176940e7a025c67ec90ff395.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b5e17f93176940e7a025c67ec90ff395.jpg" alt="SiteMesh3简介及使用_第2张图片" title="" width="650" height="101" style="border:1px solid black;"></a></p> <p>通过SiteMesh3装饰后访问效果如下:</p> <p><a href="http://img.e-com-net.com/image/info8/02dd856bcf7b4ad39862642cf1b570aa.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/02dd856bcf7b4ad39862642cf1b570aa.jpg" alt="SiteMesh3简介及使用_第3张图片" title="" width="650" height="137" style="border:1px solid black;"></a></p> <p>查看该效果页面源代码如下:</p> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">html</span>></span> <span class="hljs-tag"><<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">title</span>></span>SiteMesh example: Hello World (Dynamic)<span class="hljs-tag"></<span class="hljs-title">title</span>></span> <span class="hljs-tag"><<span class="hljs-title">style</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'text/css'</span>></span><span class="css"> <span class="hljs-tag">body</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">font-family</span>:<span class="hljs-value"> arial, sans-serif</span></span>; <span class="hljs-rule"><span class="hljs-attribute">background-color</span>:<span class="hljs-value"> <span class="hljs-hexcolor">#ffffcc</span></span></span>; <span class="hljs-rule">}</span></span> <span class="hljs-tag">h1</span>, <span class="hljs-tag">h2</span>, <span class="hljs-tag">h3</span>, <span class="hljs-tag">h4</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">text-align</span>:<span class="hljs-value"> center</span></span>; <span class="hljs-rule"><span class="hljs-attribute">background-color</span>:<span class="hljs-value"> <span class="hljs-hexcolor">#ccffcc</span></span></span>; <span class="hljs-rule"><span class="hljs-attribute">border-top</span>:<span class="hljs-value"> <span class="hljs-number">1</span>px solid <span class="hljs-hexcolor">#66ff66</span></span></span>; <span class="hljs-rule">}</span></span> <span class="hljs-class">.disclaimer</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">text-align</span>:<span class="hljs-value"> center</span></span>; <span class="hljs-rule"><span class="hljs-attribute">border-top</span>:<span class="hljs-value"> <span class="hljs-number">1</span>px solid <span class="hljs-hexcolor">#cccccc</span></span></span>; <span class="hljs-rule"><span class="hljs-attribute">margin-top</span>:<span class="hljs-value"> <span class="hljs-number">40</span>px</span></span>; <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value"> <span class="hljs-hexcolor">#666666</span></span></span>; <span class="hljs-rule"><span class="hljs-attribute">font-size</span>:<span class="hljs-value"> smaller</span></span>; <span class="hljs-rule">}</span></span> </span><span class="hljs-tag"></<span class="hljs-title">style</span>></span> <span class="hljs-tag"><<span class="hljs-title">style</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">'text/css'</span>></span><span class="css"> <span class="hljs-class">.date</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">font-weight</span>:<span class="hljs-value"> bold</span></span>; <span class="hljs-rule"><span class="hljs-attribute">padding</span>:<span class="hljs-value"> <span class="hljs-number">10</span>px</span></span>; <span class="hljs-rule"><span class="hljs-attribute">font-size</span>:<span class="hljs-value"> larger</span></span>; <span class="hljs-rule">}</span></span> </span><span class="hljs-tag"></<span class="hljs-title">style</span>></span> <span class="hljs-tag"></<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">body</span>></span> <span class="hljs-tag"><<span class="hljs-title">h1</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">'title'</span>></span>SiteMesh example site: Hello World (Dynamic)<span class="hljs-tag"></<span class="hljs-title">h1</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>This page demonstrates that dynamic content can be decorated in the same way as static content.<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>This is a simple JSP that shows the date and time on the server is now:<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">'date'</span>></span>Tue Aug 15 14:25:41 CST 2017<span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>Of course, with SiteMesh you are not limited to JSP. Because it's a Servlet Filter, both content and decorators can be generated by any technology in your ServletEngine, including: static files, JSP, Velocity, FreeMarker, JSF, MVC frameworks, JRuby.... you get the point.<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">'disclaimer'</span>></span>Site disclaimer. This is an example.<span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">'navigation'</span>></span> <span class="hljs-tag"><<span class="hljs-title">b</span>></span>Examples:<span class="hljs-tag"></<span class="hljs-title">b</span>></span> [<span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"./"</span>></span>Static example<span class="hljs-tag"></<span class="hljs-title">a</span>></span>] [<span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">"demo.jsp"</span>></span>Dynamic example<span class="hljs-tag"></<span class="hljs-title">a</span>></span>] <span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"></<span class="hljs-title">body</span>></span> <span class="hljs-tag"></<span class="hljs-title">html</span>></span></code></pre> <hr> <h3 id="7高级配置"><strong>7、高级配置</strong></h3> <h4 id="71xml形式配置"><strong>7.1、XML形式配置</strong></h4> <p>sitemesh3.xml文件如下:</p> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-pi"><?xml version="1.0" encoding="UTF-8"?></span> <span class="hljs-tag"><<span class="hljs-title">sitemesh</span>></span> <span class="hljs-comment"><!--默认情况下,sitemesh 只对 HTTP 响应头中 Content-Type 为 text/html 的类型进行拦截和装饰,我们可以添加更多的 mime 类型--></span> <span class="hljs-tag"><<span class="hljs-title">mime-type</span>></span>text/html<span class="hljs-tag"></<span class="hljs-title">mime-type</span>></span> <span class="hljs-tag"><<span class="hljs-title">mime-type</span>></span>application/vnd.wap.xhtml+xml<span class="hljs-tag"></<span class="hljs-title">mime-type</span>></span> <span class="hljs-tag"><<span class="hljs-title">mime-type</span>></span>application/xhtml+xml<span class="hljs-tag"></<span class="hljs-title">mime-type</span>></span> <span class="hljs-comment"><!-- 默认装饰器,当下面的路径都不匹配时,启用该装饰器进行装饰 --></span> <span class="hljs-tag"><<span class="hljs-title">mapping</span> <span class="hljs-attribute">decorator</span>=<span class="hljs-value">"/default-decorator.html"</span>/></span> <span class="hljs-comment"><!--不同的匹配路径采用不同的装饰页面--></span> <span class="hljs-tag"><<span class="hljs-title">mapping</span> <span class="hljs-attribute">path</span>=<span class="hljs-value">"/admin/*"</span> <span class="hljs-attribute">decorator</span>=<span class="hljs-value">"/another-decorator.html"</span>/></span> <span class="hljs-tag"><<span class="hljs-title">mapping</span> <span class="hljs-attribute">path</span>=<span class="hljs-value">"/*.special.jsp"</span> <span class="hljs-attribute">decorator</span>=<span class="hljs-value">"/special-decorator.html"</span>/></span> <span class="hljs-comment"><!--一个匹配路径同时采用不同的装饰页面--></span> <span class="hljs-tag"><<span class="hljs-title">mapping</span>></span> <span class="hljs-tag"><<span class="hljs-title">path</span>></span>/articles/*<span class="hljs-tag"></<span class="hljs-title">path</span>></span> <span class="hljs-tag"><<span class="hljs-title">decorator</span>></span>/decorators/article.html<span class="hljs-tag"></<span class="hljs-title">decorator</span>></span> <span class="hljs-tag"><<span class="hljs-title">decorator</span>></span>/decorators/two-page-layout.html<span class="hljs-tag"></<span class="hljs-title">decorator</span>></span> <span class="hljs-tag"><<span class="hljs-title">decorator</span>></span>/decorators/common.html<span class="hljs-tag"></<span class="hljs-title">decorator</span>></span> <span class="hljs-tag"></<span class="hljs-title">mapping</span>></span> <span class="hljs-comment"><!-- 满足该匹配路径将不被装饰 --></span> <span class="hljs-tag"><<span class="hljs-title">mapping</span> <span class="hljs-attribute">path</span>=<span class="hljs-value">"/login.htm"</span> <span class="hljs-attribute">exclue</span>=<span class="hljs-value">"true"</span> /></span> <span class="hljs-comment"><!-- 自定义标签 --></span> <span class="hljs-tag"><<span class="hljs-title">content-processor</span>></span> <span class="hljs-tag"><<span class="hljs-title">tag-rule-bundle</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.something.CssCompressingBundle"</span> /></span> <span class="hljs-tag"><<span class="hljs-title">tag-rule-bundle</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.something.LinkRewritingBundle"</span>/></span> <span class="hljs-tag"></<span class="hljs-title">content-processor</span>></span> <span class="hljs-tag"></<span class="hljs-title">sitemesh</span>></span></code></pre> <h4 id="72java形式配置"><strong>7.2、Java形式配置</strong></h4> <p>对应Java配置如下(同理还是在web.xml中引用自己的SiteMesh过滤器):</p> <pre class="prettyprint"><code class=" hljs java"><span class="hljs-keyword">package</span> com.wangxiaoan1234; <span class="hljs-keyword">import</span> org.sitemesh.builder.SiteMeshFilterBuilder; <span class="hljs-keyword">import</span> org.sitemesh.config.ConfigurableSiteMeshFilter; <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MySiteMeshFilter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">ConfigurableSiteMeshFilter</span> {</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">applyCustomConfiguration</span>(SiteMeshFilterBuilder builder) { <span class="hljs-comment">//默认装饰器,当下面的路径都不匹配时,启用该装饰器进行装饰</span> builder.addDecoratorPath(<span class="hljs-string">"/*"</span>, <span class="hljs-string">"/decorator.html"</span>) <span class="hljs-comment">//添加更多的 mime 类型</span> .setMimeTypes(<span class="hljs-string">"text / html"</span>,<span class="hljs-string">"application / xhtml + xml"</span>,<span class="hljs-string">"application / vnd.wap.xhtml + xml"</span>) <span class="hljs-comment">//不同匹配路径采用不同的装饰页面</span> .addDecoratorPath(<span class="hljs-string">"/admin/*"</span>, <span class="hljs-string">"/another-decorator.html"</span>) .addDecoratorPath(<span class="hljs-string">"/*.special.jsp"</span>, <span class="hljs-string">"/special-decorator.html"</span>) <span class="hljs-comment">//一个匹配路径同时采用不同的装饰页面</span> .addDecoratorPaths(<span class="hljs-string">"/articles/*"</span>, <span class="hljs-string">"/decorators/article.html"</span>, <span class="hljs-string">"/decoratos/two-page-layout.html"</span>, <span class="hljs-string">"/decorators/common.html"</span>) <span class="hljs-comment">//满足该匹配路径将不被装饰</span> .addExcludedPath(<span class="hljs-string">"/javadoc/*"</span>) <span class="hljs-comment">//添加自定义标签</span> .addTagRuleBundle(<span class="hljs-keyword">new</span> CssTagRuleBundle()); } }</code></pre> <p><strong>其中自定义标签类格式如下:</strong></p> <pre class="prettyprint"><code class=" hljs java"><span class="hljs-keyword">package</span> com.wangxiaoan1234; <span class="hljs-keyword">import</span> org.sitemesh.SiteMeshContext; <span class="hljs-keyword">import</span> org.sitemesh.content.ContentProperty; <span class="hljs-keyword">import</span> org.sitemesh.content.tagrules.TagRuleBundle; <span class="hljs-keyword">import</span> org.sitemesh.content.tagrules.html.ExportTagToContentRule; <span class="hljs-keyword">import</span> org.sitemesh.tagprocessor.State; <span class="hljs-javadoc">/** * 自定义标签 */</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CssTagRuleBundle</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">TagRuleBundle</span> {</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">install</span>(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) { defaultState.addRule(<span class="hljs-string">"my-css"</span>, <span class="hljs-keyword">new</span> ExportTagToContentRule(siteMeshContext, contentProperty.getChild(<span class="hljs-string">"my-css"</span>), <span class="hljs-keyword">false</span>)); defaultState.addRule(<span class="hljs-string">"my-footer"</span>, <span class="hljs-keyword">new</span> ExportTagToContentRule(siteMeshContext, contentProperty.getChild(<span class="hljs-string">"my-footer"</span>), <span class="hljs-keyword">false</span>)); } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">cleanUp</span>(State defaultState, ContentProperty contentProperty, SiteMeshContext siteMeshContext) { } } </code></pre> <p>在web.xml中还可以指定请求来源:</p> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">filter</span>></span> <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>sitemesh<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span> <span class="hljs-tag"><<span class="hljs-title">filter-class</span>></span>com.wangxiaoan1234.MySiteMeshFilter<span class="hljs-tag"></<span class="hljs-title">filter-class</span>></span> <span class="hljs-tag"></<span class="hljs-title">filter</span>></span> <span class="hljs-tag"><<span class="hljs-title">filter-mapping</span>></span> <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>sitemesh<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span> <span class="hljs-tag"><<span class="hljs-title">url-pattern</span>></span>/*<span class="hljs-tag"></<span class="hljs-title">url-pattern</span>></span> <span class="hljs-tag"><<span class="hljs-title">dispatcher</span>></span>FORWARD<span class="hljs-tag"></<span class="hljs-title">dispatcher</span>></span> <span class="hljs-tag"><<span class="hljs-title">dispatcher</span>></span>REQUEST<span class="hljs-tag"></<span class="hljs-title">dispatcher</span>></span> <span class="hljs-tag"></<span class="hljs-title">filter-mapping</span>></span></code></pre> <p><code><dispatcher></code>这个元素有四个可能的值:即<code>REQUEST</code>、<code>FORWARD</code>、<code>INCLUDE</code>和<code>ERROR</code>,这个元素使得filter将会作用于直接从客户端过来的request,通过forward过来的request,通过include过来的request和通过<code><error-page></code>过来的request。如果没有指定任何<code><dispatcher></code>元素,默认值是<code>REQUEST</code>。</p> <h3 id="自定义标签的使用"><strong>自定义标签的使用:</strong></h3> <h4 id="装饰页面decorator"><strong>装饰页面(decorator):</strong></h4> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">html</span>></span> <span class="hljs-tag"><<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">title</span>></span>SiteMesh example: <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span>=<span class="hljs-value">'title'</span>></span>Title goes here<span class="hljs-tag"></<span class="hljs-title">sitemesh:write</span>></span><span class="hljs-tag"></<span class="hljs-title">title</span>></span> <span class="hljs-tag"><<span class="hljs-title">style</span>></span><span class="css"> <<span class="hljs-tag">sitemesh</span><span class="hljs-pseudo">:write</span> <span class="hljs-tag">property</span>='<span class="hljs-tag">my-css</span>'/> </span><span class="hljs-tag"></<span class="hljs-title">style</span>></span> <span class="hljs-tag"><<span class="hljs-title">sitemesh:write</span> <span class="hljs-attribute">property</span>=<span class="hljs-value">'head'</span>/></span> <span class="hljs-tag"></<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">body</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>pppppppppppppppppppppp<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"><<span class="hljs-title">siteMesh:write</span> <span class="hljs-attribute">property</span>=<span class="hljs-value">'my-footer'</span>/></span> <span class="hljs-tag"></<span class="hljs-title">body</span>></span> <span class="hljs-tag"></<span class="hljs-title">html</span>></span></code></pre> <h4 id="内容页面content"><strong>内容页面(content):</strong></h4> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">html</span>></span> <span class="hljs-tag"><<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">title</span>></span>Hello World<span class="hljs-tag"></<span class="hljs-title">title</span>></span> <span class="hljs-tag"><<span class="hljs-title">my-css</span>></span> div p { color : red; } <span class="hljs-tag"></<span class="hljs-title">my-css</span>></span> <span class="hljs-tag"></<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">body</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>Well hello there, fine world.<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>And so concludes this <span class="hljs-tag"><<span class="hljs-title">b</span>></span>SiteMesh<span class="hljs-tag"></<span class="hljs-title">b</span>></span> example.<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"><<span class="hljs-title">my-footer</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">style</span>=<span class="hljs-value">"text-align: center"</span>></span> ©wangxiaoan1234.com <span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"></<span class="hljs-title">my-footer</span>></span> <span class="hljs-tag"></<span class="hljs-title">body</span>></span> <span class="hljs-tag"></<span class="hljs-title">html</span>></span></code></pre> <h4 id="效果"><strong>效果:</strong></h4> <p><a href="http://img.e-com-net.com/image/info8/a9cdb094c66c4e6e98e159d69cae720a.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/a9cdb094c66c4e6e98e159d69cae720a.jpg" alt="这里写图片描述" title="" width="650" height="43"></a></p> <p><strong>效果页面源码:</strong></p> <pre class="prettyprint"><code class=" hljs xml"><span class="hljs-tag"><<span class="hljs-title">html</span>></span> <span class="hljs-tag"><<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">title</span>></span>SiteMesh example: Hello World<span class="hljs-tag"></<span class="hljs-title">title</span>></span> <span class="hljs-tag"><<span class="hljs-title">style</span>></span><span class="css"> <span class="hljs-tag">div</span> <span class="hljs-tag">p</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">color </span>:<span class="hljs-value"> red</span></span>; <span class="hljs-rule">}</span></span> </span><span class="hljs-tag"></<span class="hljs-title">style</span>></span> <span class="hljs-tag"></<span class="hljs-title">head</span>></span> <span class="hljs-tag"><<span class="hljs-title">body</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span>></span> <span class="hljs-tag"><<span class="hljs-title">p</span>></span>pppppppppppppppppppppp<span class="hljs-tag"></<span class="hljs-title">p</span>></span> <span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">style</span>=<span class="hljs-value">"text-align: center"</span>></span> ©wangxiaoan1234.com <span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"></<span class="hljs-title">body</span>></span> <span class="hljs-tag"></<span class="hljs-title">html</span>></span></code></pre> <p>未完待续。。。</p> <p>参考:</p> <p>1、wiki</p> <p>2、罗韬</p> <p>3、开源中国社区</p> <p>4、百度百科</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1304981599061839872"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(JavaWeb,Java开发经验记录)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1903381656945881088.htm" title="Eclipse 快捷键" target="_blank">Eclipse 快捷键</a> <span class="text-muted">lsx202406</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Eclipse快捷键Eclipse是一款功能强大的集成开发环境(IDE),广泛应用于Java开发领域。熟练掌握Eclipse的快捷键可以大大提高开发效率。本文将详细介绍Eclipse中一些常用的快捷键,帮助开发者更快地熟悉和使用Eclipse。1.基础操作1.1打开文件Ctrl+O:快速打开文件Ctrl+Shift+O:查找类或文件1.2保存文件Ctrl+S:保存当前文件1.3运行程序Ctrl+F</div> </li> <li><a href="/article/1903350904480919552.htm" title="使用Java爬虫按关键字搜索1688商品" target="_blank">使用Java爬虫按关键字搜索1688商品</a> <span class="text-muted">小爬虫程序猿</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在电商领域,获取1688商品信息对于市场分析、选品上架、库存管理和价格策略制定等方面至关重要。1688作为国内领先的B2B电商平台,提供了丰富的商品数据。虽然1688开放平台提供了官方API来获取商品信息,但有时使用爬虫技术来抓取数据也是一种有效的手段。本文将介绍如何利用Java按关键字搜索1688商品,并提供详细的代码示例。一、准备工作1.Java开发环境确保你的Java开发环境已经安装了以下必</div> </li> <li><a href="/article/1903332738077880320.htm" title="初级:数组与字符串面试题深度剖析" target="_blank">初级:数组与字符串面试题深度剖析</a> <span class="text-muted">佩奇的技术笔记</span> <a class="tag" taget="_blank" href="/search/Java%E9%9D%A2%E8%AF%95%E5%B0%8F%E5%86%8C/1.htm">Java面试小册</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、引言在Java开发中,数组和字符串是最常用的数据结构之一。面试官通过相关问题考察候选人对数组和字符串的理解和运用能力,以及在实际开发中解决相关问题的经验。本文将深入剖析常见的数组与字符串面试题,结合实际开发场景,帮助读者全面掌握这些知识点。二、数组面试题:如何对数组进行初始化和遍历?答案:数组的初始化可以使用直接初始化、动态初始化等方式。遍历数组可以使用传统的for循环、增强型for循环(fo</div> </li> <li><a href="/article/1903308000370683904.htm" title="基于Spring Boot的分布式任务调度实践" target="_blank">基于Spring Boot的分布式任务调度实践</a> <span class="text-muted">Blossom.118</span> <a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F%E4%B8%8E%E9%AB%98%E6%80%A7%E8%83%BD%E8%AE%A1%E7%AE%97%E9%A2%86%E5%9F%9F/1.htm">分布式系统与高性能计算领域</a><a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在现代的分布式系统中,任务调度是一个常见的需求。无论是定时任务的执行,还是根据业务逻辑动态触发的任务,都需要一个高效、可靠的调度框架来管理。SpringBoot作为目前最流行的Java开发框架之一,提供了强大的依赖管理和快速开发的能力,结合分布式任务调度框架,可以极大地提升开发效率和系统的可维护性。本文将介绍如何基于SpringBoot实现一个分布式任务调度系统,主要涉及Elastic-Job框架</div> </li> <li><a href="/article/1903284420899565568.htm" title="【JavaWeb学习Day25】" target="_blank">【JavaWeb学习Day25】</a> <span class="text-muted">quo-te</span> <a class="tag" taget="_blank" href="/search/JavaWeb/1.htm">JavaWeb</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/%E9%BB%91%E9%A9%AC/1.htm">黑马</a> <div>Web前端实战ElementPlus什么是ElementPlusElementPlus:是饿了么团队研发的,基于Vue3,面向设计师和开发者的组件库。组件:组成网页的部件,例如超链接、按钮、图片、表格、表单、分页条等等。官网:一个Vue3UI框架|ElementPlus快速入门准备工作:1.创建vue项目2.参照官方文档,安装ElementPlus组件库(在当前工程的目录下):npminstall</div> </li> <li><a href="/article/1903275717630685184.htm" title="javaweb学习Day10" target="_blank">javaweb学习Day10</a> <span class="text-muted">乐一粒学编程</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>来源:尚硅谷2022版javaweb今日内容:1.日期和字符串之间的格式化//String->java.util.DateStringdateStr1="2021-12-3012:59:59";SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");try{Datedate1=sdf.parse(dateStr1);}catch(</div> </li> <li><a href="/article/1903267767168069632.htm" title="Java复习路线" target="_blank">Java复习路线</a> <span class="text-muted">Code good g</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E5%87%86%E5%A4%87/1.htm">面试准备</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>Java复习1、Java基础2、Java多线程3、Javaweb的复习4、MySql复习数据库常用的代码:思维导图:5、计算机组成原理6、网络编程7、Java注解和反射8、计算机网络9、html/css/js10、ssm11、spring12、springmvc13、springboot14、vue15、springcloud16、jvm17、Juc18、mybatis-plus学习19、git2</div> </li> <li><a href="/article/1903217669436403712.htm" title="Tomcat从入门到精通:全方位深度解析与实战教程" target="_blank">Tomcat从入门到精通:全方位深度解析与实战教程</a> <span class="text-muted">墨瑾轩</span> <a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6%E5%AD%A6Java%E3%80%90%E4%B8%80%E3%80%91/1.htm">一起学学Java【一】</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、Tomcat入门1.Tomcat简介ApacheTomcat,简称Tomcat,是一个开源的轻量级应用服务器,专为运行JavaServlet和JavaServerPages(JSP)技术设计。它是JavaWeb开发中最常用的Servlet容器之一,遵循JavaServlet和JavaServerPages规范,为开发者提供了一个稳定的、易于使用的部署环境。2.安装与启动安装下载最新版Tomca</div> </li> <li><a href="/article/1903111328269135872.htm" title="网络编程、URI和URL的区别、TCP/IP协议、IP和端口、URLConnection" target="_blank">网络编程、URI和URL的区别、TCP/IP协议、IP和端口、URLConnection</a> <span class="text-muted">述雾学java</span> <a class="tag" taget="_blank" href="/search/Java%E6%A0%B8%E5%BF%83%E5%9F%BA%E7%A1%80/1.htm">Java核心基础</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/1.htm">网络编程</a> <div>DAY12.1Java核心基础网络编程在互联网时代,网络在生活中处处可见,javaWeb占据了很大一部分那如何实现javaWeb编程呢?Web编程就是运行在同一个网络下面的终端,使得它们之间可以进行数据传输计算机网络基本知识计算机网络是通过硬件设施,传输媒介把不同物理地址上的计算机网络进行连接,形成一个资源共享和数据传输的网络系统两台终端进行连接需要遵守规定的网络协议语法:数据信息的结构语义:描述</div> </li> <li><a href="/article/1903042214976614400.htm" title="【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折" target="_blank">【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折</a> <span class="text-muted">Foyo Designer</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/restful/1.htm">restful</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/MVC/1.htm">MVC</a><a class="tag" taget="_blank" href="/search/Async/1.htm">Async</a><a class="tag" taget="_blank" href="/search/CrossOrigin/1.htm">CrossOrigin</a> <div>点击此处查看合集https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link一、开篇整活儿咱今儿个唠唠Spr</div> </li> <li><a href="/article/1903033388814626816.htm" title="基于ssm的林木生长管理系统" target="_blank">基于ssm的林木生长管理系统</a> <span class="text-muted">AI天才研究院</span> <a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1/1.htm">R1</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AEAI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大数据AI人工智能大模型</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">AI大模型企业级应用开发实战</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97/1.htm">计算</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E7%A7%91%E5%AD%A6/1.htm">计算科学</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E8%AE%A1%E7%AE%97/1.htm">神经计算</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%9E%8B%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大型语言模型</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/RPA/1.htm">RPA</a> <div>1.背景介绍在我们的日常生活中,森林资源的管理和保护是一个重要的环保议题。为了有效地管理森林资源,许多科研机构和政府部门正在寻找更高效的技术手段。这就是我们今天要讨论的主题:基于SSM的林木生长管理系统。SSM是SpringMVC、Spring和MyBatis三个开源框架的缩写。这三个框架在Java开发中被广泛使用,因为它们可以提供一种简单、高效的方式来开发和维护复杂的Web应用程序。在这篇文章中</div> </li> <li><a href="/article/1902964012576993280.htm" title="Java Web开发技术解析:从基础到实践的全栈指南" target="_blank">Java Web开发技术解析:从基础到实践的全栈指南</a> <span class="text-muted">以恒1</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>JavaWeb开发技术解析:从基础到实践的全栈指南在互联网技术演进中,JavaWeb凭借其跨平台特性、成熟的生态系统和强大的企业级服务能力,成为构建动态Web应用的核心技术栈。本文从技术组成、开发工具、实战应用三个维度,全面解析JavaWeb的完整技术体系,并结合最新行业实践探讨其演进方向。一、JavaWeb的核心技术组成JavaWeb开发以Servlet和JSP为基石,通过分层架构实现动态网页生</div> </li> <li><a href="/article/1902949002144444416.htm" title="[解决] PDF转图片,中文乱码或显示方框的解决方案" target="_blank">[解决] PDF转图片,中文乱码或显示方框的解决方案</a> <span class="text-muted">DazedMen</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98/1.htm">开发遇到的问题</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/pdf%E8%BD%AC%E5%9B%BE%E7%89%87/1.htm">pdf转图片</a> <div>在Java开发中,将PDF文件转换为图片是一项常见的需求,但过程中可能会遇到中文乱码或显示方框的问题。本文将深入探讨这一问题,并提供详细的解决方案,帮助开发者顺利地完成PDF到图片的转换。一、问题现象在使用Java库(如ApachePDFBox)将PDF转换为图片时,如果PDF文件中包含中文字符,转换后的图片中可能会出现中文乱码或显示为方框的情况。控制台日志可能会显示类似以下信息:noglyphf</div> </li> <li><a href="/article/1902921869695184896.htm" title="没有好的学历,Java开发未来的路应该怎么走?" target="_blank">没有好的学历,Java开发未来的路应该怎么走?</a> <span class="text-muted">全干程序员demo</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E7%83%AD%E6%96%87/1.htm">技术热文</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>没有好的学历,Java开发未来的路应该怎么走?在当今数字化时代,技术发展日新月异,大模型应用、鸿蒙系统等新兴技术领域正在蓬勃发展,为Java开发者带来了新的机遇和挑战。即使没有高学历,Java开发者依然可以通过以下路径在这些新兴领域找到自己的发展方向,实现职业突破。一、拥抱新兴技术,拓宽技术边界(一)大模型应用:从开发到优化大模型技术正在重塑软件开发的各个环节。对于Java开发者来说,可以从以下几</div> </li> <li><a href="/article/1902815052042399744.htm" title="JVM OOM问题如何排查和解决" target="_blank">JVM OOM问题如何排查和解决</a> <span class="text-muted">昔我往昔</span> <a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a> <div>在Java开发中,JVMOOM(OutOfMemoryError)问题通常是指程序运行时,JVM无法为对象分配足够的内存空间,导致发生内存溢出的错误。这个问题往往和内存的配置、内存泄漏、或者资源过度使用等因素有关。1.OOM错误类型JVM中的OOM错误主要包括以下几种类型:java.lang.OutOfMemoryError:Javaheapspace:堆内存不足。堆内存用于存储对象,发生此错误时</div> </li> <li><a href="/article/1902755270665236480.htm" title="Maven Deploy Plugin如何使用?" target="_blank">Maven Deploy Plugin如何使用?</a> <span class="text-muted">上官美丽</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>在Java开发中,Maven是一个非常重要的构建工具。它不仅可以管理项目的依赖关系,还能帮助我们打包和发布项目。在Maven中,deploy插件是一个很实用的功能,它可以将构建好的项目发布到远程仓库。今天,就来聊聊如何使用MavenDeployPlugin,帮助你更好地掌握这个工具!什么是MavenDeployPlugin?MavenDeployPlugin是Maven的一部分,主要用于将构建好的</div> </li> <li><a href="/article/1902751487038124032.htm" title="Spring Boot 3 新特性实战:从理论到实践" target="_blank">Spring Boot 3 新特性实战:从理论到实践</a> <span class="text-muted">潘多编程</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>引言SpringBoot自发布以来,凭借其简洁的配置和强大的功能,迅速成为Java开发者的首选框架。随着SpringBoot3的发布,开发者们迎来了更多令人兴奋的新特性。本文将深入探讨SpringBoot3的新特性,并通过实战示例展示如何在实际项目中应用这些新功能。1.支持Java17SpringBoot3全面支持Java17,这是Java生态系统中的一个重要里程碑。Java17带来了许多新特性,</div> </li> <li><a href="/article/1902750096563433472.htm" title="【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring MVC 的核心组件:DispatcherServlet 的工作原理" target="_blank">【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring MVC 的核心组件:DispatcherServlet 的工作原理</a> <span class="text-muted">Foyo Designer</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/HandlerMapping/1.htm">HandlerMapping</a><a class="tag" taget="_blank" href="/search/ViewResolver/1.htm">ViewResolver</a> <div>点击此处查看合集https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link一、DispatcherServ</div> </li> <li><a href="/article/1902699899061858304.htm" title="JDK8 Stream 数据流效率分析,Java开发你需要了解的那些事" target="_blank">JDK8 Stream 数据流效率分析,Java开发你需要了解的那些事</a> <span class="text-muted">气质大叔</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>此外还有一系列特化流,如IntStream,LongStream,DoubleStream等),Java8引入的的Stream主要用于取代部分Collection的操作,每个流代表一个值序列,流提供一系列常用的聚集操作,可以便捷的在它上面进行各种运算。集合类库也提供了便捷的方式使我们可以以操作流的方式使用集合、数组以及其它数据结构;作为阅读福利,小编也整理了一些Java学习笔记(包含面试真题+脑图</div> </li> <li><a href="/article/1902657776501452800.htm" title="初级面试题:数据类型面试题大揭秘" target="_blank">初级面试题:数据类型面试题大揭秘</a> <span class="text-muted">佩奇的技术笔记</span> <a class="tag" taget="_blank" href="/search/Java%E9%9D%A2%E8%AF%95%E5%B0%8F%E5%86%8C/1.htm">Java面试小册</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、引言在Java开发的面试中,数据类型相关的问题经常出现。面试官通过这些问题考察候选人对Java基础的理解程度以及在实际开发中对数据类型的运用能力。本文将深入剖析常见的数据类型面试题,帮助读者全面掌握这些知识点。二、基本数据类型与引用数据类型面试题:int和Integer的区别是什么?答案:int是基本数据类型,占用4个字节内存,直接存储数值;Integer是int对应的引用数据类型,即包装类,</div> </li> <li><a href="/article/1902653238423908352.htm" title="Java WebSocket与项目页面(通常是HTML + JavaScript)之间建立连接并传输数据" target="_blank">Java WebSocket与项目页面(通常是HTML + JavaScript)之间建立连接并传输数据</a> <span class="text-muted">hh_fine</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a> <div>JavaWebSocket与项目页面(通常是HTML+JavaScript)之间建立连接并传输数据1.创建JavaWebSocket服务器:使用JavaWebSocketAPI创建一个WebSocket服务器端点。2.在HTML页面中使用JavaScript连接WebSocket:通过JavaScript的WebSocketAPI与JavaWebSocket服务器建立连接。3.双向数据传输:实现服</div> </li> <li><a href="/article/1902632443123396608.htm" title="【知识图谱】开发经验记录:CORS(跨域资源共享)问题" target="_blank">【知识图谱】开发经验记录:CORS(跨域资源共享)问题</a> <span class="text-muted">niuuuu16</span> <a class="tag" taget="_blank" href="/search/%E5%9F%BA%E4%BA%8E%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1%E7%9A%84%E6%99%BA%E8%83%BD%E5%8A%A9%E6%95%99%E7%B3%BB%E7%BB%9F/1.htm">基于知识图谱的智能助教系统</a><a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1/1.htm">知识图谱</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a> <div>尝试前后端交互时出现了这样的报错:AccesstoXMLHttpRequestat'http://localhost:8080/api/courses'fromorigin'http://localhost:8081'hasbeenblockedbyCORSpolicy:No'Access-Control-Allow-Origin'headerispresentontherequestedreso</div> </li> <li><a href="/article/1902361769062494208.htm" title="Java开发者必看!零成本集成DeepSeek-R1打造AI办公神器,源码级实战教程让你效率翻倍!" target="_blank">Java开发者必看!零成本集成DeepSeek-R1打造AI办公神器,源码级实战教程让你效率翻倍!</a> <span class="text-muted">Leaton Lee</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录开篇互动一、为什么是DeepSeek-R1?它凭什么碾压传统AI工具?二、手把手部署DeepSeek-R1本地环境(附避坑指南)步骤1:Docker一键部署步骤2:下载模型步骤3:验证部署三、Java整合DeepSeek-R1:从理论到实战1.添加HTTP客户端依赖(以SpringBoot为例)2.封装AI工具类(核心代码解析)3.实战场景1:自动生成周报(附Prompt技巧)四、高阶玩法:A</div> </li> <li><a href="/article/1902271108141346816.htm" title="Java8中如何使用Stream对列表进行去重?" target="_blank">Java8中如何使用Stream对列表进行去重?</a> <span class="text-muted">上官美丽</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>在现代Java开发中,Java8引入的StreamAPI给我们带来了许多便利,尤其是在处理集合数据时。去重是数据处理中一个常见的需求,今天我们就来聊聊如何使用Stream对列表进行去重。这个过程其实并不复杂,只要掌握一些基本的操作,就能轻松实现。首先,大家可能会问,什么是Stream?Stream是一种对集合的抽象,可以让我们以声明性方式处理集合数据,比如过滤、映射、归约等。Stream的一个重要</div> </li> <li><a href="/article/1902214869525000192.htm" title="MyBatis-Plus整合SpringBoot及使用" target="_blank">MyBatis-Plus整合SpringBoot及使用</a> <span class="text-muted">kkk1622245</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>MyBatis-Plus是一个为简化开发而生的MyBatis增强工具,在Java开发领域广受欢迎。它继承了MyBatis的所有特性,并且通过引入强大的功能增强,极大减少了开发者的工作量。对于使用SpringBoot开发的项目,整合MyBatis-Plus能够使数据访问层的代码更加简洁,增强开发效率。在本文中,我们将详细探讨如何在SpringBoot项目中整合MyBatis-Plus并简要介绍其使用</div> </li> <li><a href="/article/1902081387016548352.htm" title="如何在Spring Boot中配置和使用MyBatis-Plus" target="_blank">如何在Spring Boot中配置和使用MyBatis-Plus</a> <span class="text-muted">字节王德发</span> <a class="tag" taget="_blank" href="/search/java%E6%8A%80%E6%9C%AF/1.htm">java技术</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>在当今的Java开发中,SpringBoot已经成为了一个非常流行的框架,而MyBatis-Plus则是一个强大的ORM框架,为开发人员提供了更简便的数据库操作方式。很多开发者都在使用SpringBoot和MyBatis-Plus的组合来快速构建高效的应用。今天就来聊聊如何在SpringBoot项目中配置和使用MyBatis-Plus,帮助你更好地理解这两者的结合。创建SpringBoot项目首先</div> </li> <li><a href="/article/1902028049453477888.htm" title="收入突破 5 万,从大专生到大模型开发-第一篇" target="_blank">收入突破 5 万,从大专生到大模型开发-第一篇</a> <span class="text-muted">智码工坊</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a> <div>第一篇:从Java流水线到AI浪潮——我的转型契机2023年12月,被第七家公司劝退。蜷缩在杭州15平米的出租屋里,银行卡余额仅剩几个月的工资——这是我作为Java开发‘流水线工人’的第三年。但大半年后,我手握3个大模型Offer入职AI公司,薪资涨幅30%。今天想和你分享:普通人如何用AI破局,打破职场死局。大家好,我是明聪,98年逆袭的大模型研发工程师,前Java转型幸存者,湖北荆州人,毕业武</div> </li> <li><a href="/article/1902026538262523904.htm" title="【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 的起步依赖:快速构建 JavaWeb 项目" target="_blank">【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 的起步依赖:快速构建 JavaWeb 项目</a> <span class="text-muted">Foyo Designer</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/Data/1.htm">Data</a><a class="tag" taget="_blank" href="/search/JPA/1.htm">JPA</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a> <div>点击此处查看合集https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link一、起步依赖:SpringBoo</div> </li> <li><a href="/article/1902012047474880512.htm" title="Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手" target="_blank">Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>第二届开放原子大赛SpringAIAlibaba应用框架挑战赛决赛于2月23日在北京圆满落幕。SpringAIAlibaba是一款Java语言实现的AI应用开发框架,用于加速和简化Java开发者的AI应用开发,定义Spring框架下的AI应用开发模式。本项目基于Pivotal公司开源的SpringAI开源项目构建,突出SpringAI与阿里云开源/商业生态的集成与最佳实践,集成范围涉及百炼、云原生</div> </li> <li><a href="/article/1901917105561858048.htm" title="Java Web开发核心内容全解析(上)" target="_blank">Java Web开发核心内容全解析(上)</a> <span class="text-muted">风铃儿~</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>一、JavaWeb概述JavaWeb是指使用Java技术来解决相关web互联网领域的技术总和。在当今数字化时代,JavaWeb在构建企业级应用、电子商务平台、社交网络等方面发挥着至关重要的作用。(一)JavaWeb的体系结构JavaWeb应用的体系结构主要分为客户端层、表示层、业务逻辑层和数据访问层。1.客户端层-这是用户与Web应用交互的最前端。主要包括用户浏览器,它可以接收并显示从服务器端发送</div> </li> <li><a href="/article/122.htm" title="java数字签名三种方式" target="_blank">java数字签名三种方式</a> <span class="text-muted">知了ing</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a> <div>以下3钟数字签名都是基于jdk7的 1,RSA String password="test"; // 1.初始化密钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(51</div> </li> <li><a href="/article/249.htm" title="Hibernate学习笔记" target="_blank">Hibernate学习笔记</a> <span class="text-muted">caoyong</span> <a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div>1>、Hibernate是数据访问层框架,是一个ORM(Object Relation Mapping)框架,作者为:Gavin King 2>、搭建Hibernate的开发环境      a>、添加jar包:      aa>、hibernatte开发包中/lib/required/所</div> </li> <li><a href="/article/376.htm" title="设计模式之装饰器模式Decorator(结构型)" target="_blank">设计模式之装饰器模式Decorator(结构型)</a> <span class="text-muted">漂泊一剑客</span> <a class="tag" taget="_blank" href="/search/Decorator/1.htm">Decorator</a> <div>1. 概述        若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性。如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上。       </div> </li> <li><a href="/article/503.htm" title="读取磁盘文件txt,并输入String" target="_blank">读取磁盘文件txt,并输入String</a> <span class="text-muted">一炮送你回车库</span> <a class="tag" taget="_blank" href="/search/String/1.htm">String</a> <div>public static void main(String[] args) throws IOException {    String fileContent = readFileContent("d:/aaa.txt");    System.out.println(fileContent);    </div> </li> <li><a href="/article/630.htm" title="js三级联动下拉框" target="_blank">js三级联动下拉框</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/%E4%B8%89%E7%BA%A7%E8%81%94%E5%8A%A8/1.htm">三级联动</a> <div> //三级联动 省/直辖市<select id="province"></select> 市/省直辖<select id="city"></select> 县/区 <select id="area"></select> </div> </li> <li><a href="/article/757.htm" title="erlang之parse_transform编译选项的应用" target="_blank">erlang之parse_transform编译选项的应用</a> <span class="text-muted">616050468</span> <a class="tag" taget="_blank" href="/search/parse_transform/1.htm">parse_transform</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">游戏服务器</a><a class="tag" taget="_blank" href="/search/%E5%B1%9E%E6%80%A7%E5%90%8C%E6%AD%A5/1.htm">属性同步</a><a class="tag" taget="_blank" href="/search/abstract_code/1.htm">abstract_code</a> <div>         最近使用erlang重构了游戏服务器的所有代码,之前看过C++/lua写的服务器引擎代码,引擎实现了玩家属性自动同步给前端和增量更新玩家数据到数据库的功能,这也是现在很多游戏服务器的优化方向,在引擎层面去解决数据同步和数据持久化,数据发生变化了业务层不需要关心怎么去同步给前端。由于游戏过程中玩家每个业务中玩家数据更改的量其实是很少</div> </li> <li><a href="/article/884.htm" title="JAVA JSON的解析" target="_blank">JAVA JSON的解析</a> <span class="text-muted">darkranger</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> // { // “Total”:“条数”, // Code: 1, // // “PaymentItems”:[ // { // “PaymentItemID”:”支款单ID”, // “PaymentCode”:”支款单编号”, // “PaymentTime”:”支款日期”, // ”ContractNo”:”合同号”, // </div> </li> <li><a href="/article/1011.htm" title="POJ-1273-Drainage Ditches" target="_blank">POJ-1273-Drainage Ditches</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/ACM_POJ/1.htm">ACM_POJ</a> <div>POJ-1273-Drainage Ditches http://poj.org/problem?id=1273 基本的最大流,按LRJ的白书写的 #include<iostream> #include<cstring> #include<queue> using namespace std; #define INF 0x7fffffff int ma</div> </li> <li><a href="/article/1138.htm" title="工作流Activiti5表的命名及含义" target="_blank">工作流Activiti5表的命名及含义</a> <span class="text-muted">atongyeye</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a><a class="tag" taget="_blank" href="/search/Activiti/1.htm">Activiti</a> <div>activiti5 - http://activiti.org/designer/update在线插件安装 activiti5一共23张表 Activiti的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。 A</div> </li> <li><a href="/article/1265.htm" title="android的广播机制和广播的简单使用" target="_blank">android的广播机制和广播的简单使用</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E5%B9%BF%E6%92%AD%E6%9C%BA%E5%88%B6/1.htm">广播机制</a><a class="tag" taget="_blank" href="/search/%E5%B9%BF%E6%92%AD%E7%9A%84%E6%B3%A8%E5%86%8C/1.htm">广播的注册</a> <div>      Android广播机制简介 在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应</div> </li> <li><a href="/article/1392.htm" title="Spring事务传播行为详解" target="_blank">Spring事务传播行为详解</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1%E4%BC%A0%E6%92%AD%E8%A1%8C%E4%B8%BA/1.htm">事务传播行为</a> <div>        在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。         Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这</div> </li> <li><a href="/article/1519.htm" title="eidtplus operate" target="_blank">eidtplus operate</a> <span class="text-muted">征客丶</span> <a class="tag" taget="_blank" href="/search/eidtplus/1.htm">eidtplus</a> <div>开启列模式: Alt+C 鼠标选择   OR   Alt+鼠标左键拖动 列模式替换或复制内容(多行): 右键-->格式-->填充所选内容-->选择相应操作 OR Ctrl+Shift+V(复制多行数据,必须行数一致) -------------------------------------------------------</div> </li> <li><a href="/article/1646.htm" title="【Kafka一】Kafka入门" target="_blank">【Kafka一】Kafka入门</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a> <div>这篇文章来自Spark集成Kafka(http://bit1129.iteye.com/blog/2174765),这里把它单独取出来,作为Kafka的入门吧   下载Kafka http://mirror.bit.edu.cn/apache/kafka/0.8.1.1/kafka_2.10-0.8.1.1.tgz 2.10表示Scala的版本,而0.8.1.1表示Kafka</div> </li> <li><a href="/article/1773.htm" title="Spring 事务实现机制" target="_blank">Spring 事务实现机制</a> <span class="text-muted">BlueSkator</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%90%86/1.htm">代理</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1/1.htm">事务</a> <div>Spring是以代理的方式实现对事务的管理。我们在Action中所使用的Service对象,其实是代理对象的实例,并不是我们所写的Service对象实例。既然是两个不同的对象,那为什么我们在Action中可以象使用Service对象一样的使用代理对象呢?为了说明问题,假设有个Service类叫AService,它的Spring事务代理类为AProxyService,AService实现了一个接口 </div> </li> <li><a href="/article/1900.htm" title="bootstrap源码学习与示例:bootstrap-dropdown(转帖)" target="_blank">bootstrap源码学习与示例:bootstrap-dropdown(转帖)</a> <span class="text-muted">BreakingBad</span> <a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/dropdown/1.htm">dropdown</a> <div>bootstrap-dropdown组件是个烂东西,我读后的整体感觉。 一个下拉开菜单的设计: <ul class="nav pull-right"> <li id="fat-menu" class="dropdown"> </div> </li> <li><a href="/article/2027.htm" title="读《研磨设计模式》-代码笔记-中介者模式-Mediator" target="_blank">读《研磨设计模式》-代码笔记-中介者模式-Mediator</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ /* * 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。 * 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 * * 在我看来,Mediator模式是把多个对象(</div> </li> <li><a href="/article/2154.htm" title="常用代码记录" target="_blank">常用代码记录</a> <span class="text-muted">chenjunt3</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/Excel/1.htm">Excel</a><a class="tag" taget="_blank" href="/search/J%23/1.htm">J#</a> <div>  1、单据设置某行或某字段不能修改 //i是行号,"cash"是字段名称 getBillCardPanelWrapper().getBillCardPanel().getBillModel().setCellEditable(i, "cash", false); //取得单据表体所有项用以上语句做循环就能设置整行了 getBillC</div> </li> <li><a href="/article/2281.htm" title="搜索引擎与工作流引擎" target="_blank">搜索引擎与工作流引擎</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8/1.htm">网络应用</a> <div>      最近在公司做和搜索有关的工作,(只是简单的应用开源工具集成到自己的产品中)工作流系统的进一步设计暂时放在一边了,偶然看到谷歌的研究员吴军写的数学之美系列中的搜索引擎与图论这篇文章中的介绍,我发现这样一个关系(仅仅是猜想)   -----搜索引擎和流程引擎的基础--都是图论,至少像在我在JWFD中引擎算法中用到的是自定义的广度优先</div> </li> <li><a href="/article/2408.htm" title="oracle Health Monitor" target="_blank">oracle Health Monitor</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/Health+Monitor/1.htm">Health Monitor</a> <div>About Health Monitor Beginning with Release 11g, Oracle Database includes a framework called Health Monitor for running diagnostic checks on the database. About Health Monitor Checks Health M</div> </li> <li><a href="/article/2535.htm" title="JSON字符串转换为对象" target="_blank">JSON字符串转换为对象</a> <span class="text-muted">dieslrae</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a> <div>    作为前言,首先是要吐槽一下公司的脑残编译部署方式,web和core分开部署本来没什么问题,但是这丫居然不把json的包作为基础包而作为web的包,导致了core端不能使用,而且我们的core是可以当web来用的(不要在意这些细节),所以在core中处理json串就是个问题.没办法,跟编译那帮人也扯不清楚,只有自己写json的解析了.   </div> </li> <li><a href="/article/2662.htm" title="C语言学习八结构体,综合应用,学生管理系统" target="_blank">C语言学习八结构体,综合应用,学生管理系统</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a> <div>实现功能的代码: # include <stdio.h> # include <malloc.h> struct Student { int age; float score; char name[100]; }; int main(void) { int len; struct Student * pArr; int i,</div> </li> <li><a href="/article/2789.htm" title="vagrant学习笔记" target="_blank">vagrant学习笔记</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/vagrant/1.htm">vagrant</a> <div>想了解多主机是如何定义和使用的, 所以又学习了一遍vagrant   1. vagrant virtualbox 下载安装 https://www.vagrantup.com/downloads.html https://www.virtualbox.org/wiki/Downloads   查看安装在命令行输入vagrant     2.</div> </li> <li><a href="/article/2916.htm" title="14.性能优化-优化-软件配置优化" target="_blank">14.性能优化-优化-软件配置优化</a> <span class="text-muted">frank1234</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E9%85%8D%E7%BD%AE/1.htm">软件配置</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a> <div>1.Tomcat线程池 修改tomcat的server.xml文件: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="1200" m</div> </li> <li><a href="/article/3043.htm" title="一个不错的shell 脚本教程 入门级" target="_blank">一个不错的shell 脚本教程 入门级</a> <span class="text-muted">HarborChung</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a> <div>一个不错的shell 脚本教程 入门级 建立一个脚本   Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在 bash的大姐,bourne shell中运行)。   如同其他语言一样</div> </li> <li><a href="/article/3170.htm" title="Spring4新特性——核心容器的其他改进" target="_blank">Spring4新特性——核心容器的其他改进</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/1.htm">动态代理</a><a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a><a class="tag" taget="_blank" href="/search/%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5/1.htm">依赖注入</a> <div>Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC  Spring4新特性——Groovy Bean定义DSL Spring4新特性——更好的Java泛型操作API  Spring4新</div> </li> <li><a href="/article/3297.htm" title="Linux设置tomcat开机启动" target="_blank">Linux设置tomcat开机启动</a> <span class="text-muted">liuxingguome</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8/1.htm">开机自启动</a> <div>执行命令sudo gedit /etc/init.d/tomcat6 然后把以下英文部分复制过去。(注意第一句#!/bin/sh如果不写,就不是一个shell文件。然后将对应的jdk和tomcat换成你自己的目录就行了。 #!/bin/bash # # /etc/rc.d/init.d/tomcat # init script for tomcat precesses</div> </li> <li><a href="/article/3424.htm" title="第13章 Ajax进阶(下)" target="_blank">第13章 Ajax进阶(下)</a> <span class="text-muted">onestopweb</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a> <div>index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/</div> </li> <li><a href="/article/3551.htm" title="Troubleshooting Crystal Reports off BW" target="_blank">Troubleshooting Crystal Reports off BW</a> <span class="text-muted">blueoxygen</span> <a class="tag" taget="_blank" href="/search/BO/1.htm">BO</a> <div>http://wiki.sdn.sap.com/wiki/display/BOBJ/Troubleshooting+Crystal+Reports+off+BW#TroubleshootingCrystalReportsoffBW-TracingBOE   Quite useful, especially this part: SAP BW connectivity For t</div> </li> <li><a href="/article/3678.htm" title="Java开发熟手该当心的11个错误" target="_blank">Java开发熟手该当心的11个错误</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a> <div>#1、不在属性文件或XML文件中外化配置属性。比如,没有把批处理使用的线程数设置成可在属性文件中配置。你的批处理程序无论在DEV环境中,还是UAT(用户验收 测试)环境中,都可以顺畅无阻地运行,但是一旦部署在PROD 上,把它作为多线程程序处理更大的数据集时,就会抛出IOException,原因可能是JDBC驱动版本不同,也可能是#2中讨论的问题。如果线程数目 可以在属性文件中配置,那么使它成为</div> </li> <li><a href="/article/3805.htm" title="正则表达式大全" target="_blank">正则表达式大全</a> <span class="text-muted">yang852220741</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a> <div>今天向大家分享正则表达式大全,它可以大提高你的工作效率 正则表达式也可以被当作是一门语言,当你学习一门新的编程语言的时候,他们是一个小的子语言。初看时觉得它没有任何的意义,但是很多时候,你不得不阅读一些教程,或文章来理解这些简单的描述模式。 一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>