什么是jsf_什么是JSF? JavaServer Faces简介

什么是jsf

JavaServer Faces(JSF)是Java标准技术,用于构建基于组件的,面向事件的Web界面。 与JavaServer Pages(JSP)一样,JSF允许访问服务器端数据和逻辑。 与JSP本质上是一个具有服务器端功能HTML页面不同,JSF是一个XML文档,它表示逻辑树中的正式组件。 JSF组件由Java对象作为后盾,这些Java对象独立于HTML并且具​​有Java的全部功能,包括访问远程API和数据库。

诸如JSF之类的框架的关键思想是封装(或包装 )诸如HTML,CSS和JavaScript之类的客户端技术,从而使开发人员能够构建Web界面而无需与这些技术进行过多交互。

本文简要介绍了JSF的Java Web应用程序基于组件的UI开发方法。 简单的示例介绍了JSF的MVC架构,事件模型和组件库。 示例包括JSF 2.3中的新功能,并且我们将使用PrimeFaces作为组件库。

不断发展的JSF

长期流行的JSF最近面临来自与Java兼容的Web框架(包括客户端JavaScript框架)的竞争。 尽管如此,JavaServer Faces仍然是Java标准,尤其是对于大规模Java企业开发而言 。 JSF规范还产生了许多框架和库,它们与最新的客户端改进保持同步。 其中之一是PrimeFaces,我们将在本教程中进行探讨。

虽然未来的开发计划尚不清楚,但是JSF 2.3在等待我们的过程中为开发人员提供了很多工作。 JSF 2.3于2017年3月发布,旨在对JSF进行现代化改造。 在数百个小规模的修复和较大的更新中 ,JSF 2.3弃用了托管bean批注,转而支持CDI,我将在本教程的后面部分介绍。

雅加达EE中的JSF 2.3

2017年9月, Oracle宣布了将Java EE迁移到Eclipse Foundation的意图 。 此后,Java EE已更名为Jakarta EE ,并且继续采用 JSF 2.3(Eclipse Mojarra)。 JSF规范的下一个主要版本将是Eclipse Mojarra 3.0 。

在JSF中构建基于组件的Web界面

JSF的核心思想是将功能封装到可重用的组件中。 这类似于JSP中使用的可重用标签,但JSF组件更为正式。

虽然可以在JavaServer Pages中使用JSF页面,但更常见的是使用Facelets构建独立的JSF页面。 Facelets是设计用于定义JSF接口的XHTML页面。 通过Facelets,您可以使用XML标记创建一个组件树,该树成为JSF用户界面的支架。

清单1展示了使用Facelets编写的简单JSF页面的主要部分。 在这个例子中,我们通过一个通过CDI放置在作用域中的bean访问Java的服务器端功能。 稍后您将了解有关CDI的更多信息。

清单1. JSF示例页面




   
      Hello JavaWorld!
   
   
      #{javaBean.content}
   

在清单1中,我们看到了一个标准的XHTML页面。 Facelets视图建立在XHTML之上。 除了XHTML名称空间之外,还定义和引用了一个辅助名称空间。

h库包含在JSF HTML页面中使用的标准组件。 http://xmlns.jcp.org/jsf/html库定义了JSF组件的集合,在这种情况下,是公共HTML元素的集合。 这些组件之一是元素。

JSF中HTML组件

在语法方面,清单1的元素引用带有h前缀的jsf/html库。 然后,它引用库中的特定组件,即head组件。

组件输出HTML head元素。 (所有这些语法对于这样一个简单的目的来说似乎都是过分的,但是有充分的理由,正如您很快就会看到的那样。)

嵌套组件

头部内部嵌套了一个标准HTML </code>元素。</span> <span>此元素与嵌套在其中的子元素内容一起提供给<code><h:head></code>组件。</span> </p> <p> <span>在文档主体中,JSF表达式包含在<code>#{}</code>语法中。</span> <span>这与<code>${}</code>格式的JSP表达式完全类似:它允许访问范围内的Java对象和简单函数。</span> </p> <p> <span>JSF的基本模式很简单:使用Facelets构建引用组件库的XML树,然后使用库中的组件将Java对象呈现为HTML。</span> </p> <h3 class="body"> <span style="font-weight: bold;">在JSF中使用Java对象</span> </h3> <p> <span>回到清单1,请注意,在执行此标记时,在JSF表达式( <code>${javaBean.content</code> )内, <code>javaBean</code>对象在作用域内。</span> <span>Facelets的XHTML访问<code>javaBean</code>对象上的<code>.content</code>属性。</span> <span>最终输出是一个Web界面,该界面将Facelets视图结构与Java的服务器端数据和逻辑功能合并在一起。</span> </p> <p> <span>使用JSF表达式只是从JSF用户界面访问Java应用程序数据的一种方法。</span> <span>最终,您将要探索JSF组件与Java后端交互的其他方式-诸如数据列表和网格以及各种输入控件之类的东西。</span> <span>到目前为止,已经足够了解JSF如何使用XML标记(或注释)来创建组件树,该组件树根据Java对象中包含的数据输出HTML。</span> </p> <p class="sidebar"></p> <h3 class="body"> <span style="font-weight: bold;">注释与XML</span> </h3> <p> <span>使用JSF 2.3,可以使用批注定义JSF组件,从而完全避开XML元数据。</span> <span>完全可以定义和部署JSF应用程序,而无需编辑任何XML。</span> </p> <h3 class="body"> <span style="font-weight: bold;">JSF应用程序的结构</span> </h3> <p> <span>与JavaServer Pages和Servlet API一样 ,JavaServer Faces也需要标准的目录结构和元数据。</span> <span>这些被部署为<em>.war</em>文件。</span> </p> <p> <span>.war文件的结构类似于Servlet或JSP应用程序。</span> <span>它包含一个<code>/web-app</code>目录,其中包含应用程序的标记文件(在本例中为HTML,JSP和Facelets),以及一个<code>/WEB-INF</code>目录,该目录提供了描述应用程序的元数据。</span> </p> <p class="sidebar"></p> <h3 class="body"> <span style="font-weight: bold;">服务JSF</span> </h3> <p> <span>尽管您可以在Glassfish之类的Java EE容器中运行JSF,但实际上只需要一个简单的servlet容器 。</span> <span>Tomcat是JSF和其他服务器端Java技术的流行容器。</span> </p> <h2> <span style="font-weight: bold;">JSF 2.3:规范和实现</span> </h2> <p> <span>Java的优势之一是它基于标准,并且这些标准由开放源代码社区流程控制。</span> <span>自成立以来,Java Community Process(JCP)一直监督Java技术的发展。</span> <span>一旦规范或规范改进得到JCP的开发和批准,就可以由多方实施。</span> <span>直到最近,Servlet,JSP和JSF都是使用JCP的开源规范过程开发的。</span> </p> <p> <span>截至撰写本文时,最新的JSF规范是JSF 2.3 ,于2017年作为Java EE 8的一部分发布。Oracle(现为Eclipse的) Mojarra是JSF参考实现,而MyFaces和PrimeFaces是受欢迎的第三方实现。</span> </p> <p> <span>这些框架中的每一个都实现JSF核心,其中包括一些标准组件。</span> <span>供应商还可以在标准之上提供其他组件库。</span> <span>在评估JSF框架时,最好考虑一下应用程序的需求以及可用的组件库来帮助您构建它。</span> <span>理想情况下,您的JSF框架应立即使您尽可能接近所需。</span> </p> <h2> <span style="font-weight: bold;">JSF 2.3中的MVC</span> </h2> <p> <span>JSF是一个<em>MVC框架</em> ,实现了model-view-controller模式 。</span> <span>在MVC模式中,其想法是将UI的三个关注点分离为谨慎的部分,因此更易于管理。</span> <span>通常, <em>视图</em>负责显示模型中的数据,而<em>控制器</em>负责设置模型并将用户路由到正确的视图。</span> </p> <p> <span>在JSF实现中,视图是Facelets页面及其XML标签集。</span> <span>这些定义了用户界面的布局。</span> <span>使用JSF的另一半是服务器端,其中Java类支持这些UI组件。</span> </p> <p class="sidebar"></p> <h3 class="body"> <span style="font-weight: bold;">JSF 2.3中不推荐使用的托管bean</span> </h3> <p> <span>JSF 2.3中已弃用了托管bean批注,并已将其替换为CDI( 上下文和依赖注入 )。</span> <span>使用CDI,开发人员可以定义上下文并将对象注入该上下文。</span> <span>那些熟悉托管bean的人会发现注释语法略有不同,但是语义仍然完全相同。</span> </p> <h3 class="body"> <span style="font-weight: bold;">控制器豆</span> </h3> <p> <span>在JSF 2.3中,控制器bean提供了MVC方程式的<em>控制器</em>部分。</span> <span>普通的Java对象(通常称为POJO或普通的Java对象)提供了模型。</span> </p> <p> <span>就流程而言,控制器Bean:</span> </p> <ol> <li> <span>确定将用户请求定向到哪里</span> </li> <li> <span>为模型设置POJO</span> </li> <li> <span>使用模型渲染Facelets视图</span> </li> </ol> <p> <span>然后,JSF将组件树和模型折叠在一起以呈现输出HTML。</span> </p> <p> <span>清单2显示了如何使用CDI定义清单1中的<code>javaBean</code>对象。</span> <span>此清单假定应用程序在其依赖项中包含cdi-api-1.2.jar。</span> </p> <h4> <span style="font-weight: bold;">清单2.使用CDI定义的JavaBean</span> </h4> <pre class="has"><code><code> import javax.inject.Named; import javax.enterprise.context.SessionScoped; @Named @ViewScoped public class JavaBean implements Serializable { private String content = ìWelcome to JSF!î // getters/setters } </code></code></pre> <h2> <span style="font-weight: bold;">带有PrimeFaces的JSF 2.3</span> </h2> <p> <span>在下一部分中,我将使用PrimeFaces向您展示JSF如何实现MVC模式,事件驱动的消息传递和可重用组件。</span> <span>首先,打开PrimeFaces Showcase ,单击左侧列中的<strong>Data</strong>链接,然后选择<strong>DataList</strong> 。</span> <span>这将调出PrimeFaces的DataList演示代码。</span> </p> <p> <span>图1显示了在哪里可以找到这些样本。</span> </p> <a href="http://img.e-com-net.com/image/info8/5f48abe4df5f4ba78271e3829b788ab1.jpg" target="_blank"><img alt="什么是jsf_什么是JSF? JavaServer Faces简介_第1张图片" width="650" height="297" class="lazy" src="http://img.e-com-net.com/image/info8/5f48abe4df5f4ba78271e3829b788ab1.jpg" style="display:block;margin:0 auto;border:1px solid black;"></a> <span><small class="credit">马修·泰森(Matthew Tyson)</small></span> <p> <span>图1. PrimeFaces展示柜</span> </p> <p> <span>图2显示了一个简单数据表的输出,该表取自PrimeFaces DataList演示。</span> </p> <a href="http://img.e-com-net.com/image/info8/6b7bde6e23564affb4e284c693ab971d.jpg" target="_blank"><img alt="什么是jsf_什么是JSF? JavaServer Faces简介_第2张图片" width="300" height="274" class="lazy" src="http://img.e-com-net.com/image/info8/6b7bde6e23564affb4e284c693ab971d.jpg" style="display:block;margin:0 auto;border:1px solid black;"></a> <span><small class="credit">马修·泰森(Matthew Tyson)</small></span> <p> <span>图2.基本DataList组件输出</span> </p> <h3 class="body"> <span style="font-weight: bold;">PrimeFaces DataList:访问数据模型</span> </h3> <p> <span>清单3给出了此<code>dataList</code>显示的标记。</span> <span>如果滚动到PrimeFaces展示柜的底部,则可以在<code>dataList.xhtml</code>选项卡中看到标记。</span> </p> <h4> <span style="font-weight: bold;">清单3. PrimeFaces DataList的Facelet</span> </h4> <pre class="has"><code><code> <p:dataList value="#{dataListView.cars1}" var="car" type="ordered"> <f:facet name="header"> Basic </f:facet> #{car.brand}, #{car.year} </p:dataList> </code></code></pre> <p> <span>在清单3中,请注意<code>dataList</code>组件的<code>value</code>属性。</span> <span>您可以看到它引用了<code>dataListView</code>对象,并访问它的<code>.cars1</code>属性。</span> <span>该组件将使用该字段返回的模型对象。</span> <span>JSF令牌使用常规访问器来引用对象属性,因此<code>.cars1</code>将引用对象上的<code>getCars()</code> getter。</span> </p> <p> <span>接下来,请注意<code>var="car"</code>属性。</span> <span>这告诉<code>dataList</code>组件在迭代<code>value</code>字段返回的汽车列表时要使用什么变量。</span> <span>这些属性特定于<code>dataList</code>组件,但<code>value</code>属性非常常见。</span> <span><code>var</code>属性对于迭代列表的组件也是常规的。</span> </p> <p> <span>在清单3的组件主体中,您可以看到可以通过诸如<code>#{car.brand}</code>类的JSF表达式访问<code>car</code>变量。</span> <span><code>dataListView.cars1</code>实例的每次迭代将输出<code>car.brand</code>字段。</span> </p> <p> <span>注意, <code><f:facet...></code>标记演示了自定义组件以使其显示方式的功能。</span> <span>在这种情况下,标头定义为<code>Basic</code> 。</span> </p> <p> <span>您可以通过将数据与标记结合起来,了解Facelets XML将如何驱动此输出。</span> <span>现在让我们看一下它背后的Java代码。</span> </p> <h2> <span style="font-weight: bold;">DataList的服务器端组件</span> </h2> <p> <span>清单4显示了<code>DataListView</code> ,清单3中的标记使用了Java类。您将很快看到<code>dataListView</code>实例如何与<code>DataListView</code>类相关联。</span> </p> <h4> <span style="font-weight: bold;">清单4. DataListView类</span> </h4> <pre class="has"><code><code> package org.primefaces.showcase.view.data; import java.io.Serializable; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Named; // Pre JSF 2.3, this was: // import javax.faces.bean.ManagedBean; import javax.inject.Inject; import javax.faces.bean.ViewScoped; import org.primefaces.showcase.domain.Car; import org.primefaces.showcase.service.CarService; @Named @ViewScoped public class DataListView implements Serializable { private List<Car> cars1; private Car selectedCar; @Inject("#{carService}") private CarService service; @PostConstruct public void init() { cars1 = service.createCars(10); } public List getCars1() { return cars1; } public void setService(CarService service) { this.service = service; } } </code></code></pre> <p> <span>清单4还有一些其他重要元素,我们将逐一考虑。</span> </p> <h3 class="body"> <span style="font-weight: bold;">依赖注入和注释</span> </h3> <p> <span>首先,请注意<code>DataListView</code>类使用<code>@Named</code>注释,您可以从import <code>import javax.inject.Named;</code>看到它<code>import javax.inject.Named;</code></span> <span>是JSF的一部分。</span> <span><code>@Named</code>注释告诉JSF此bean是应用程序的一部分。</span> <span><code>@ViewScoped</code>批注告知JSF,Bean将在视图的整个生命周期内都存在。</span> </p> <p> <span>接下来,观察<code>CarService</code>属性具有<code>@Inject</code>注释(在JSF 2.3之前称为<code>@ManagedProperty</code> )。</span> <span>这是JSF的另一项功能,它允许将bean“连接在一起”,这是一种由Spring框架和其他依赖项注入工具普及的技术。</span> <span>本质上,JSF将在范围内找到<code>carService</code>对象,并将其自动关联到<code>DataListView</code>对象上的<code>service</code>字段。</span> </p> <blockquote> <p>翻译自: https://www.infoworld.com/article/3322533/what-is-jsf-introducing-javaserver-faces.html</p> </blockquote> <p>什么是jsf</p> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1282851782409601024"></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">你可能感兴趣的:(什么是jsf_什么是JSF? JavaServer Faces简介)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1880672288769110016.htm" title="PHP流程控制" target="_blank">PHP流程控制</a> <span class="text-muted">程序员老卢</span> <a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/php%E5%9F%BA%E7%A1%80/1.htm">php基础</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录if语句else语句elseif语句while语句do-while语句for语句foreach语句breakcontinueswitch语句match表达式returnincludeinclude_oncerequirerequire_oncegoto流程控制是指用于控制代码执行顺序的机制,PHP提供了多种流程控制结构,例如条件判断语句以及循环语句等。if语句if语句是很多语言包括PHP在内最</div> </li> <li><a href="/article/1880672287179468800.htm" title="Python type()函数" target="_blank">Python type()函数</a> <span class="text-muted">软件测试李同学</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/type%28%29%E5%87%BD%E6%95%B0/1.htm">type()函数</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0/1.htm">内置函数</a> <div>描述:type()函数只传第一个参数则返回对象的类型,三个参数返回新的类型对象,也就是说返回自定义的新类型。只传一个参数时,作用和isinstance()类似,但是有区别,type()不考虑继承关系,不认为子类是一种父类类型,而isinstance()考虑继承关系,认为子类是一种父类类型。所以,比较两个类型是否相同,推荐用isinstance()。语法:type(object)type(name,</div> </li> <li><a href="/article/1880672035135352832.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%9F%BA%E7%A1%80%E5%90%AF%E8%88%AA%EF%BC%9A%E4%BB%8E%E9%9B%B6%E5%88%B0%E5%B0%8F%E6%9C%89%E6%89%80%E6%88%90/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/java/1.htm">java</a> <div>一、什么是Java正则表达式Java正则表达式是一个用于匹配字符串的模板,由字符和特殊字符组成,可用于查找、替换、验证特定的模式。在Java中,我们可以使用java.util.regex包中的类来操作正则表达式。正则表达式在Java编程中发挥着重要作用。它可以被看作是一种定义字符串规则的工具,通过特定的模式来匹配、查找、替换和验证字符串。例如,我们可以使用正则表达式来验证用户输入的邮箱地址是否合法</div> </li> <li><a href="/article/1880671530262786048.htm" title="算法设计与分析第一章课后作业" target="_blank">算法设计与分析第一章课后作业</a> <span class="text-muted">小毛头~</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>第一章一.单选题1【单选题】子程序(包括函数和方法)是用来被调用的,递归指的是A、不同子程序之间直接或间接调用的程序设计方法B、同一个子程序直接或间接调用自己的程序设计方法C、子程序向调用它的程序段返回结果的程序设计方法D、子程序不向调用它的程序段返回结果的程序设计方法正确答案:B我的答案:B得分:4.0分2【单选题】背包问题:n个物品和1个背包。对物品i,其价值为vi,重量为wi,背包的容量为W</div> </li> <li><a href="/article/1880671530732548096.htm" title="Python的Matplotlib库详解" target="_blank">Python的Matplotlib库详解</a> <span class="text-muted">pumpkin84514</span> <a class="tag" taget="_blank" href="/search/python%E7%9B%B8%E5%85%B3/1.htm">python相关</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/matplotlib/1.htm">matplotlib</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Python的Matplotlib库详解Matplotlib是Python中功能强大的数据可视化库,广泛应用于科研、数据分析、报告生成等领域。它能创建各种类型的图表,帮助用户直观地展示数据。一、使用场景1.数据探索和分析:在数据科学领域,Matplotlib经常被用来绘制各种图表,如折线图、散点图、直方图等,以帮助分析和理解数据。2.报告生成:科研人员和数据分析师常用Matplotlib生成图表,</div> </li> <li><a href="/article/1880670648397787136.htm" title="Vue.js组件开发-解决PDF签章预览问题" target="_blank">Vue.js组件开发-解决PDF签章预览问题</a> <span class="text-muted">LCG元</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a> <div>在Vue.js组件开发中,解决PDF签章预览问题可能涉及多个方面,包括选择合适的PDF预览库、配置PDF.js(或其封装库如vue-pdf)以正确显示签章、以及处理可能的兼容性和性能问题。步骤和建议:1.选择合适的PDF预览库‌vue-pdf‌:基于PDF.js的Vue组件,提供响应式PDF查看、WebWorker优化的性能和丰富的API。但需要注意的是,vue-pdf可能默认不支持所有PDF签章</div> </li> <li><a href="/article/1880669513771446272.htm" title="Spring Boot 3项目集成Swagger3教程" target="_blank">Spring Boot 3项目集成Swagger3教程</a> <span class="text-muted">m0_74825746</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/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>SpringBoot3项目集成Swagger3教程??前言欢迎来到我的小天地,这里是我记录技术点滴、分享学习心得的地方。????技能清单编程语言:Java、C、C++、Python、Go、前端技术:Jquery、Vue.js、React、uni-app、EchartsUI设计:Element-ui、Antd、Color-ui后端技术:SpringBoot、Mybatis-plus、Swagger移</div> </li> <li><a href="/article/1880668380000743424.htm" title="springboot项目架构" target="_blank">springboot项目架构</a> <span class="text-muted">m0_74823471</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>前言SpringBoot是一个开源的Java基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它简化了基于Spring的应用开发,你只需要“启动”即可。一、springboot概述在SpringBoot出现之前,使用Spring框架开发应用程序时,开发人员需要花费大量时间进行复杂的配置,包括配置各种XML文件或者Java配置类来整合Spring的各个模块,如SpringMVC、Sp</div> </li> <li><a href="/article/1880666994999619584.htm" title="Spring MVC 拦截器" target="_blank">Spring MVC 拦截器</a> <span class="text-muted">阿乾之铭</span> <a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/MVC/1.htm">MVC</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、SpringMVC拦截器的作用拦截器是SpringMVC框架中处理HTTP请求的一种机制,通常用于在请求到达控制器(Controller)之前或从控制器返回结果之后进行额外的逻辑处理。可以用于以下场景:日志记录:记录每次请求的开始时间、结束时间、请求的参数、响应的结果等。认证和授权:在请求处理之前,检查用户的身份和权限。统一异常处理:捕获请求处理中的异常,并返回统一的错误响应。性能监控:记录请</div> </li> <li><a href="/article/1880666616023281664.htm" title="【数据结构】对象的比较" target="_blank">【数据结构】对象的比较</a> <span class="text-muted">爱吃香菜¹</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>Java数据类型分为基本数据类型和引用类型,基本数据类型可以直接比较大小,对于引用类型的变量不能直接比较。下面来讲解Java对象的比较。目录equals比较Comparble接口类的比较基于比较器比较equals比较equals是Object类中的方法,只能判断引用类型。默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。publicclassStudent{publicinta</div> </li> <li><a href="/article/1880666616958611456.htm" title="【数据结构】常见八大排序算法" target="_blank">【数据结构】常见八大排序算法</a> <span class="text-muted">爱吃香菜¹</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/1.htm">排序算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>目录插入排序1、直接插入排序:2、希尔排序选择排序1、直接选择排序:2、堆排序交换排序1、冒泡排序2、快速排序2.2挖坑法2.1hoare版本2.3前后指针法2.4快排非递归版归并排序1、归并排序递归版2、归并排序非递归计数排序排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,这里八大排序就是内部排序,指直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序。</div> </li> <li><a href="/article/1880665230116188160.htm" title="头歌实践平台(Educoder):python 教学案例三 字符类型及其操作" target="_blank">头歌实践平台(Educoder):python 教学案例三 字符类型及其操作</a> <span class="text-muted">Yu_Meng~</span> <a class="tag" taget="_blank" href="/search/%E5%A4%B4%E6%AD%8C/1.htm">头歌</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>第1关提取身份证号性别sfzh=input("输入身份证号")#代码开始sex=sfzh[:17]sex=int(sex)ifsex%2==0:print("性别女")else:print("性别男")#代码结束第2关提取身份证号生肖sfzh=input("输入身份证号")#代码开始#生肖对应字符串sxzf="猴鸡狗猪鼠牛虎兔龙蛇马羊"#年份是身份证号的第6位到第9位nf=sfzh[6:10]#注</div> </li> <li><a href="/article/1880664851055964160.htm" title="Python 爬虫入门教程:从零构建你的第一个网络爬虫" target="_blank">Python 爬虫入门教程:从零构建你的第一个网络爬虫</a> <span class="text-muted">m0_66323401</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>网络爬虫是一种自动化程序,用于从网站抓取数据。Python凭借其丰富的库和简单的语法,是构建网络爬虫的理想语言。本文将带你从零开始学习Python爬虫的基本知识,并实现一个简单的爬虫项目。1.什么是网络爬虫?网络爬虫(WebCrawler)是一种通过网络协议(如HTTP/HTTPS)获取网页内容,并提取其中有用信息的程序。常见的爬虫用途包括:收集商品价格和评价。抓取新闻或博客内容。统计数据分析。爬</div> </li> <li><a href="/article/1880664598886019072.htm" title="Linux 操作一:系统调用:文件读写" target="_blank">Linux 操作一:系统调用:文件读写</a> <span class="text-muted">余额不足12138</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>Linux操作一:系统调用:文件读写基本概念什么是文件简单的说,文件就是存储在硬件磁盘上的数据集合。文件通过什么来标识系统中在处理的文件(读、写操作)的时候,需要唯一能够识别这个文件,就需要一个针对文件的标识,以便在其它地方能识别出这个文件,于是就产生了文件描述符。文件描述符文件描述符是一些整数,简单的说就是一个文件ID,用于在系统中唯一的标识一个文件。文件描述符的总数也就是系统可以打开文件的最多</div> </li> <li><a href="/article/1880664094382551040.htm" title="web后端开发时不同框架的区别与选择" target="_blank">web后端开发时不同框架的区别与选择</a> <span class="text-muted">金色飞贼分贼本贼</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a> <div>Django、Flask和Node.js(Express)都是非常流行的Web开发框架,它们各有优缺点,适用于不同的开发场景。为了帮助开发者进行项目开发时做出更好的选择,这里介绍这几个框架的特点、优缺点、以及适用场景。一、Django(Python)概述:Django是一个高级的PythonWeb框架,它鼓励快速开发和干净、务实的设计。Django是一个“全栈”框架,提供了很多开箱即用的功能,如身</div> </li> <li><a href="/article/1880663338095013888.htm" title="KubeSphere 与 Pig 微服务平台的整合与优化:全流程容器化部署实践" target="_blank">KubeSphere 与 Pig 微服务平台的整合与优化:全流程容器化部署实践</a> <span class="text-muted">小盒子_spring</span> <a class="tag" taget="_blank" href="/search/%E5%AD%97%E8%8A%82%E4%B8%8E%E7%83%9F%E7%81%AB/1.htm">字节与烟火</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/KubeSphere/1.htm">KubeSphere</a><a class="tag" taget="_blank" href="/search/Pig%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%B9%B3%E5%8F%B0/1.htm">Pig微服务平台</a><a class="tag" taget="_blank" href="/search/Jenkins%E6%B5%81%E6%B0%B4%E7%BA%BF/1.htm">Jenkins流水线</a><a class="tag" taget="_blank" href="/search/SonarQube%E4%BB%A3%E7%A0%81%E5%AE%A1%E6%9F%A5/1.htm">SonarQube代码审查</a><a class="tag" taget="_blank" href="/search/Ingress/1.htm">Ingress</a><a class="tag" taget="_blank" href="/search/DevOps/1.htm">DevOps</a> <div>一、前言近年来,为了满足越来越复杂的业务需求,我们从传统单体架构系统升级为微服务架构,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是松耦合的,通过RPC或者是Rest协议来进行通信,可以按照业务领域来划分成独立的单元。但是微服务系统相对于以往的单体系统更为复杂,当业务增加时,服务也将越来越多,服务的频繁部署、监控将变得复杂起来,尤其在上了k8s以后会更加复杂。那么有没有一款全</div> </li> <li><a href="/article/1880663086004760576.htm" title="request.getRemoteAddr()获取ip地址时得到的值是[0:0:0:0:0:0:0:1]原因和解决方法" target="_blank">request.getRemoteAddr()获取ip地址时得到的值是[0:0:0:0:0:0:0:1]原因和解决方法</a> <span class="text-muted">Liquid road</span> <a class="tag" taget="_blank" href="/search/%E6%8A%A5%E9%94%99/1.htm">报错</a> <div>项目场景:使用request.getRemoteAddr()获取ip地址问题描述:在使用request.getRemoteAddr()获取ip地址的时候得到的值是[0:0:0:0:0:0:0:1]Request:{url='/1/haha',ip='[0:0:0:0:0:0:0:1]',classMethod='com.liquid.web.IndexController.index',args=</div> </li> <li><a href="/article/1880662707900837888.htm" title="毕业设计--基于Python+Django框架的豆瓣图书评论推荐可视化系统" target="_blank">毕业设计--基于Python+Django框架的豆瓣图书评论推荐可视化系统</a> <span class="text-muted">源码空间站11</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</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/django/1.htm">django</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/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/%E8%B1%86%E7%93%A3%E5%9B%BE%E4%B9%A6%E7%88%AC%E8%99%AB/1.htm">豆瓣图书爬虫</a> <div>1.系统概述本系统是一个基于Python和Django框架的豆瓣图书评论推荐可视化系统。通过收集并分析豆瓣图书的评论数据,结合可视化技术,系统能够为用户推荐感兴趣的图书,并以直观的方式展示图书评论的统计信息和分析结果。2.项目目标本项目的主要目标是设计并实现一个豆瓣图书评论推荐系统,具体目标如下:图书评论数据采集与存储:系统能够从豆瓣平台抓取图书评论数据,并将其存储在本地数据库中(db.sqlit</div> </li> <li><a href="/article/1880661574750892032.htm" title="Hutool工具库:Java开发提速的秘密武器" target="_blank">Hutool工具库:Java开发提速的秘密武器</a> <span class="text-muted">myshare2022</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、引言在当今快节奏的软件开发领域,Java作为主流编程语言,其开发效率的高低直接影响项目的进度、成本和质量。对于开发者而言,如何在保证代码质量的同时,显著提升开发速度,成为了亟待解决的关键问题。今天,我将为大家揭开一个强大工具——Hutool工具库的神秘面纱,它堪称Java开发提效的秘籍,能让你的开发工作如虎添翼。二、Hutool工具库初相识2.1什么是HutoolHutool是由国内开发者林智</div> </li> <li><a href="/article/1880661322459312128.htm" title="从零开始:在服务器上部署大模型并集成到 vscode +Cline使用" target="_blank">从零开始:在服务器上部署大模型并集成到 vscode +Cline使用</a> <span class="text-muted">一个正经的AI</span> <a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a> <div>1.引言(Introduction)欢迎来到本篇技术博客!在本文中,我将引导你一步一步地在阿里云服务器上部署Qwen大模型,并将其集成到Cline插件中。我们将从零开始,详细介绍每个步骤,确保即使是初学者也能轻松上手。近年来,大型语言模型(LLMs)展现出了强大的自然语言处理能力,吸引了越来越多的关注。Qwen系列模型是阿里巴巴开源的一系列强大的大语言模型,具有优秀的性能和广泛的应用场景。Olla</div> </li> <li><a href="/article/1880661321314267136.htm" title="内网安全攻防:渗透测试实战指南之内网信息搜集" target="_blank">内网安全攻防:渗透测试实战指南之内网信息搜集</a> <span class="text-muted">网络安全进阶</span> <a class="tag" taget="_blank" href="/search/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/1.htm">渗透测试</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/1.htm">渗透测试</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%AE%89%E5%85%A8/1.htm">信息安全</a> <div>《内网安全攻防:渗透测试实战指南》第2章:内网信息搜集内网渗透测试的核心是信息搜集。本章主要介绍了当前主机信息搜集、域内存活主机探测、域内端口扫描、域内用户和管理员权限的获取、如何获取域内网段划分信息和拓扑架构分析等,并介绍了域分析工具BloodHound的使用。搜集本机信息网络配置信息、操作系统及软件的信息、本机服务信息、进程列表、启动程序信息、计划任务、主机开机时间、用户列表、连接会话、端口列</div> </li> <li><a href="/article/1880658171584901120.htm" title="【图书介绍】《Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)》" target="_blank">【图书介绍】《Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)》</a> <span class="text-muted">夏天又到了</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B8%8E%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/1.htm">编程与应用开发</a><a class="tag" taget="_blank" href="/search/Spring%E5%BC%80%E5%8F%91/1.htm">Spring开发</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>本书重点基于版本Spring6.1.10、SpringMVC6.1.10、MyBatis3.5.16。详解SSM框架各组件用法及其整合方法,实战新闻发布管理系统、图书管理系统开发。配套示例源码、PPT课件、教学大纲、习题答案、教学视频。内容简介本书全面讲解使用流行轻量级框架SSM(Spring+SpringMVC+MyBatis)进行JavaEEWeb开发的技术,并以综合案例“学生选课管理系统”为</div> </li> <li><a href="/article/1880658045202132992.htm" title="函数与lambda表达式" target="_blank">函数与lambda表达式</a> <span class="text-muted">叶清湑</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/lambda/1.htm">lambda</a> <div>函数与lambda表达式在Python中,函数分为普通函数与lambda函数。Lambda是一个匿名函数,它是一种简写,表达更快。写法如下:自定义函数名=lambda若干参数:操作表达式deffun1(a,b,c):returna*b*cprint(fun1(3,4,10))fun2=lambdaa,b,c:a*b*c;print(fun2(3,5,10))</div> </li> <li><a href="/article/1880656282554265600.htm" title="Python VS Code报错ModuleNotFoundError: No module named ‘numpy‘以及No module named ‘xxx‘的原因及解决办法" target="_blank">Python VS Code报错ModuleNotFoundError: No module named ‘numpy‘以及No module named ‘xxx‘的原因及解决办法</a> <span class="text-muted">猛狗哭泣</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/bug/1.htm">bug</a><a class="tag" taget="_blank" href="/search/anaconda/1.htm">anaconda</a> <div>ModuleNotFoundError的两种类型及解决方法Nomodulenamed'numpy'Nomodulenamed'xxx'Nomodulenamed‘numpy’有的时候我们想import常用的包比如numpy或者pandas,而且电脑上是有安装这些包并且在Jupyter中可以正常使用的,但在VSCode或者Pycharm中import却会出现如题的错误。发生这种报错的原因是VSCod</div> </li> <li><a href="/article/1880655775286751232.htm" title="电子电气架构 --- 车载48V系统" target="_blank">电子电气架构 --- 车载48V系统</a> <span class="text-muted">车载诊断技术</span> <a class="tag" taget="_blank" href="/search/%E8%BD%A6%E8%BD%BD%E7%94%B5%E5%AD%90%E7%94%B5%E6%B0%94%E6%9E%B6%E6%9E%84/1.htm">车载电子电气架构</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E7%94%B5%E5%99%A8%E6%9E%B6%E6%9E%84%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B/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/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E7%94%B5%E5%99%A8%E6%9E%B6%E6%9E%84/1.htm">电子电器架构</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/1.htm">汽车</a><a class="tag" taget="_blank" href="/search/48/1.htm">48</a><a class="tag" taget="_blank" href="/search/V%E6%9E%B6%E6%9E%84/1.htm">V架构</a> <div>我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。人就应该满脑子都是前途,不再在意别人的看法不再害怕别人讨厌自己,不再畏手畏脚忧心忡忡也不会在睡前反回忆白天的行为,是否让对方产生误解用你那精神内耗</div> </li> <li><a href="/article/1880655270875557888.htm" title="Java之Class类&面向对象" target="_blank">Java之Class类&面向对象</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>Class类概念:类是具有相同属性或者行为的一类事物类本身可以再被抽象,因为类也有共同的属性和行为(比如类都有属性、构造器、方法,都能调用方法),所以把类们右抽象成一个类Class。Java中有一个Object类,是所有Java类的继承根源,其内部声明了数个应该在所有Java类中被改写的方法:hashCode()、equals()、toString()、getClass()等。其中getClass</div> </li> <li><a href="/article/1880654766904766464.htm" title="使用Selenium调试Edge浏览器的常见问题与解决方案" target="_blank">使用Selenium调试Edge浏览器的常见问题与解决方案</a> <span class="text-muted">程序员小雷</span> <a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/edge/1.htm">edge</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%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><a class="tag" taget="_blank" href="/search/%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">功能测试</a><a class="tag" taget="_blank" href="/search/postman/1.htm">postman</a> <div>背景介绍在当今互联网时代,网页爬虫已经成为数据获取的重要手段。而Selenium作为一款功能强大的自动化测试工具,被广泛应用于网页爬取任务中。虽然Chrome浏览器是Selenium用户的常见选择,但在某些工作环境中,我们可能需要使用Edge浏览器来进行自动化测试。然而,Edge浏览器在调试和使用过程中会遇到一些特有的挑战,本文将深入探讨这些问题,并提供实用的解决方案。问题陈述当尝试使用Selen</div> </li> <li><a href="/article/1880654637791506432.htm" title="【20.5 python中的FastAPI】" target="_blank">【20.5 python中的FastAPI】</a> <span class="text-muted">wang151038606</span> <a class="tag" taget="_blank" href="/search/python%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E5%AD%A6%E4%B9%A0/1.htm">python语言入门学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/fastapi/1.htm">fastapi</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>python中的FastAPIFastAPI是一个现代、快速(高性能)的Web框架,用于构建API,基于Python3.6+的类型提示。它利用了Python3.7+的新特性,如类型提示(TypeHints),来自动生成API文档(基于OpenAPI和SwaggerUI),以及进行参数校验和序列化/反序列化。FastAPI旨在简化API开发,同时保持高性能。FastAPI的特点快速:极高的性能,可与</div> </li> <li><a href="/article/1880653880195346432.htm" title="软件测试之单元测试" target="_blank">软件测试之单元测试</a> <span class="text-muted">程序员三藏</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</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/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a> <div>一、什么是单元测试?单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最小可测试单元通常是指函数或者类;单元测试属于最严格的软件测试手段,是最接近代码底层实现的验证手段,可以在软件开发的早期以最小的成本保证局部代码的质量。另外,单元测试都以自动化的方式执行,所以在大量回归测试的场景下执行单元测试,更能提高测试效率,另外,也可以帮助开发工程师改善代码的设</div> </li> <li><a href="/article/1880653881613021184.htm" title="【网络安全】消息鉴别" target="_blank">【网络安全】消息鉴别</a> <span class="text-muted">Hacker_Nightrain</span> <a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a> <div>1.消息鉴别1.1定义消息鉴别是指消息接收者对消息进行验证的过程,其目的是确保收到的消息来自可信的源点且在传输过程中未被篡改。这一过程主要检测消息的真实性和完整性。在网络安全领域,消息鉴别是确保数据传输安全性的关键技术之一。1.2必要性在信息传输过程中,存在多种潜在的安全威胁,包括但不限于:伪造攻击:攻击者可能伪造消息源,向网络中发送虚假消息,以误导接收者或进行欺诈。篡改攻击:消息在传输过程中可能</div> </li> <li><a href="/article/80.htm" title="java杨辉三角" target="_blank">java杨辉三角</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a> <div> package com.algorithm; /** * @Description 杨辉三角 * @author FuJianyong * 2015-1-22上午10:10:59 */ public class YangHui { public static void main(String[] args) { //初始化二维数组长度 int[][] y</div> </li> <li><a href="/article/207.htm" title="《大话重构》之大布局的辛酸历史" target="_blank">《大话重构》之大布局的辛酸历史</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/%E9%87%8D%E6%9E%84/1.htm">重构</a> <div>《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。   背景         公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中</div> </li> <li><a href="/article/334.htm" title="电驴链接在线视频播放源码" target="_blank">电驴链接在线视频播放源码</a> <span class="text-muted">dubinwei</span> <a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81/1.htm">源码</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E9%A9%B4/1.htm">电驴</a><a class="tag" taget="_blank" href="/search/%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">播放器</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91/1.htm">视频</a><a class="tag" taget="_blank" href="/search/ed2k/1.htm">ed2k</a> <div>本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网: http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。 项目源码: http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。 项目源码依赖于两个库项目,库项目一链接: http://git.oschina.</div> </li> <li><a href="/article/461.htm" title="Javascript中函数的toString()方法" target="_blank">Javascript中函数的toString()方法</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/toString/1.htm">toString</a><a class="tag" taget="_blank" href="/search/function/1.htm">function</a><a class="tag" taget="_blank" href="/search/object/1.htm">object</a> <div>简述     The toString() method returns a string representing the source code of the function.     简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。 句法     function.</div> </li> <li><a href="/article/588.htm" title="struts处理自定义异常" target="_blank">struts处理自定义异常</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a> <div>很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。 非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。 此处我们用的是非运行时异常,首先定义一个异常LoginException: /** * 类描述:登录相</div> </li> <li><a href="/article/715.htm" title="Linux中find常见用法示例" target="_blank">Linux中find常见用法示例</a> <span class="text-muted">510888780</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数;</div> </li> <li><a href="/article/842.htm" title="SpringMVC的各种参数绑定方式" target="_blank">SpringMVC的各种参数绑定方式</a> <span class="text-muted">Harry642</span> <a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a><a class="tag" taget="_blank" href="/search/%E7%BB%91%E5%AE%9A/1.htm">绑定</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E5%8D%95/1.htm">表单</a> <div>1. 基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post&q</div> </li> <li><a href="/article/969.htm" title="Java 获取Oracle ROWID" target="_blank">Java 获取Oracle ROWID</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div> A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row. The oracle.sql.ROWID class i</div> </li> <li><a href="/article/1096.htm" title="java获取方法的参数名" target="_blank">java获取方法的参数名</a> <span class="text-muted">antlove</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><a class="tag" taget="_blank" href="/search/parameter/1.htm">parameter</a><a class="tag" taget="_blank" href="/search/method/1.htm">method</a><a class="tag" taget="_blank" href="/search/reflect/1.htm">reflect</a> <div>reflect.ClassInformationUtil.java package reflect; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.Modifier; import javassist.bytecode.CodeAtt</div> </li> <li><a href="/article/1223.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/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/%E6%9B%BF%E6%8D%A2/1.htm">替换</a><a class="tag" taget="_blank" href="/search/%E6%8F%90%E5%8F%96/1.htm">提取</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E6%89%BE/1.htm">查找</a> <div>正则表达式的查找;主要是用到String类中的split();       String str;      str.split();方法中传入按照什么规则截取,返回一个String数组   常见的截取规则: str.split("\\.")按照.来截取 str.</div> </li> <li><a href="/article/1350.htm" title="Java中equals()与hashCode()方法详解" target="_blank">Java中equals()与hashCode()方法详解</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/set/1.htm">set</a><a class="tag" taget="_blank" href="/search/equals%28%29/1.htm">equals()</a><a class="tag" taget="_blank" href="/search/hashCode%28%29/1.htm">hashCode()</a> <div>一.equals()方法详解     equals()方法在object类中定义如下:  public boolean equals(Object obj) { return (this == obj); }    很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I</div> </li> <li><a href="/article/1477.htm" title="精通Oracle10编程SQL(4)使用SQL语句" target="_blank">精通Oracle10编程SQL(4)使用SQL语句</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</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/plsql/1.htm">plsql</a> <div>--工资级别表 create table SALGRADE ( GRADE NUMBER(10), LOSAL NUMBER(10,2), HISAL NUMBER(10,2) ) insert into SALGRADE values(1,0,100); insert into SALGRADE values(2,100,200); inser</div> </li> <li><a href="/article/1604.htm" title="【Nginx二】Nginx作为静态文件HTTP服务器" target="_blank">【Nginx二】Nginx作为静态文件HTTP服务器</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/HTTP%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">HTTP服务器</a> <div> Nginx作为静态文件HTTP服务器 在本地系统中创建/data/www目录,存放html文件(包括index.html) 创建/data/images目录,存放imags图片 在主配置文件中添加http指令   http { server { listen 80; server_name </div> </li> <li><a href="/article/1731.htm" title="kafka获得最新partition offset" target="_blank">kafka获得最新partition offset</a> <span class="text-muted">blackproof</span> <a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/partition/1.htm">partition</a><a class="tag" taget="_blank" href="/search/offset/1.htm">offset</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E6%96%B0/1.htm">最新</a> <div>kafka获得partition下标,需要用到kafka的simpleconsumer   import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.</div> </li> <li><a href="/article/1858.htm" title="centos 7安装docker两种方式" target="_blank">centos 7安装docker两种方式</a> <span class="text-muted">ronin47</span> <div>      第一种是采用yum 方式              yum install -y docker           </div> </li> <li><a href="/article/1985.htm" title="java-60-在O(1)时间删除链表结点" target="_blank">java-60-在O(1)时间删除链表结点</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class DeleteNode_O1_Time { /** * Q 60 在O(1)时间删除链表结点 * 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点 * * Assume the list is: * head->...->nodeToDelete->mNode->nNode->..</div> </li> <li><a href="/article/2112.htm" title="nginx利用proxy_cache来缓存文件" target="_blank">nginx利用proxy_cache来缓存文件</a> <span class="text-muted">cfyme</span> <a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a> <div>user  zhangy users; worker_processes 10; error_log  /var/vlogs/nginx_error.log  crit; pid        /var/vlogs/nginx.pid; #Specifies the value for ma</div> </li> <li><a href="/article/2239.htm" title="[JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题" target="_blank">[JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a> <div>     假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:     string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"     定义一个0整数c,然后用这个整数c去</div> </li> <li><a href="/article/2366.htm" title="如何集成支付宝官方文档" target="_blank">如何集成支付宝官方文档</a> <span class="text-muted">dai_lm</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>官方文档下载地址 https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash 集成的必要条件 1. 需要有自己的Server接收支付宝的消息 2. 需要先制作app,然后提交支付宝审核,通过后才能集成 调试的时候估计会真的扣款,请注意 </div> </li> <li><a href="/article/2493.htm" title="应该在什么时候使用Hadoop" target="_blank">应该在什么时候使用Hadoop</a> <span class="text-muted">datamachine</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html 存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。 --------------------------------------------万能的分割线-------------------------------- 有人问我,“你在大数据和Hado</div> </li> <li><a href="/article/2620.htm" title="在GridView中对于有外键的字段使用关联模型进行搜索和排序" target="_blank">在GridView中对于有外键的字段使用关联模型进行搜索和排序</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a> <div>在GridView中使用关联模型进行搜索和排序 首先我们有两个模型它们直接有关联: class Author extends CActiveRecord { ... } class Post extends CActiveRecord { ... function relations() { return array( '</div> </li> <li><a href="/article/2747.htm" title="使用NSString 的格式化大全" target="_blank">使用NSString 的格式化大全</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Objective-C/1.htm">Objective-C</a> <div>格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c</div> </li> <li><a href="/article/2874.htm" title="使用activeX插件对象object滚动有重影" target="_blank">使用activeX插件对象object滚动有重影</a> <span class="text-muted">蕃薯耀</span> <a class="tag" taget="_blank" href="/search/activeX%E6%8F%92%E4%BB%B6/1.htm">activeX插件</a><a class="tag" taget="_blank" href="/search/%E6%BB%9A%E5%8A%A8%E6%9C%89%E9%87%8D%E5%BD%B1/1.htm">滚动有重影</a> <div>  使用activeX插件对象object滚动有重影   <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#</div> </li> <li><a href="/article/3001.htm" title="SpringMVC4零配置" target="_blank">SpringMVC4零配置</a> <span class="text-muted">hanqunfeng</span> <a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a> <div>基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。     项目说明如下: 1.db.sql是项目中用到的表,数据库使用的是oracle11g 2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动; 3.默认项目为零配置启动,如果需要更改启动方式,请</div> </li> <li><a href="/article/3128.htm" title="《开源框架那点事儿16》:缓存相关代码的演变" target="_blank">《开源框架那点事儿16》:缓存相关代码的演变</a> <span class="text-muted">j2eetop</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E6%A1%86%E6%9E%B6/1.htm">开源框架</a> <div>问题引入 上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。 该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。 当然去看相关实现代代码的时候,大致是下面的样子。 [java] view plain copy print ? public vo</div> </li> <li><a href="/article/3255.htm" title="AngularJS浅析" target="_blank">AngularJS浅析</a> <span class="text-muted">kvhur</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>概念 AngularJS is a structural framework for dynamic web apps. 了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm Directive 扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间</div> </li> <li><a href="/article/3382.htm" title="架构师之jdk的bug排查(一)---------------split的点号陷阱" target="_blank">架构师之jdk的bug排查(一)---------------split的点号陷阱</a> <span class="text-muted">nannan408</span> <a class="tag" taget="_blank" href="/search/split/1.htm">split</a> <div>1.前言.    jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug. 2.代码 String[] paths = "object.object2.prop11".split("'"); System.ou</div> </li> <li><a href="/article/3509.htm" title="如何对10亿数据量级的mongoDB作高效的全表扫描" target="_blank">如何对10亿数据量级的mongoDB作高效的全表扫描</a> <span class="text-muted">quentinXXZ</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>  本文链接:  http://quentinXXZ.iteye.com/blog/2149440 一、正常情况下,不应该有这种需求 首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。 说一下,</div> </li> <li><a href="/article/3636.htm" title="C语言算法之水仙花数" target="_blank">C语言算法之水仙花数</a> <span class="text-muted">qiufeihu</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>/** * 水仙花数 */ #include <stdio.h> #define N 10 int main() { int x,y,z; for(x=1;x<=N;x++) for(y=0;y<=N;y++) for(z=0;z<=N;z++) if(x*100+y*10+z == x*x*x</div> </li> <li><a href="/article/3763.htm" title="JSP指令" target="_blank">JSP指令</a> <span class="text-muted">wyzuomumu</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a> <div> jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %> 常用的三种指令: page,include,taglib page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%> include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include</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>