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/1891763040156708864.htm" title="地平线x5下运行yolo11s-seg模型" target="_blank">地平线x5下运行yolo11s-seg模型</a> <span class="text-muted">zgrobot</span> <a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">机器人</a><a class="tag" taget="_blank" href="/search/yolo11/1.htm">yolo11</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E4%BE%8B%E5%88%86%E5%89%B2/1.htm">实例分割</a><a class="tag" taget="_blank" href="/search/%E5%9C%B0%E5%B9%B3%E7%BA%BFx5/1.htm">地平线x5</a> <div>经过地瓜机器人工作人员(感谢吴超同学)的及时技术支持,整体比较顺利的跑起来了yolo11s-seg分割模型。将一些经验记录下来:首先下载使用docker镜像:https://developer.d-robotics.cc/forumDetail/228559182180396619https://developer.d-robotics.cc/forumDetail/251934919646096</div> </li> <li><a href="/article/1891757871079682048.htm" title="使用EasyExcel和多线程实现高效数据导出" target="_blank">使用EasyExcel和多线程实现高效数据导出</a> <span class="text-muted">刘_sy</span> <a class="tag" taget="_blank" href="/search/java%E5%B7%A5%E5%85%B7%E7%B1%BB/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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/excel/1.htm">excel</a><a class="tag" taget="_blank" href="/search/%E6%89%B9%E9%87%8F%E5%AF%BC%E5%87%BAExcel/1.htm">批量导出Excel</a><a class="tag" taget="_blank" href="/search/EasyExcel/1.htm">EasyExcel</a> <div>使用EasyExcel和多线程实现高效数据导出1.概述在企业级应用中,数据导出是一个常见的需求。为了提高导出效率,尤其是在处理大量数据时,我们可以结合使用EasyExcel库和多线程技术。本文将详细介绍如何通过EasyExcel和多线程技术实现高效的数据导出功能。2.环境准备2.1Java版本Java版本:本项目基于Java开发。2.2依赖库com.alibaba:easyexcel:用于Exce</div> </li> <li><a href="/article/1891753957890519040.htm" title="Maven 与 Spring Boot 项目的集成" target="_blank">Maven 与 Spring Boot 项目的集成</a> <span class="text-muted">drebander</span> <a class="tag" taget="_blank" href="/search/Maven/1.htm">Maven</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>在Java开发中,Maven和SpringBoot是最常见的工具和框架。Maven用于构建和管理项目的依赖,而SpringBoot提供了简化的Spring应用开发方式。将Maven和SpringBoot集成,可以帮助我们更高效地构建和部署SpringBoot应用。本文将介绍如何将Maven与SpringBoot集成,并通过Maven构建和管理SpringBoot项目。1.什么是SpringBoot</div> </li> <li><a href="/article/1891636600232800256.htm" title="Maven 构建分发包与依赖管理" target="_blank">Maven 构建分发包与依赖管理</a> <span class="text-muted">drebander</span> <a class="tag" taget="_blank" href="/search/Maven/1.htm">Maven</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Maven是Java开发中广泛使用的构建和依赖管理工具,它不仅能帮助开发者高效地构建项目,还提供了强大的依赖管理和版本控制功能。通过Maven,你可以轻松地构建并发布JAR、WAR等分发包,并管理不同版本的依赖。本文将讲解如何使用Maven构建并发布JAR/WAR包,以及如何管理不同的发布版本,包括如何配置发布仓库、版本号管理和依赖范围。1.Maven构建分发包(JAR/WAR)1.1JAR包构建</div> </li> <li><a href="/article/1891632686712287232.htm" title="Java 编码系列:集合框架(List、Set、Map 及其常用实现类)" target="_blank">Java 编码系列:集合框架(List、Set、Map 及其常用实现类)</a> <span class="text-muted">pjx987</span> <a class="tag" taget="_blank" href="/search/java%E7%BC%96%E7%A0%81/1.htm">java编码</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/map/1.htm">map</a> <div>引言在Java开发中,集合框架是不可或缺的一部分,它提供了存储和操作一组对象的工具。Java集合框架主要包括List、Set和Map接口及其常用的实现类。正确理解和使用这些集合类不仅可以提高代码的可读性和性能,还能避免一些常见的错误。本文将深入探讨Java集合框架的底层原理,并结合大厂的最佳实践,帮助读者掌握这些核心概念。1.List接口及其常用实现类1.1基本概念List接口表示一个有序的集合,</div> </li> <li><a href="/article/1891621713746128896.htm" title="Java 集成MySQL+MyBatis实战(含代码)" target="_blank">Java 集成MySQL+MyBatis实战(含代码)</a> <span class="text-muted">C_V_Better</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%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/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>在Java开发中,MyBatis是一个功能强大的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs映射成数据库中的记录。本文将通过实战案例,详细展示如何使用MyBatis集成MySQL,实现对数据库的增删改查操作。一、环境准备在开始编写代码</div> </li> <li><a href="/article/1891620830958383104.htm" title="Windows环境下构建本地多节点Elasticsearch集群" target="_blank">Windows环境下构建本地多节点Elasticsearch集群</a> <span class="text-muted">静谧星光c</span> <a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/jenkins/1.htm">jenkins</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>Windows环境下构建本地多节点Elasticsearch集群在大数据领域,Elasticsearch是一个经常使用的分布式搜索和分析引擎。本文将介绍如何在Windows操作系统下搭建一个本地的多节点Elasticsearch集群。通过搭建本地集群,我们可以在单一系统上模拟出多个节点,从而加深对Elasticsearch集群内工作原理的理解。准备工作首先,确保你的系统已经安装了Java开发环境(</div> </li> <li><a href="/article/1891564666740600832.htm" title="如何在Java中设计大规模稀疏数据处理架构" target="_blank">如何在Java中设计大规模稀疏数据处理架构</a> <span class="text-muted">省赚客app开发者</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>如何在Java中设计大规模稀疏数据处理架构大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在大数据时代,稀疏数据在各个领域变得越来越常见,例如推荐系统、自然语言处理、图像处理等。稀疏数据通常包含大量零值或空值,直接使用传统的数据处理架构可能导致效率低下,内存和计算资源浪费。因此,设计一个高效的稀疏数据处理架构成为Java开发者面临的关键挑战。本文将探讨如何在Java中</div> </li> <li><a href="/article/1891457006338895872.htm" title="解决 `‘npm‘ 不是内部或外部命令` 的步骤" target="_blank">解决 `‘npm‘ 不是内部或外部命令` 的步骤</a> <span class="text-muted">王大师王文峰</span> <a class="tag" taget="_blank" href="/search/Java%E5%9F%BA%E7%A1%80%E5%88%B0%E6%A1%86%E6%9E%B6/1.htm">Java基础到框架</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E7%BB%8F%E5%90%90%E8%A1%80%E6%95%B4%E7%90%86/1.htm">面经吐血整理</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E5%88%A9%E5%99%A8IDEA/1.htm">编程利器IDEA</a><a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>本人详解作者:王文峰,参加过CSDN2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的Java开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯山峯转载说明:务必注明来源(注明:作者:王文峰哦)解决`'npm'不是内部或外部命令`的步骤学习教程(传送门)解决`'npm'不是内部或外部命令`的步骤1.**确认是否已安装No</div> </li> <li><a href="/article/1891452971556859904.htm" title="SpringBoot (看完就懂)" target="_blank">SpringBoot (看完就懂)</a> <span class="text-muted">刘小炮吖i</span> <a class="tag" taget="_blank" href="/search/Java%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">Java后端开发面试题</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/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、到底什么是SpringBoot?很多初学者在接触Java开发时,常常会听到SpringBoot这个词,但却对它的概念和作用感到模糊。简单来说,SpringBoot是由Pivotal团队开发的一个基于Spring框架的开源框架,它的主要目标是简化Spring应用的初始搭建以及开发过程。在传统的Spring项目开发中,开发者需要进行大量的配置工作,例如配置Servlet容器、配置各种Bean的依赖</div> </li> <li><a href="/article/1891373741758279680.htm" title="Windows操作系统部署Tomcat详细讲解" target="_blank">Windows操作系统部署Tomcat详细讲解</a> <span class="text-muted">web15117360223</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/1.htm">阿里巴巴</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Tomcat是一个开源的JavaServlet容器,用于处理JavaWeb应用程序的请求和响应。以下是关于Tomcat的用法大全:一、安装Tomcat下载访问ApacheTomcat官方网站(https://tomcat.apache.org/),根据你的操作系统(如Windows、Linux、macOS)和需求选择合适的版本进行下载。例如,对于开发环境,通常选择较新的稳定版本。安装(以Windo</div> </li> <li><a href="/article/1891368437494640640.htm" title="Shiro 框架详解" target="_blank">Shiro 框架详解</a> <span class="text-muted">大家都说我身材好</span> <a class="tag" taget="_blank" href="/search/Java%E9%AB%98%E7%BA%A7/1.htm">Java高级</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/shiro/1.htm">shiro</a> <div>Shiro是一款轻量级的Java安全框架,提供了身份认证、授权、加密和会话管理等功能。它可以集成到任何JavaWeb应用程序中,并且易于使用和扩展。Shiro的设计理念是简洁而灵活,不仅可以应用于Web应用程序,还可以应用于命令行、移动设备和分布式系统等各种应用场景。1.Shiro的概述Shiro是一个开源的Java安全框架,由Apache开发和维护。Shiro可以帮助开发人员快速实现安全特性,包</div> </li> <li><a href="/article/1891349652440150016.htm" title="在linux环境下启动es,linux上Elasticsearch 安装配置、网页访问" target="_blank">在linux环境下启动es,linux上Elasticsearch 安装配置、网页访问</a> <span class="text-muted">guo桀</span> <a class="tag" taget="_blank" href="/search/%E5%9C%A8linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E5%90%AF%E5%8A%A8es/1.htm">在linux环境下启动es</a> <div>一、ElasticSearch简述ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。我们建立一个网站或应用程序,并要添加搜索功能</div> </li> <li><a href="/article/1891323423041318912.htm" title="vertx" target="_blank">vertx</a> <span class="text-muted">三笠爷</span> <a class="tag" taget="_blank" href="/search/vert.x/1.htm">vert.x</a> <div>vert.x是reactive(响应式编程),是一种思想,特点:事件驱动(发挥单台机器的性能):单台机器上,用少量线程处理大量并发异步处理请求(多个服务间通信阻塞较少,响应时间降低):https://vertx.io/官网基于netty的、运行在jvm之上的、支持多种编程语言的高性能异步、非阻塞、响应式全栈javaweb框架eclipse软件基金会顶级java开源项目之一在techempower.</div> </li> <li><a href="/article/1891311440585879552.htm" title="【合集】Java进阶——Java深入学习的笔记汇总 & 再论面向对象、数据结构和算法、JVM底层、多线程、类加载、" target="_blank">【合集】Java进阶——Java深入学习的笔记汇总 & 再论面向对象、数据结构和算法、JVM底层、多线程、类加载、</a> <span class="text-muted">web_15534274656</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/1.htm">阿里巴巴</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>前言spring作为主流的JavaWeb开发的开源框架,是Java世界最为成功的框架,持续不断深入认识spring框架是Java程序员不变的追求;而spring的底层其实就是Java,因此,深入学习Spring和深入学习Java是硬币的正反面,两者相辅相成,相互促进。本篇博客是一篇不定期持续更新的博客,是一些Java深入学习的笔记汇总。目录前言面向对象专题再论面向对象封装和关键字private,t</div> </li> <li><a href="/article/1891268548123226112.htm" title="Java 环境安装和第一个程序:使用 VSCode 轻松上手" target="_blank">Java 环境安装和第一个程序:使用 VSCode 轻松上手</a> <span class="text-muted">极梦网络无忧</span> <a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</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编程世界的重要起点。本文将介绍一种简单的方式,借助VisualStudioCode(简称VSCode)来完成Java环境的安装、配置,以及编写并运行第一个Java程序。一、Java环境安装1.下载并安装JDKJDK(JavaDevelopmentKit)是Java开发的核心工具包</div> </li> <li><a href="/article/1891235516016291840.htm" title="Java API文档使用指南与详解" target="_blank">Java API文档使用指南与详解</a> <span class="text-muted">Kay Lam</span> <div>本文还有配套的精品资源,点击获取简介:JavaAPI文档是Java开发者的权威参考资料,详细描述了Java标准库中的所有公开组件,涵盖了I/O、网络编程、多线程、集合框架、数据库连接(JDBC)、XML处理、图形用户界面(GUI)等多个领域。文档提供清晰的指南帮助理解并使用Java的功能,包含每个类或接口的详细注释、使用示例和常见用途。此外,还介绍了JDK6版本的中文离线文档CHM文件及其下载方式</div> </li> <li><a href="/article/1891235137237086208.htm" title="java word在线编辑_[原创]Java开发在线打开编辑保存Word文件(支持多浏览器)" target="_blank">java word在线编辑_[原创]Java开发在线打开编辑保存Word文件(支持多浏览器)</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/word%E5%9C%A8%E7%BA%BF%E7%BC%96%E8%BE%91/1.htm">word在线编辑</a> <div>Java调用PageOffice实现在线编辑保存Word文件(以jsp调用为例,支持SSM、SSH、SpringMVC等流行框架)1.下载PageOffice开发包:http://www.zhuozhengsoft.com/dowm/下载PageOfficeforJAVA2.以Myeclipse为例,新建一个WebProject,比如:wordonline3.解压PageOffice开发包,拷贝“</div> </li> <li><a href="/article/1891232613486620672.htm" title="java jdk & java api 帮助文档(中文、英文版)" target="_blank">java jdk & java api 帮助文档(中文、英文版)</a> <span class="text-muted">黑色白色</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF--java/1.htm">技术--java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/api/1.htm">api</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3/1.htm">文档</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/chm/1.htm">chm</a><a class="tag" taget="_blank" href="/search/sun/1.htm">sun</a> <div>javaapi帮助文档chm1.51.6中文版英文版.收藏Sun公司提供的JavaAPIDocs是学习和使用Java语言中最经常使用的参考资料之一。但是长期以来此文档只有英文版,对于中国地区的Java开发者来说相当的不便。目前Sun公司正在组织多方力量将此文档翻译成中文,并于2005年10月31日在Sun中国技术社区(http://gceclub.sun.com.cn/)正式发布第一批中文版Jav</div> </li> <li><a href="/article/1891228451470372864.htm" title="2025年如何选择合适的微服务工具" target="_blank">2025年如何选择合适的微服务工具</a> <span class="text-muted">zxzy_org</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/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/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>选择合适的工具是成功实施微服务架构的关键,而2025年市场上可供选择的工具种类更加丰富,这也让开发者需要更为谨慎地做出决策。首先,需要根据团队的技术栈选择合适的开发框架。例如,Java开发者可以选择SpringBoot,而Node.js开发者可能更倾向于使用Express或NestJS。其次,在服务通信方面,工具的选择应基于业务需求。如果追求低延迟和高效数据传输,gRPC是一个值得考虑的方案;而对</div> </li> <li><a href="/article/1891178392779288576.htm" title="Tomcat 8.5 优化指南" target="_blank">Tomcat 8.5 优化指南</a> <span class="text-muted">最爱で毛毛熊</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a> <div>Tomcat8.5优化指南Tomcat8.5是一个广泛使用的JavaWeb应用服务器,但在高并发或资源受限的环境中,默认配置可能无法满足性能需求。以下是一些常见的优化措施,帮助你提升Tomcat8.5的性能和稳定性。1.JVM优化Tomcat运行在JVM上,优化JVM参数可以显著提升性能。1.1内存设置调整JVM的堆内存大小,避免内存不足或频繁的垃圾回收。在catalina.sh(Linux)或c</div> </li> <li><a href="/article/1891174106355789824.htm" title="Tomcat安装与配置详解:从入门到精通" target="_blank">Tomcat安装与配置详解:从入门到精通</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/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、Tomcat简介1.1什么是Tomcat?Tomcat是由Apache软件基金会开发和维护的一款轻量级Java应用服务器,能够运行JavaServlet和JSP应用程序。Tomcat作为JavaWeb服务器与传统的Web服务器(如ApacheHTTPServer)配合使用,以便提供动态的Web服务。1.2Tomcat的主要特性轻量级:Tomcat的体积较小,启动速度快,资源消耗低,非常适合开发</div> </li> <li><a href="/article/1891154570692849664.htm" title="Spring注解深入解析:@Bean与@Component共存的奥秘" target="_blank">Spring注解深入解析:@Bean与@Component共存的奥秘</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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>引言Spring框架自发布以来,凭借其强大的功能和便捷的开发体验,迅速成为Java开发领域的佼佼者。它不仅简化了企业级应用的开发,还提供了一套完整的解决方案,从数据访问、事务管理到安全等各个方面都有涵盖。其灵活性和可扩展性使得它成为众多企业和开发者的首选技术栈。在Spring框架中,注解起着至关重要的作用。它们提供了一种简洁、优雅的方式来配置和管理Spring应用的组件和行为。相较于传统的XML配</div> </li> <li><a href="/article/1890986245123796992.htm" title="Hutool-超级好用的Java工具类库" target="_blank">Hutool-超级好用的Java工具类库</a> <span class="text-muted">独往丶</span> <a class="tag" taget="_blank" href="/search/Java%E5%B7%A5%E5%85%B7%E5%BA%93/1.htm">Java工具库</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>官方网址:Hutool简介Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool是项目中“util”包友好的替代,它节省</div> </li> <li><a href="/article/1890854458053685248.htm" title="Spring JDBC中SqlQuery的使用与实例解析" target="_blank">Spring JDBC中SqlQuery的使用与实例解析</a> <span class="text-muted">t0_54program</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BA%E5%BC%80%E5%8F%91/1.htm">个人开发</a> <div>在Java开发中,SpringJDBC模块提供了强大的数据库操作支持,其中org.springframework.jdbc.object.SqlQuery是一个非常实用的抽象类,用于将SQL查询封装为线程安全、可重用的对象。本文将通过一个完整的实例,详细介绍SqlQuery的使用方法及其在项目中的应用。一、SqlQuery简介SqlQuery是org.springframework.jdbc.ob</div> </li> <li><a href="/article/1890785745954729984.htm" title="Spring框架常用注解详解" target="_blank">Spring框架常用注解详解</a> <span class="text-muted">二的10次方</span> <a class="tag" taget="_blank" href="/search/Spring%E5%85%A8%E5%AE%B6%E6%A1%B6/1.htm">Spring全家桶</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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>Spring框架作为Java开发中最受欢迎的开源框架之一,其强大的功能很大程度上得益于其丰富的注解(Annotation)支持。本文对Spring框架中常用的注解进行详细解析,并通过示例来展示它们的用法和效果。1.组件注解@Component这是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次。当不知道一个类归属于哪个层时,可以使用@Component注解标注。使用案例:@Comp</div> </li> <li><a href="/article/1890713242276261888.htm" title="springboot+vue使用EasyCaptcha实现简单验证码" target="_blank">springboot+vue使用EasyCaptcha实现简单验证码</a> <span class="text-muted">ueanaIU潇潇子</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/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%BD%A2%E9%AA%8C%E8%AF%81%E7%A0%81/1.htm">图形验证码</a><a class="tag" taget="_blank" href="/search/EasyCaptcha/1.htm">EasyCaptcha</a> <div>一、实现效果springboot使用EasyCaptcha实现简单验证码,更多api和用法可以去github上查看EasyCaptcha:Java图形验证码,支持gif、中文、算术等类型,可用于JavaWeb、JavaSE等项目。二、实现步骤1、导入依赖com.github.whvcseeasy-captcha1.6.2org.openjdk.nashornnashorn-core15.4我使用的</div> </li> <li><a href="/article/1890626862875471872.htm" title="走进Java:JDK和JRE分别是什么?它们有什么区别?" target="_blank">走进Java:JDK和JRE分别是什么?它们有什么区别?</a> <span class="text-muted">老鼠只爱大米</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Java%E9%9D%A2%E8%AF%95/1.htm">Java面试</a><a class="tag" taget="_blank" href="/search/Java%E9%9D%A2%E8%AF%95%E6%94%BB%E7%95%A5/1.htm">Java面试攻略</a><a class="tag" taget="_blank" href="/search/Java%E9%AB%98%E9%A2%91%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">Java高频面试题</a><a class="tag" taget="_blank" href="/search/JRE/1.htm">JRE</a><a class="tag" taget="_blank" href="/search/JDK/1.htm">JDK</a> <div>目录引言一、概述二、JRE(JavaRuntimeEnvironment)三、JDK(JavaDevelopmentKit)四、安装和配置五、区别和联系六、总结引言  Java是一门非常流行的编程语言,被广泛应用于各个领域的软件开发。在Java开发中,JRE和JDK是两个重要的概念,它们有着不同的作用和功能。本篇技术博客将会介绍JRE和JDK的概念、组成部分、安装和配置、以及它们之间的区别和联系。</div> </li> <li><a href="/article/1890576422540472320.htm" title="Java微服务的容器化革命:Docker与Kubernetes实践全解析" target="_blank">Java微服务的容器化革命:Docker与Kubernetes实践全解析</a> <span class="text-muted">墨夶</span> <a class="tag" taget="_blank" href="/search/Java%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%991/1.htm">Java学习资料1</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a> <div>在当今快速发展的云计算时代,构建灵活、可扩展且易于维护的应用程序成为了企业竞争力的关键所在。对于Java开发者来说,采用微服务架构不仅能够提高开发效率,还能更好地适应市场的变化需求。而借助Docker和Kubernetes的强大功能,则可以进一步简化部署流程,确保应用在任何环境中都能稳定运行。今天,我们将深入探讨如何将Java微服务成功地迁移到容器化平台,并分享一系列实用技巧和最佳实践。无论你是新</div> </li> <li><a href="/article/1890542750449856512.htm" title="jsp页面跳转失败" target="_blank">jsp页面跳转失败</a> <span class="text-muted">Yolowuwu</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><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/jsp/1.htm">jsp</a> <div>今天解决一下jsp页面跳转失败的问题在JavaWeb的学习过程中,编写了这样一段代码:HelloWorld!用户名:密码:运行得到这个界面:提交之后显示404经过查找发现如果跳转失败证明jsp页面还不支持el表达式可以在jsp文件最上面加上:达到预期效果,问题解决!</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>