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/1835468916290318336.htm" title="JVM、JRE和 JDK:理解Java开发的三大核心组件" target="_blank">JVM、JRE和 JDK:理解Java开发的三大核心组件</a> <span class="text-muted">Y雨何时停T</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是一门跨平台的编程语言,它的成功离不开背后强大的运行环境与开发工具的支持。在Java的生态中,JVM(Java虚拟机)、JRE(Java运行时环境)和JDK(Java开发工具包)是三个至关重要的核心组件。本文将探讨JVM、JDK和JRE的区别,帮助你更好地理解Java的运行机制。1.JVM:Java虚拟机(JavaVirtualMachine)什么是JVM?JVM,即Java虚拟机,是Ja</div> </li> <li><a href="/article/1835362136054919168.htm" title="探索Zebra4J:构建高效企业级Web应用的微服务框架" target="_blank">探索Zebra4J:构建高效企业级Web应用的微服务框架</a> <span class="text-muted">叶准鑫Natalie</span> <div>探索Zebra4J:构建高效企业级Web应用的微服务框架ZebraZebra4J/Zebra4Js基于SpringBoot的JavaWeb/Nodejs框架项目地址:https://gitcode.com/gh_mirrors/zebra/Zebra项目介绍在当今快速发展的技术环境中,构建高效、可扩展的企业级Web应用是每个开发团队的追求。Zebra4J作为一款基于SpringBoot的全新微服务</div> </li> <li><a href="/article/1835344485802930176.htm" title="基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台" target="_blank">基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台</a> <span class="text-muted">网顺技术团队</span> <a class="tag" taget="_blank" href="/search/%E6%88%90%E5%93%81%E7%A8%8B%E5%BA%8F%E9%A1%B9%E7%9B%AE/1.htm">成品程序项目</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/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><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>基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台作者主页网顺技术团队欢迎点赞收藏⭐留言文末获取源码联系方式查看下方微信号获取联系方式承接各种定制系统精彩系列推荐精彩专栏推荐订阅不然下次找不到哟Java毕设项目精品实战案例《1000套》感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人文章目录基</div> </li> <li><a href="/article/1835285180512825344.htm" title="Lombok:Java开发者的代码简化神器【后端 17】" target="_blank">Lombok:Java开发者的代码简化神器【后端 17】</a> <span class="text-muted">终末圆</span> <a class="tag" taget="_blank" href="/search/Java%E5%90%8E%E7%AB%AF/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><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><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</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/python/1.htm">python</a> <div>Lombok:Java开发者的代码简化神器在Java开发中,我们经常需要编写大量的样板代码,如getter、setter、equals、hashCode、toString等方法。这些代码虽然基础且必要,但往往占据了大量开发时间,且容易在属性变更时引发错误。幸运的是,Lombok这个Java库通过注解的方式,为我们提供了一种高效的解决方案。本文将详细介绍Lombok的使用及其优势。什么是Lombok</div> </li> <li><a href="/article/1835195686212169728.htm" title="5-【JavaWeb】JUnit 单元测试及JUL 日志系统" target="_blank">5-【JavaWeb】JUnit 单元测试及JUL 日志系统</a> <span class="text-muted">weixin_44329069</span> <a class="tag" taget="_blank" href="/search/JavaWeb/1.htm">JavaWeb</a><a class="tag" taget="_blank" href="/search/junit/1.htm">junit</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.使用JUnit进行单元测试JUnit是Java中非常流行的单元测试框架,MyBatis与JUnit可以很好地结合,来测试持久层代码的正确性。1.1添加JUnit依赖在使用JUnit之前,需要在pom.xml中引入JUnit依赖。junitjunit4.13.2test1.2单元测试基本结构假设我们要测试UserMapper中的getUserById方法,测试代码如下:importorg.apa</div> </li> <li><a href="/article/1835195687143305216.htm" title="10- 【JavaWeb】Tomcat、Servlet基础" target="_blank">10- 【JavaWeb】Tomcat、Servlet基础</a> <span class="text-muted">weixin_44329069</span> <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/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>1.MacOS配置Tomcat服务器教程MacOS配置Tomcat服务器教程2.Servlet基础1.创建ServletServlet是一个扩展服务器功能的Java类,主要用于处理HTTP请求。以下是一个简单的Servlet示例:importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.an</div> </li> <li><a href="/article/1835182148643024896.htm" title="全能第三方支付对接pay-java-parent 2.12.7 发布,支付聚合" target="_blank">全能第三方支付对接pay-java-parent 2.12.7 发布,支付聚合</a> <span class="text-muted">egzosn</span> <a class="tag" taget="_blank" href="/search/%E6%94%AF%E4%BB%98/1.htm">支付</a><a class="tag" taget="_blank" href="/search/%E7%AC%AC%E4%B8%89%E6%96%B9%E6%94%AF%E4%BB%98/1.htm">第三方支付</a><a class="tag" taget="_blank" href="/search/%E6%94%AF%E4%BB%98%E8%81%9A%E5%90%88/1.htm">支付聚合</a><a class="tag" taget="_blank" href="/search/%E6%94%AF%E4%BB%98%E5%AF%B9%E6%8E%A5/1.htm">支付对接</a><a class="tag" taget="_blank" href="/search/%E6%94%AF%E4%BB%98pay/1.htm">支付pay</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1/1.htm">微信</a> <div>全能第三方支付对接Java开发工具包.优雅的轻量级支付模块集成支付对接支付整合(微信,支付宝,银联,友店,富友,跨境支付paypal,payoneer(P卡派安盈)易极付)app,扫码,网页支付刷卡付条码付刷脸付转账服务商模式、支持多种支付类型多支付账户,支付与业务完全剥离,简单几行代码即可实现支付,简单快速完成支付模块的开发,可轻松嵌入到任何系统里目前仅是一个开发工具包(即SDK),只提供简单W</div> </li> <li><a href="/article/1835175340083867648.htm" title="【免费】springboot项目申报管理系统|毕业设计|Javaweb项目" target="_blank">【免费】springboot项目申报管理系统|毕业设计|Javaweb项目</a> <span class="text-muted">计算机学姐来啦</span> <a class="tag" taget="_blank" href="/search/springboot/1.htm">springboot</a><a class="tag" taget="_blank" href="/search/ssm/1.htm">ssm</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><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/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/%E6%AF%95%E8%AE%BE/1.htm">毕设</a><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-ee/1.htm">java-ee</a> <div>收藏点赞不迷路关注作者有好处编号:springboot375springboot项目申报管理系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis工具:IDEA/Ecilpse、Navicat、Maven1.万字文档展示(部分)2.系统图片展示第5章系统详细设计5.1管理员功能模块的实现5.1.1项目列表如图5.1显示的就是项目列表页面,此页面提供给管理员的</div> </li> <li><a href="/article/1835172191164002304.htm" title="【开发环境搭建】Macbook M1搭建Java开发环境" target="_blank">【开发环境搭建】Macbook M1搭建Java开发环境</a> <span class="text-muted">weixin_44329069</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>JDK安装与配置下载并安装JDK:ARM64DMG安装包下载链接:JDK21forMac(ARM64)。双击下载的DMG文件,按照提示安装JDK。配置环境变量:打开终端,使用vim编辑.bash_profile文件:vim~/.bash_profile在文件中添加以下内容来设置JAVA_HOME:exportJAVA_HOME=/Library/Java/JavaVirtualMachines/j</div> </li> <li><a href="/article/1835073615754784768.htm" title="MyBatis 方法重载的陷阱及解决方案" target="_blank">MyBatis 方法重载的陷阱及解决方案</a> <span class="text-muted">molashaonian</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E6%96%B9%E6%B3%95%E9%87%8D%E8%BD%BD/1.htm">方法重载</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E5%B8%B8/1.htm">异常</a><a class="tag" taget="_blank" href="/search/%E6%96%B9%E6%B3%95%E5%90%8D%E7%9B%B8%E5%90%8C/1.htm">方法名相同</a> <div>在使用MyBatis进行开发时,尤其是使用注解模式(如@Select、@Insert等)时,开发者常常会遇到这样一个问题:为什么我的方法重载不能正常工作?即使在Java中允许方法名相同但参数不同的重载,MyBatis在处理注解的SQL方法时却并不支持这种方式。这篇文章将深入探讨MyBatis的这个特性及如何规避相关的坑。问题背景在标准的Java开发中,方法重载是一种常见的设计模式。方法重载允许我们</div> </li> <li><a href="/article/1835009059401592832.htm" title="QT与Python混合编程经验记录" target="_blank">QT与Python混合编程经验记录</a> <span class="text-muted">weixin_30237281</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</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/c%2Fc%2B%2B/1.htm">c/c++</a> <div>1、如何embeddingpython,Python文档中有专门一章阐述https://docs.python.org/3.5/extending/embedding.htm;1、库文件:在vs--c/c++--附加包含文件中添加目;链接中也要添加,:将python中的include,libs二个目录添加进来2、对于Python,没有调试库,可直接将运行库复制一份,名称后面加上_d,就可用,可不能</div> </li> <li><a href="/article/1834994558321127424.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/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/%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%E5%9F%BA%E7%A1%80/1.htm">Java基础</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%B9%B6%E5%8F%91/1.htm">并发</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E6%B1%A0/1.htm">线程池</a> <div>大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第024篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同</div> </li> <li><a href="/article/1834991282372571136.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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>哔哩哔哩Java开发工程师面试该如()何准备?-知乎一.JavaOOP面试题(1)什么是B/S架构?什么是C/S架构Java都有那些开发平台?B/S(Browser/Server),浏览器/服务器程序C/S(Client/Server),客户端/服务端,桌面应用程序1、C/S和B/S各有优势,C/S在图形的表现能力上以及运行的速度上肯定是强于B/S模式的,不过缺点就是他需要运行专门的客户端,而且更</div> </li> <li><a href="/article/1834844412442669056.htm" title="Java 中自定义线程池" target="_blank">Java 中自定义线程池</a> <span class="text-muted">胡英俊俊俊</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/JUC/1.htm">JUC</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中,线程池主要由ThreadPoolExecutor提供,该类支持自定义线程池的核心参数,如线程数、任务队列以及拒绝策略等。在这篇文章中,我们将讨论如何通过ThreadPoolExecutor来实现自定义线程池,以及常用的配置和使用方</div> </li> <li><a href="/article/1834781256492085248.htm" title="idea 启动tomcat 工程_使用IDEA创建JavaWeb项目 部署本地tomcat并运行" target="_blank">idea 启动tomcat 工程_使用IDEA创建JavaWeb项目 部署本地tomcat并运行</a> <span class="text-muted">心在天上脚在地上</span> <a class="tag" taget="_blank" href="/search/idea/1.htm">idea</a><a class="tag" taget="_blank" href="/search/%E5%90%AF%E5%8A%A8tomcat/1.htm">启动tomcat</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E7%A8%8B/1.htm">工程</a> <div>一、下载商业版IDEA二、新建JavaWeb项目1、在菜单栏找到File>>New>>Project2、在弹出的窗口中找到JavaEnterPrise>>WebApplication,点击Next3、填写项目名称,选择项目位置,然后Finish4、在左侧窗口可以看到IDEA创建JavaWeb工程的目录结构,在src中写java代码,在web目录下放jsp页面。三、下载tomacat下载完成后,解压</div> </li> <li><a href="/article/1834727038322307072.htm" title="javaweb基于ssm框架学生信息管理(成绩)系统设计与实现" target="_blank">javaweb基于ssm框架学生信息管理(成绩)系统设计与实现</a> <span class="text-muted">ancen_73bd</span> <div>开发平台、开发工具、应用服务器的介绍开发平台:Windows开发工具:idea+mySql应用服务器:ApacheTomcat8.0学生成绩管理系统主要用于学校学生成绩信息管理,能实现学生、老师、院系、班级、课程的增删改查操作,同时学生能进行选课和退课操作,老师能对学生的成绩录入和修改操作。系统流程图功能结构图部分截图免费源码获得:扫码关注微信公众号:ancenok,然后回复:013</div> </li> <li><a href="/article/1834672973898936320.htm" title="Servlet 文件上传" target="_blank">Servlet 文件上传</a> <span class="text-muted">lly202406</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Servlet文件上传在JavaWeb开发中,文件上传是一个常见的需求。Servlet作为一种服务器端的技术,可以轻松实现文件上传功能。本文将详细介绍如何在Servlet中处理文件上传,包括环境配置、代码实现以及常见问题的解决方案。环境配置1.添加依赖在项目的pom.xml文件中,添加ApacheCommonsFileUpload库的依赖。这个库提供了易于使用的API来处理文件上传。commons</div> </li> <li><a href="/article/1834631488147124224.htm" title="品读 Java 经典巨著《Effective Java》90条编程法则,第4条:通过私有构造器强化不可实例化的能力" target="_blank">品读 Java 经典巨著《Effective Java》90条编程法则,第4条:通过私有构造器强化不可实例化的能力</a> <span class="text-muted">@赵士杰</span> <a class="tag" taget="_blank" href="/search/%E5%93%81%E8%AF%BB%E3%80%8AEffective/1.htm">品读《Effective</a><a class="tag" taget="_blank" href="/search/Java%E3%80%8B/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><a class="tag" taget="_blank" href="/search/Effective/1.htm">Effective</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a> <div>文章目录【前言】欢迎订阅【品读《EffectiveJava》】系列专栏java.lang.Math类的设计经验总结【前言】欢迎订阅【品读《EffectiveJava》】系列专栏《EffectiveJava》是Java开发领域的经典著作,作者JoshuaBloch以丰富的经验和深入的知识,全面探讨了Java编程中的最佳实践。这本书被公认为Java开发者的必读经典,对提升编码技巧和代码质量具有重要意义</div> </li> <li><a href="/article/1834599224457654272.htm" title="Docker Registry Web:一站式私有Docker Registry管理解决方案" target="_blank">Docker Registry Web:一站式私有Docker Registry管理解决方案</a> <span class="text-muted">邹澜鹤Gardener</span> <div>DockerRegistryWeb:一站式私有DockerRegistry管理解决方案项目介绍docker-registry-web是一个专为私有DockerRegistryv2设计的Web界面和安全服务,它提供了浏览仓库、标签和镜像的能力,并具备基于角色的身份验证和审计功能。通过简单的Docker命令,您可以快速启动并开始管理您的Docker镜像。项目技术分析该项目基于Java开发,利用Dock</div> </li> <li><a href="/article/1834558273865478144.htm" title="Java虚拟机:运行时内存结构" target="_blank">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/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/%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/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a> <div>大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第035篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的技术栈的同学。与此同时,本专栏的所有文章,也都会准备充足的代码示例和完善的知识点梳理,因此也十分适合零基础的小白和要准备工作面试的同</div> </li> <li><a href="/article/1834535205646462976.htm" title="Django+Vue基于OpenCV的人脸识别系统的设计与实现" target="_blank">Django+Vue基于OpenCV的人脸识别系统的设计与实现</a> <span class="text-muted">赵广陆</span> <a class="tag" taget="_blank" href="/search/project/1.htm">project</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a> <div>目录1项目介绍2项目截图3核心代码3.1需要的环境3.2Django接口层3.3实体类3.4config.ini3.5启动类3.5Vue4数据库表设计5文档参考6计算机毕设选题推荐7源码获取1项目介绍博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+粉丝,超300w访问量,专注于大学生项目实战开发、讲解和答疑辅导,对于专业性数据证明一切!主要项目:javaweb、</div> </li> <li><a href="/article/1834444578590126080.htm" title="搭建Java集成开发环境IntelliJ IDEA教程" target="_blank">搭建Java集成开发环境IntelliJ IDEA教程</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/intellij-idea/1.htm">intellij-idea</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集成开发环境IntelliJIDEA教程1.简介IntelliJIDEA是一款非常强大的Java集成开发环境,它提供了丰富的功能和便捷的操作,可以大大提高Java开发者的开发效率。本教程将介绍如何搭建Java集成开发环境IntelliJIDEA。2.下载与安装2.1下载IntelliJIDEA访问JetBrains官网(https://www.jetbrains.com/idea/)下</div> </li> <li><a href="/article/1834391011711873024.htm" title="Java程序员必学:JVM架构完全解读" target="_blank">Java程序员必学:JVM架构完全解读</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/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6/1.htm">类加载机制</a><a class="tag" taget="_blank" href="/search/JVM%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98/1.htm">JVM性能调优</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/1.htm">内存管理</a><a class="tag" taget="_blank" href="/search/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/1.htm">垃圾回收</a> <div>引言:在Java的世界里,Java虚拟机(JVM)扮演着不可或缺的角色——它是Java的心脏,是Java能够跨平台运行的原因之一。对Java开发者来说,深入理解JVM的内部机制,不仅能够编写更高效的代码,还能够有效地调优和解决生产环境中的问题。本文旨在提供一篇全面而深入的探讨,解析JVM的工作原理和优化策略,为Java开发者提升技能提供指导。JVM基础知识深入浅出地介绍Java虚拟机的基石——从J</div> </li> <li><a href="/article/1834360634381266944.htm" title="搭建Java集成开发环境IntelliJ IDEA" target="_blank">搭建Java集成开发环境IntelliJ IDEA</a> <span class="text-muted">Good_tea_h</span> <a class="tag" taget="_blank" href="/search/intellij/1.htm">intellij</a><a class="tag" taget="_blank" href="/search/idea/1.htm">idea</a> <div>搭建Java集成开发环境(IntegratedDevelopmentEnvironment,简称IDE)IntelliJIDEA是一个涉及多个步骤的过程,旨在帮助Java开发者高效、舒适地进行编程工作。IntelliJIDEA由JetBrains公司开发,以其强大的代码自动补全、动态语法检测、重构功能以及对各种主流框架和前沿技术的深度支持而闻名。以下将详细介绍如何搭建Java集成开发环境Intel</div> </li> <li><a href="/article/1834351675708633088.htm" title="深入探究Spring Framework源码与核心组件" target="_blank">深入探究Spring Framework源码与核心组件</a> <span class="text-muted">纸寿司</span> <div>本文还有配套的精品资源,点击获取简介:SpringFramework是Java开发中广泛使用的框架,其源码的阅读和理解对于开发者来说是宝贵的学习资源。本文将介绍依赖注入、ApplicationContext、Bean生命周期、AOP、数据访问集成、MVC模式、注解驱动开发、测试支持、SpringBoot以及SpringCloud等关键概念。通过这些核心组件的学习,可以更好地掌握Spring的高级功</div> </li> <li><a href="/article/1834328719364288512.htm" title="8- 【JavaWeb】用HTML和CSS来创建一个简洁的登录界面" target="_blank">8- 【JavaWeb】用HTML和CSS来创建一个简洁的登录界面</a> <span class="text-muted">weixin_44329069</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/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a> <div>我们将使用HTML和CSS来创建一个简洁、现代的登录界面。1.HTML结构首先,我们需要一个基本的HTML结构来容纳登录表单。保存为index.html文件:登录页面登录2.CSS样式接下来,我们将编写CSS样式来美化登录界面。保存为styles.css文件:/*Resetsomedefaultstyles*//*Resetsomedefaultstyles*/body,html{margin:0</div> </li> <li><a href="/article/1834328720555470848.htm" title="9- 【JavaWeb】JavaScript 基础" target="_blank">9- 【JavaWeb】JavaScript 基础</a> <span class="text-muted">weixin_44329069</span> <a class="tag" taget="_blank" href="/search/JavaWeb/1.htm">JavaWeb</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>1.基本语法变量声明JavaScript中可以使用var、let和const来声明变量。var是旧的方式,let和const是较新的方式,通常推荐使用let和const。//使用let声明的变量可以被重新赋值letname="Alice";name="Bob";//使用const声明的变量不能被重新赋值constage=25;//age=30;//这将导致错误console.log(name);/</div> </li> <li><a href="/article/1834328721507577856.htm" title="11- 【JavaWeb】Cookie 、Session、Filter、Listener" target="_blank">11- 【JavaWeb】Cookie 、Session、Filter、Listener</a> <span class="text-muted">weixin_44329069</span> <a class="tag" taget="_blank" href="/search/JavaWeb/1.htm">JavaWeb</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>了解Cookie、Session、Filter和Listener是JavaWeb开发中非常重要的部分。1.CookieCookie是服务器在客户端浏览器上存储的小数据片段,用于在不同请求之间保持状态。Cookie通常用于保存用户信息、跟踪会话、保存用户偏好等。示例:创建和读取Cookie设置Cookie(在Servlet中):@WebServlet("/setCookie")publicclass</div> </li> <li><a href="/article/1834265063180038144.htm" title="Charles 抓包工具详解" target="_blank">Charles 抓包工具详解</a> <span class="text-muted">wespten</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E6%A0%88/1.htm">网络协议栈</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87/1.htm">网络设备</a><a class="tag" taget="_blank" href="/search/5G/1.htm">5G</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%B7%A5%E5%85%B7%E5%BC%80%E5%8F%91/1.htm">网络工具开发</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a> <div>一、Charles简介Charles是一款很实用、界面很友好(至少跟fiddler比起来)、功能强大的抓包神器。因为它是基于Java开发的,所以跨平台,Mac、Linux、Windows下都是可以使用的,并且在Android和iOS设备上通用。它的原理是通过成为电脑或者移动设备的代理,截取请求和响应,达到抓包分析的目的。二、Charles安装官网下载地址:CharlesWebDebuggingPr</div> </li> <li><a href="/article/1834169266610466816.htm" title="牛客周赛 Round 13 解题报告 | 珂学家 | 乘法原理场 + BFS上组合 + 众数贪心" target="_blank">牛客周赛 Round 13 解题报告 | 珂学家 | 乘法原理场 + BFS上组合 + 众数贪心</a> <span class="text-muted">Buoluochuixue</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>题解|#简单计算器##includeintmain(){doublea,b;charoperate;scanf(&迈瑞医疗一面等了面试官十几分钟,更气人在后面上来自我介绍完了就让开始做题。。。题不算很难,做完了之后,讲了下思路,后面根据简历提问。一分钟简单介绍下实习做的东西,我说到一半经纬恒润Java开发一面时长:35min1.聊项目2.gc3.线程共享私有4.类加载过程5.I/O相关6.Spri</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>