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/1886971666802733056.htm" title="MongoMongo简介" target="_blank">MongoMongo简介</a> <span class="text-muted">lfsf802</span> <a class="tag" taget="_blank" href="/search/J2EE/1.htm">J2EE</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6%2F%E5%B7%A5%E5%85%B7/1.htm">框架/工具</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>简介MongMongo是一个用Java写的ODM框架,使得对MongoDB的操作更加便捷。MongoMongo努力为Java开发者提供类似于ActiveORM或者Hibernate的操作API,并且保留了MongoDB的schemaless,document-based设计,动态查询,原子修改操作等特性。当然你可以很方便的绕开MongoMongo而使用JavaDriver原生提供的功能。示例代码p</div> </li> <li><a href="/article/1886968763576807424.htm" title="Java 编程中的 9 个性能提升技巧" target="_blank">Java 编程中的 9 个性能提升技巧</a> <span class="text-muted">eqa11</span> <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编程中的9个性能提升技巧一、引言二、优化内存使用1、合理使用数据结构2、优化字符串操作三、提升代码执行效率3、优化循环结构4、缓存计算结果四、多线程与并发优化5、使用线程池6、锁优化五、JVM调优7、调整堆内存大小8、选择合适的垃圾回收器六、I/O操作优化9、使用缓冲流四、使用示例五、总结Java编程中的9个性能提升技巧一、引言在Java开发中,性能优化是提升用户体验和系统效率的关</div> </li> <li><a href="/article/1886962081505275904.htm" title="Maven在项目开发中到底起着什么作用?小白参考!" target="_blank">Maven在项目开发中到底起着什么作用?小白参考!</a> <span class="text-muted">码场老菜鸟</span> <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>Maven是一个非常流行的工具,主要用来帮助Java开发者管理项目的构建、依赖、测试和发布。对于初学者来说,它的作用可以理解为以下几点:项目构建管理:Maven通过定义项目的pom.xml文件来管理项目的构建过程。它会根据配置的插件来执行编译、打包、测试、部署等任务。例如,通过mvncleaninstall命令,Maven会自动清理项目、编译源代码、运行单元测试,并将生成的文件打包成一个可执行的J</div> </li> <li><a href="/article/1886839672768884736.htm" title="Java基础/进阶/电商系统实战系列文章汇总" target="_blank">Java基础/进阶/电商系统实战系列文章汇总</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/%E9%9B%B6%E5%9F%BA%E7%A1%80/1.htm">零基础</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%88%98/1.htm">实战</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%95%86/1.htm">电商</a> <div>目录前言✨专栏介绍✨专栏特色✨适合人群为什么选择Java编程语言谁适合学习这么课程✨新手小白✨Java开发人员如何学习这门课程✨本专栏学习路线6部分课程内容P1小白初识JAVAP2基础知识P3进阶知识P4项目实战如何选择实战项目✨关于作者✨前沿技术✨商城实战系统演示前言首先,感谢大家对本专栏的持续认可!本文是《Java基础+进阶+电商系统实战》专栏导航页。(点击链接,跳转到专栏页,欢迎订阅,持续更</div> </li> <li><a href="/article/1886810417494290432.htm" title="Spring MVC与Struts2区别?思维导图 代码示例(java 架构)" target="_blank">Spring MVC与Struts2区别?思维导图 代码示例(java 架构)</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a> <div>SpringMVC与Struts2的区别SpringMVC和Struts2都是流行的JavaWeb框架,但它们在设计理念、架构模式和实现细节上存在显著差异。以下是两者的主要区别:1.设计哲学SpringMVC:强调松耦合和依赖注入(DI),使得组件之间的依赖关系更加清晰。支持面向切面编程(AOP)和事件驱动模型,增强了代码的模块化和可测试性。Struts2:更加关注于Action类的设计,遵循Co</div> </li> <li><a href="/article/1886809026621140992.htm" title="计算机专业开题报告保姆级指南 | 附万能模板框架" target="_blank">计算机专业开题报告保姆级指南 | 附万能模板框架</a> <span class="text-muted">计算机毕业设计小帅</span> <a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a> <div>【关注我,毕业设计不迷茫】|6年辅导经验|帮助1200+学子顺利毕业大家好,我是程序员小帅,一名专注于计算机毕业设计全流程辅导的技术博主。专注JavaWeb,我深耕毕设领域6年,累计输出1200+原创项目案例,辅导成功率接近100%。如果你正在为选题、代码、论文或答辩发愁,这里能给你最落地的解决方案!文末获取源码+数据库+文档一、核心框架全景图(9大模块)选题依据→课题背景→研究目标→研究现状→创</div> </li> <li><a href="/article/1886765155866439680.htm" title="Maven 三种项目打包方式:POM、JAR 和 WAR 的区别详解" target="_blank">Maven 三种项目打包方式:POM、JAR 和 WAR 的区别详解</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/jar/1.htm">jar</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、Maven项目的打包方式简介Maven项目有多种打包方式,定义在pom.xml文件中的标签里。最常见的打包类型有以下几种:POM(ProjectObjectModel):用于聚合项目和管理多模块项目的父项目。JAR(JavaARchive):用于打包Java应用程序的常见格式,主要用于打包库和可执行的Java程序。WAR(WebApplicationArchive):用于打包JavaWeb应用</div> </li> <li><a href="/article/1886745365240147968.htm" title="基于Springboot框架的学术期刊遴选服务-项目演示" target="_blank">基于Springboot框架的学术期刊遴选服务-项目演示</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>项目介绍本课程演示的是一款基于Javaweb的水果超市管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目附带的源码资料可作为毕设使用水果超市管理系统包括用户管理、新闻资讯管理、水果类别管理、水果管理、轮播图管理、库存管理的功能模块设计如图:技术栈说明后端:Spr</div> </li> <li><a href="/article/1886697192492691456.htm" title="jenkins自动化部署及三种构建部署方式" target="_blank">jenkins自动化部署及三种构建部署方式</a> <span class="text-muted">影࿐ེ</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>jenkins自动化部署及三种构建部署方式jenkins是基于java开发的一种持续集成工具,用于监控持续重复的工作,功能包括。1、持续的软件版本发布/测试2、监控外部调用执行项目Jenkins其实很早之前就有了,最近火起来的原因是,大家都在关注devops,关注如何来做持续集成,持续交付,如何来做CI/CD。Jenkins作为持续集成的工具,他其实只是一个平台或者是一个大的框架,它的工作完全就是</div> </li> <li><a href="/article/1886669005381496832.htm" title="Ubuntu 设置 JAVA_HOME 环境变量" target="_blank">Ubuntu 设置 JAVA_HOME 环境变量</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/ubuntujava/1.htm">ubuntujava</a> <div>配置JAVA_HOME环境变量对于Java开发人员和在Ubuntu上运行的应用程序来说是很关键的步骤。这个变量指向Java开发套件(JDK)安装目录,从而操作系统可以找到JDK可执行文件。Step1:InstallJava您可以安装Ubuntu存储库中默认的JDK包,也可以安装特定版本的OracleJDK或OpenJDK。InstallDefaultJDKsudoaptupdatesudoapti</div> </li> <li><a href="/article/1886591138152902656.htm" title="基于SSM的亲子活动平台的搭建与实现(源码+数据脚本+论文+技术文档)" target="_blank">基于SSM的亲子活动平台的搭建与实现(源码+数据脚本+论文+技术文档)</a> <span class="text-muted">程序猿麦小七</span> <a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E5%8F%B0/1.htm">后台</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E4%BA%B2%E5%AD%90%E6%B4%BB%E5%8A%A8/1.htm">亲子活动</a><a class="tag" taget="_blank" href="/search/%E5%95%86%E5%AE%B6%E5%85%A5%E9%A9%BB/1.htm">商家入驻</a><a class="tag" taget="_blank" href="/search/SSM/1.htm">SSM</a> <div>项目描述临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基于SSM的亲子活动平台的搭建与实现。功能需求本文研究基于javaWeb的亲子活动平台的搭建与实现,通过分析现在大部分的家庭对孩子影响以及陪伴的情况,对亲子活动平台的项目</div> </li> <li><a href="/article/1886558091160383488.htm" title="JavaWeb——CSS的使用" target="_blank">JavaWeb——CSS的使用</a> <span class="text-muted">糖JL是我儿</span> <a class="tag" taget="_blank" href="/search/JavaWeb/1.htm">JavaWeb</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>CSS层叠样式表(英文全称:(cascadingstlesheets)能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力,简单来说,CSS用来美化页面一、CSS的引入方式:1.行内式:通过元素开始标签的style属性引入语法:style="样式名:样式值;样式名:样式值;......"缺点:代码复用度低,不利于维护CSS样式和HTML结构代</div> </li> <li><a href="/article/1886546737737297920.htm" title="hutool的安装和使用" target="_blank">hutool的安装和使用</a> <span class="text-muted">SAFE20242034</span> <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/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>Hutool是一个小巧但强大的Java工具包,提供了许多实用的工具类,极大地提高了Java开发的效率。它封装了常见的工具方法,避免了重复造轮子。Hutool的核心模块Hutool提供多个模块,每个模块都有不同的功能,常见的有:core(核心工具类):包含字符串、集合、日期、IO、反射等基础工具类。extra(扩展工具类):支持邮件、二维码、模板引擎等功能。db(数据库操作):基于JDBC简化数据库</div> </li> <li><a href="/article/1886526309509689344.htm" title="Java 关于抽象 -- Java 语言的抽象类、接口和函数式接口" target="_blank">Java 关于抽象 -- Java 语言的抽象类、接口和函数式接口</a> <span class="text-muted">栗筝i</span> <a class="tag" taget="_blank" href="/search/%E6%A0%97%E7%AD%9Di/1.htm">栗筝i</a><a class="tag" taget="_blank" href="/search/%E7%9A%84/1.htm">的</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%A0%88%EF%BC%88%E4%BB%98%E8%B4%B9%E9%83%A8%E5%88%86%EF%BC%89/1.htm">技术栈(付费部分)</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E4%B8%93%E6%A0%8F/1.htm">专栏</a><a class="tag" taget="_blank" href="/search/%E6%A0%97%E7%AD%9Di/1.htm">栗筝i</a><a class="tag" taget="_blank" href="/search/%E7%9A%84/1.htm">的</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%A0%88/1.htm">技术栈</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8/1.htm">入门</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%8A%BD%E8%B1%A1/1.htm">抽象</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a> <div>大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第008篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同</div> </li> <li><a href="/article/1886460237209202688.htm" title="java开发工程师面试问题,java面试题大汇总小山博客" target="_blank">java开发工程师面试问题,java面试题大汇总小山博客</a> <span class="text-muted">A程序员导师</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</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/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>开头学习如逆水行舟,尤其是IT行业有着日新月异的节奏。而且现在这个浮躁而又拜金的社会,我相信很多人做技术并非出于热爱,只是被互联网的高薪吸引,毕竟技术岗位非常枯燥,不仅要面对奇奇怪怪的需求,还要不停的充实自己避免被淘汰。所以,我们更要抓紧每一次可以学习和进步的机会。没有撤退可言!即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天</div> </li> <li><a href="/article/1886446110021578752.htm" title="【Spring:Java开发的灵活框架】" target="_blank">【Spring:Java开发的灵活框架】</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>Spring:Java开发的灵活框架Spring是一个开源的Java企业应用开发框架,它自2003年首次发布以来,迅速成为了最受欢迎的企业级开发框架之一。Spring通过简化JavaEE(Java企业版)的复杂性,提高了开发效率,帮助开发者更好地管理应用程序的生命周期,控制复杂性。Spring框架的设计理念是松耦合、模块化、可扩展性强,并为开发者提供了大量的功能和工具,帮助他们在复杂的企业应用中快</div> </li> <li><a href="/article/1886410411109052416.htm" title="Java循环操作哪个快" target="_blank">Java循环操作哪个快</a> <span class="text-muted">eqa11</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>文章目录Java循环操作哪个快一、引言二、循环操作性能对比1、普通`for`循环与增强`for`循环1.1、代码示例2、`for`循环与`while`循环2.1、代码示例3、循环优化技巧3.1、代码示例三、循环操作的适用场景四、使用示例五、总结Java循环操作哪个快一、引言在Java开发中,循环操作是常见的编程任务,但不同的循环方式在性能上存在差异。选择合适的循环结构对于优化程序性能至关重要。本文</div> </li> <li><a href="/article/1886399315807629312.htm" title="Java 程序结构 -- Java 语言的变量、方法、运算符与注释" target="_blank">Java 程序结构 -- Java 语言的变量、方法、运算符与注释</a> <span class="text-muted">栗筝i</span> <a class="tag" taget="_blank" href="/search/%E6%A0%97%E7%AD%9Di/1.htm">栗筝i</a><a class="tag" taget="_blank" href="/search/%E7%9A%84/1.htm">的</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%A0%88%EF%BC%88%E4%BB%98%E8%B4%B9%E9%83%A8%E5%88%86%EF%BC%89/1.htm">技术栈(付费部分)</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E4%B8%93%E6%A0%8F/1.htm">专栏</a><a class="tag" taget="_blank" href="/search/%E6%A0%97%E7%AD%9Di/1.htm">栗筝i</a><a class="tag" taget="_blank" href="/search/%E7%9A%84/1.htm">的</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%A0%88/1.htm">技术栈</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%85%A5%E9%97%A8/1.htm">入门</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E7%BB%93%E6%9E%84/1.htm">结构</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a> <div>大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第003篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同</div> </li> <li><a href="/article/1886390234862645248.htm" title="JavaWeb实验 JavaBean与Servlet" target="_blank">JavaWeb实验 JavaBean与Servlet</a> <span class="text-muted">巫师不要去魔法部乱说</span> <a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>实验目的掌握编写JavaBean的规范,学会如何在JSP中使用JavaBean;掌握JSP、JavaBean和Servlet综合应用的基本原则。实验内容创建一个WEB应用,综合利用JSP、JavaBean和Servlet技术实现用户登录(注册功能选做)。程序至少包含:一个登录页面login.jsp,一个欢迎页面hello.jsp,一个servlet和一个bean。参考实验7,运用实验中创建数据库和</div> </li> <li><a href="/article/1886382673333645312.htm" title="【JavaWeb】网上蛋糕商城-项目搭建" target="_blank">【JavaWeb】网上蛋糕商城-项目搭建</a> <span class="text-muted">笔触狂放</span> <a class="tag" taget="_blank" href="/search/Jsp%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/1.htm">Jsp网络编程</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/j2ee/1.htm">j2ee</a><a class="tag" taget="_blank" href="/search/javaweb/1.htm">javaweb</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a> <div>学习目标了解网上蛋糕商城的项目需求了解网上蛋糕商城的功能结构熟悉E-R图和数据表的设计熟悉项目环境的搭建通过前面章节的学习,相信读者应该已经掌握了Web开发的基础知识,学习这些基础知识就是为开发Web网站奠定基础。如今,电子商务在我国迅速扩张,越来越多的商家在传统销售模式外,大力拓展网络渠道,越来越多的人们改变了购物习惯,热衷于网络购物,足不出户,享受海淘的乐趣。同时,网上购物具有价格透明,足不出</div> </li> <li><a href="/article/1886366901421010944.htm" title="Spring 事务与 MySQL 事务:深度解析与实战指南" target="_blank">Spring 事务与 MySQL 事务:深度解析与实战指南</a> <span class="text-muted">一叶飘零_sweeeet</span> <a class="tag" taget="_blank" href="/search/%E6%9E%9C%E9%85%B1%E7%B4%AB/1.htm">果酱紫</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、引言在企业级应用开发中,事务处理是确保数据一致性和完整性的关键环节。Spring框架作为广泛应用的Java开发框架,提供了强大的事务管理功能。而MySQL作为流行的关系型数据库,也具备完善的事务支持。本文将深入探讨Spring事务与MySQL事务的原理、特性、使用方法以及在实际项目中的应用,帮助开发者更好地理解和运用事务处理机制,确保应用的可靠性和数据的准确性。二、事务的基本概念(一)什么是事</div> </li> <li><a href="/article/1886339782691319808.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/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>深入解析JavaWeb中的文件上传与下载优化文件上传与下载是Web应用中常见的功能,尤其是在需要处理大量文件传输、存储的场景下。传统的文件上传和下载方式虽然简单,但如果不加以优化,可能会带来性能瓶颈、网络传输慢、服务器负担大等问题。今天,我们将深入探讨JavaWeb中如何实现高效的文件上传和下载,并介绍一些优化策略。1.JavaWeb中的文件上传原理在JavaWeb中,文件上传通常是通过multi</div> </li> <li><a href="/article/1886275342306439168.htm" title="Spring Boot从入门到精通:解锁高效应用开发密码" target="_blank">Spring Boot从入门到精通:解锁高效应用开发密码</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a> <div>什么是SpringBoot在Java开发的广袤天地中,SpringBoot就如同一位神奇的魔法师,为开发者们带来了前所未有的便捷与高效,已然成为Java开发领域的中流砥柱。它是由Pivotal团队精心打造的开源框架,旨在将Spring应用的开发与部署变得轻而易举。SpringBoot之所以能够简化开发流程、提升开发效率,其秘诀就在于“约定大于配置”这一精妙绝伦的理念。在传统的Spring开发中,开</div> </li> <li><a href="/article/1886210137467711488.htm" title="已解决java.lang.ClassNotFoundException:报错问题" target="_blank">已解决java.lang.ClassNotFoundException:报错问题</a> <span class="text-muted">王蘸蘸</span> <a class="tag" taget="_blank" href="/search/bug%E4%BF%AE%E5%A4%8D/1.htm">bug修复</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/pycharm/1.htm">pycharm</a> <div>在Java开发中,java.lang.ClassNotFoundException是一个常见但令人头痛的问题。当应用程序在运行时找不到指定的类时,就会抛出这个异常。本文将详细探讨ClassNotFoundException的原因、常见场景,并提供解决方案和最佳实践。一、问题分析java.lang.ClassNotFoundException是一个被检查的异常(CheckedException),通</div> </li> <li><a href="/article/1886167507295858688.htm" title="RPC 和 RESTFUL" target="_blank">RPC 和 RESTFUL</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/%E5%9F%BA%E7%A1%80/1.htm">基础</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、网络分层聊今天的话题之前,先普及个关于网络架构的分层的知识,在当前的世界中,有两套网络的参考模型,一套是OSI参考模型,一套是TCP/IP的参考模型。对于java开发而言,我们只需要知道现在用的是TCP/IP模型,这个模型分为四层就可以了。OSI参考模型(OpenSystemsInterconnectionReferenceModel):包括七层,这个模型过于理想化,未能在因特网中进行广泛推广</div> </li> <li><a href="/article/1886019860891234304.htm" title="java开发工程师—如何让你的简历脱颖而出?" target="_blank">java开发工程师—如何让你的简历脱颖而出?</a> <span class="text-muted">2401_87252417</span> <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>职位描述上的相关技能年限一般只是指商业项目经验,而一般不会包括学习项目经验。所以对于一些介于商业项目和学习项目之间的项目,尽量当成商业项目来写。比如小张在大三时帮计算机系的王老师所在的ABC软件公司干了半年的活,如果小张在简历上写:“在校期间,从x年x月到x年x月完成了xx系统,用到了xx技术”,那么这多半会被当成类似于课程设计的学习经验,但如果再加上如下关键性的描述:“这个系统是属于xx公司的x</div> </li> <li><a href="/article/1885902607625547776.htm" title="程序员之路:深入理解Java的内存管理和垃圾回收机制" target="_blank">程序员之路:深入理解Java的内存管理和垃圾回收机制</a> <span class="text-muted">ysdysyn</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E4%B9%8B%E8%B7%AF/1.htm">程序员之路</a><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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>深入理解Java的内存管理和垃圾回收机制对于Java开发者来说至关重要。以下是关于Java内存管理和垃圾回收机制的详细解析:一、Java内存管理Java的内存管理主要依赖于Java虚拟机(JVM)的内存分配和垃圾回收机制。JVM将内存划分为不同的区域,包括堆内存、栈内存、方法区、程序计数器等,每个区域都有其特定的用途和管理方式。堆内存:用于存放对象实例,是垃圾回收器管理的主要区域。堆内存还可以细分</div> </li> <li><a href="/article/1885777297965903872.htm" title="【实用技能】借助Aspose.Slides,使用 Java 在 PowerPoint 文件中突出显示文本" target="_blank">【实用技能】借助Aspose.Slides,使用 Java 在 PowerPoint 文件中突出显示文本</a> <span class="text-muted">CodeCraft Studio</span> <a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3%E7%AE%A1%E7%90%86/1.htm">文档管理</a><a class="tag" taget="_blank" href="/search/%E6%8E%A7%E4%BB%B6/1.htm">控件</a><a class="tag" taget="_blank" href="/search/powerpoint/1.htm">powerpoint</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>概述在PowerPoint文件中突出显示文本是教育、营销和金融等各个行业的重要任务。Aspose.SlidesforJava在此过程中发挥着重要作用,使开发人员能够有效地自动执行任务。借助Aspose.SlidesforJava,Java开发人员可以轻松地在PowerPoint文件中突出显示文本,使其成为满足他们需求的理想解决方案。所以,让我们使用这个强大的PowerPoint服务开发一个Java</div> </li> <li><a href="/article/1885728255953137664.htm" title="MVC 模式与javaEE三层架构" target="_blank">MVC 模式与javaEE三层架构</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/javaWeb-mvc/1.htm">javaWeb-mvc</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E5%B1%82%E6%9E%B6%E6%9E%84/1.htm">三层架构</a> <div>MVC设计模式mvc这种设计模式,不光运用于Web领域,而且也能用于非Web领域;可以特指一种表现层设计模式,不限于Java语言;JavaWeb应用中应用的最广泛的设计模式便是MVC模式,目前的主流Web框架大多也是基于MVC设计模式所编写的。MVC模式主要分为以下三个基础模块:Model模型:主要负责、javaBean封装数据、业务逻辑以及数据库的交互View视图:主要用于显示数据和提交数据Co</div> </li> <li><a href="/article/1885665971482456064.htm" title="Java核心与应用:Java异常处理全解析" target="_blank">Java核心与应用:Java异常处理全解析</a> <span class="text-muted">星核日记</span> <a class="tag" taget="_blank" href="/search/%E3%80%8AJava/1.htm">《Java</a><a class="tag" taget="_blank" href="/search/%E6%A0%B8%E5%BF%83%E4%B8%8E%E5%BA%94%E7%94%A8%E3%80%8B/1.htm">核心与应用》</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Java核心与应用:Java异常处理全解析“程序的世界里,异常是不可避免的。但优秀的开发者,总能优雅地处理它们。”——凌云学习目标✅掌握Java异常分类体系与继承结构✅理解Checked/Unchecked异常的设计哲学✅熟练使用异常链进行根因分析✅掌握try-with-resources的底层原理✅设计符合规范的异常体系1.Java异常处理概述在Java开发中,异常处理是保证程序健壮性的重要手段</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>