当前位置: 首页 > 编程日记 > 正文

Java Web学习总结(17)——JSP属性范围

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围。

一、JSP属性范围

JSP中提供了四种属性范围,四种属性范围分别指以下四种:

  • 当前页:一个属性只能在一个页面中取得,跳转到其他页面无法取得
  • 一次服务器请求:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页面可以继续取得。
  • 一次会话:一个用户设置的内容,只要是与此用户相关的页面都可以访问(一个会话表示一个人,这个人设置的东西只要这个人不走,就依然有效)
  • 上下文中:在整个服务器上设置的属性,所有人都可以访问

二、属性的操作方法

既然JSP中提供了四种属性范围,则四种属性范围中都将包含以下的属性操作方法。

No.

方法

描述

1

public void setAttribute(String name,Object value)

设置属性

2

public object getAttribute(String name)

取得属性

3

public void removeAttribute(String name)

删除属性

属性的操作无外乎就是增加、取得和删除这个几个操作。

单词Attribute的意思是“属性”,setAttribute(String name,Object value)从单词的组合来看就可以知道是这个方法的是设置属性,设置属性的名字和属性的值,名字(name)String类型,值(value)Object类型,由于值为Object类型,这表示可以设置任意类型的数据作为值,因为所有的类都是从Object类型继承而来。因此设置属性值的时候可以是任意类型的数据。getAttribute(String name)方法是根据属性的名字取得属性,removeAttribute(String name)方法是根据属性的名字删除属性。

三、JSP四种属性范围的具体介绍

3.1、page属性范围(pageContext

page属性范围相对好理解一些:在一个页面设置的属性,跳转到其他页面就无法访问了。但是在使用page属性范围的时候必须注意的是,虽然习惯上将页面范围的属性称为page范围,但是实际上操作的时候是使用pageContext内置对象完成的。

pageContext属性范围操作流程图

    

pageContext从字面上的定义,可以发现,是表示一个页面(page)的上下文(Context),可以表示一个页面中的所有内容。

从操作流程图来看,在第一个页面设置的属性经过服务器端跳转到第二个页面以后,在第二个页面是无法取得在第一个页面中设置的属性的,就好比现在坐着的桌子上有一支笔,但一旦离开了这张桌子,坐到别的桌子上时,笔就没有了。

下面通过代码来观察此范围的属性

范例:pageContextDemo01.jsp

在页面中设置两个属性

复制代码
 1 <%@page contentType="text/html;charset=UTF-8"%>
 2 <%@page import="java.util.*"%>
 3 <%
 4     //此时设置的属性只能够在本页中取得
 5     pageContext.setAttribute("name","孤傲苍狼");  //设置属性
 6     pageContext.setAttribute("date",new Date()); //设置属性
 7     //注意:这里设置的两个属性的名字分别为name和date,这两个是字符串类型的数据,但对应的属性值MLDN和new Date这个两个值却不是字符串类型,而是两个Object类型的数据。
 8 %>
 9 <%
10     //取得设置的属性
11     String refName = (String)pageContext.getAttribute("name");  
12     //由于取得的值为Object类型,因此必须使用String强制向下转型,转换成String类型
13     Date refDate = (Date)pageContext.getAttribute("date");
14 %>
15 <h1>姓名:<%=refName%></h1>
16 <h1>日期:<%=refDate%></h1>
复制代码

程序运行结果如下:

这说明了在本页设置的pageContext范围属性在本页确实可以取得,下面使用跳转语句,观察跳转之后是否还可以取得属性。

范例:pageScopeDemo02.jsp

复制代码
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4     pageContext.setAttribute("name","孤傲苍狼");  
5     pageContext.setAttribute("date",new Date()); 
6 %>
7 <%--使用jsp:forward标签进行服务器端跳转--%>
8 <jsp:forward page="/pageScopeDemo03.jsp" />
复制代码

范例:pageScopeDemo03.jsp

复制代码
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4     String refName = (String)pageContext.getAttribute("name");  
5     Date refDate = (Date)pageContext.getAttribute("date");
6 %>
7 <h1>姓名:<%=refName%></h1>
8 <h1>日期:<%=refDate%></h1>
复制代码

在以上程序中的pageScopeDemo02.jsp只是设置了两个属性,跳转到pageScopeDemo03.jsp之后再在pageScopeDemo03.jsp中取在pageScopeDemo02.jsp设置的page属性。此时,运行结果如下:

使用了服务器端跳转,但是发现内容并不能取得,证明page范围的属性只能在本页中取得,跳转到其他页面之中不能取得。如果现在希望跳转到其他页面之中,依然可以取得,则可以扩大属性范围,使用request属性范围即可。

3.2、request属性范围

request属性范围表示在一次服务器跳转中有效,只要是服务器跳转,则设置的request属性可以一直传递下去。

  

范例:requestScopeDemo01.jsp

复制代码
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4     request.setAttribute("name","孤傲苍狼");  
5     request.setAttribute("date",new Date()); 
6 %>
7 <%--使用jsp:forward标签进行服务器端跳转--%>
8 <jsp:forward page="/requestScopeDemo02.jsp" />
复制代码

范例:requestScopeDemo02.jsp

复制代码
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4     //取得requestScopdemo01.jsp设置的属性
5     String refName = (String)request.getAttribute("name");  
6     Date refDate = (Date)request.getAttribute("date");
7 %>
8 <h1>姓名:<%=refName%></h1>
9 <h1>日期:<%=refDate%></h1>
复制代码

运行结果如下:

从运行结果来看,程序跳转了,但是与page范围相比,内容可以向下继续传递,即在第一个页面设置的属性跳转到第二个页面后在第二个页面中依然可以取得第一个页面设置的属性。

如果现在有第三个页面了,则也可以继续向后传递

范例:修改requestScopeDemo02.jsp

1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%--使用jsp:forward标签进行服务器端跳转--%>
4 <jsp:forward page="/requestScopeDemo03.jsp" />

范例:requestScopeDemo03.jsp

复制代码
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4     //取得requestScopdemo01.jsp设置的属性
5     String refName = (String)request.getAttribute("name");  
6     Date refDate = (Date)request.getAttribute("date");
7 %>
8 <h1>姓名:<%=refName%></h1>
9 <h1>日期:<%=refDate%></h1>
复制代码

以上的结果依然可以访问,但是如果,此时使用了超链接的方式传递的话,则属性是无法向下继续传递的。

范例:修改requestScopeDemo03.jsp

复制代码
 1 <%@page contentType="text/html;charset=UTF-8"%>
 2 <%@page import="java.util.*"%>
 3 <%
 4     //取得requestScopdemo01.jsp设置的属性
 5     String refName = (String)request.getAttribute("name");  
 6     Date refDate = (Date)request.getAttribute("date");
 7 %>
 8 <h1>姓名:<%=refName%></h1>
 9 <h1>日期:<%=refDate%></h1>
10 <h1>
11 <%--使用超链接的形式跳转,这是客户端跳转,URL地址会改变--%>
12 <a href="${pageContext.request.contextPath}/requestScopeDemo04.jsp">跳转到requestScopeDemo04.jsp</a>
13 </h1>
复制代码

此时使用了超链接跳转,一旦跳转之后,地址栏改变,所以此种跳转也可以称为客户端跳转。

requestScopeDemo04.jsp

复制代码
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4     //取得requestScopdemo01.jsp设置的属性
5     String refName = (String)request.getAttribute("name");  
6     Date refDate = (Date)request.getAttribute("date");
7 %>
8 <h1>姓名:<%=refName%></h1>
9 <h1>日期:<%=refDate%></h1>
复制代码

运行结果:

requestScopeDemo04.jsp页面显示的结果是null。这说明了在requestScopeDemo01.jsp这个页面设置的属性经过超链接这种客户端跳转到别的页面时别的页面是无法取得requestScopeDemo01.jsp中设置的属性的。

如果还想进一步扩大属性范围,则可以使用session范围属性

3.3、session属性范围

session设置的属性不管如何跳转,都可以取得的。当然,session只针对一个用户

  

在第一个页面上设置的属性,跳转(服务器跳转/客户端跳转)到其他页面之后,其他的页面依然可以取得第一个页面上设置的属性。

下面通过代码来观察session属性范围

范例:sessionScopeDemo01.jsp

复制代码
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4     //此时设置的属性只能够在与本页相关的任何页面中取得
5     session.setAttribute("name","孤傲苍狼");  //设置属性
6     session.setAttribute("date",new Date());
7 %>
8 <%--使用服务器端跳转--%>
9 <jsp:forward page="/sessionScopeDemo02.jsp"/>
复制代码

这里使用的是服务器端跳转

sessionScopeDemo02.jsp

复制代码
 1 <%@page contentType="text/html;charset=UTF-8"%>
 2 <%@page import="java.util.*"%>
 3 <%
 4     String refName = (String)session.getAttribute("name");
 5     Date refDate = (Date)session.getAttribute("date");
 6 %>
 7 <h1>姓名:<%=refName%></h1>
 8 <h1>日期:<%=refDate%></h1>
 9 <%--使用超链接这种客户端跳转--%>
10 <h1><a href="${pageContext.request.contextPath}/sessionScopeDemo03.jsp">sessionScopeDemo03</a></h1>
复制代码

这里使用的是超链接这种客户端跳转

运行程序sessionScopeDemo01.jsp结果如下所示:

  

sessionScopeDemo03.jsp

复制代码
1 <%@page contentType="text/html;charset=UTF-8"%>
2 <%@page import="java.util.*"%>
3 <%
4     String refName = (String)session.getAttribute("name");
5     Date refDate = (Date)session.getAttribute("date");
6 %>
7 <h1>姓名:<%=refName%></h1>
8 <h1>日期:<%=refDate%></h1>
复制代码

点击超链接sessionScopeDemo03,跳转到了sessionScopeDemo03.jsp这个页面,此时程序的运行结果如下:

  

这说明了即使是采用客户端跳转,在别的页面依然可以取得第一个页面中设置的session属性。但是,如果,此时新开了一个浏览器,则sessionScopeDemo03.jsp肯定无法取得sessionScopeDemo01.jsp中设置的session对象的属性,因为session只是保留了一个人的信息。

如果一个属性想让所有的用户都可以访问,则可以使用最后一种属性范围:application范围。

3.4application属性范围

  

因为application属性范围是在服务器上设置的一个属性,所以一旦设置之后任何用户都可以浏览到此属性。

下面通过代码来观察application属性范围

范例:applicationScopeDemo01.jsp

复制代码
1 <%@ page contentType="text/html;charset=GBK"%>
2 <%@ page import="java.util.*"%>
3 <%
4     //此时设置的属性任何用户都可以取得
5     application.setAttribute("name","孤傲苍狼");  //设置属性
6     application.setAttribute("date",new Date());
7 %>
8 <h1><a href="${pageContext.request.contextPath}/applicationScopeDemo02.jsp">applicationScopeDemo02</a></h1>
复制代码

范例:applicationScopeDemo02.jsp

复制代码
1 <%@ page contentType="text/html;charset=GBK"%>
2 <%@ page import="java.util.*"%>
3 <%
4     String refName = (String)application.getAttribute("name");
5     Date refDate = (Date)application.getAttribute("date");
6 %>
7 <h1>姓名:<%=refName%></h1>
8 <h1>日期:<%=refDate%></h1>
复制代码

观察页面的运行效果:

开启多个浏览器窗口,运行applicationScopeDemo02.jsp时,都可以显示出上图所示的结果,因为属性范围设置在了服务器中,所以只要是连接到此服务器的任意用户都可以取得此属性,当然,如果服务器关闭的话,则此属性肯定消失。

如把Tomcat服务器先关闭后再重新启动,打开浏览器窗口运行applicationScopeDemo02.jsp时,得到的结果如下图所示:

  

注意:如果在服务器上设置了过多的application属性,则会影响到服务器的性能。

3.5、关于pageContext属性范围的进一步补充

之前所讲解的四种属性范围,实际上都是通过pageContext属性范围设置上的。打开pageContext所在的说明文档。

  

  PageContext类继承了JspContext类,在JspContext类中定义了setAttribute方法,如下:

public abstract void setAttribute(String name,Object value,int scope)

此方法中存在一个scope的整型变量,此变量就表示一个属性的保存范围。

PageContext类继承了JspContext类,所以在PageContext类中实现了抽象的setAttribute方法:

1 public abstract void setAttribute(String name,Object value,int scope)

这个setAttribute()方法如果不写后面的int类型的scope参数,则此参数默认为PAGE_SCOPE,则此时setAttribute()方法设置的就是page属性范围,如果传递过来的int类型参数scopeREQUEST_SCOPE,则此时setAttribute()方法设置的就是request属性范围,同理,传递的scope参数为SESSION_SCOPEAPPLICATION_SCOPE时,则表示setAttribute()方法设置的就是session属性范围和application属性范围。

下面通过代码来观察此四种属性范围常量的作用,以:request为例

范例:pageScopeDemo04.jsp

复制代码
1 <%@page contentType="text/html;charset=GBK"%>
2 <%@page import="java.util.*"%>
3 <%
4     pageContext.setAttribute("name","孤傲苍狼",PageContext.REQUEST_SCOPE);  //设置属性,并指明属性范围
5     pageContext.setAttribute("date",new Date(),PageContext.REQUEST_SCOPE); //设置属性,并指明属性范围
6 %>
7 <jsp:forward page="/pageScopeDemo05.jsp"/>
复制代码

pageScopeDemo05.jsp

复制代码
 1 <%@page contentType="text/html;charset=GBK"%>
 2 <%@page import="java.util.*"%>
 3 <%
 4     //使用request对象获取属性
 5     String refName = (String)request.getAttribute("name");
 6     Date refDate = (Date)request.getAttribute("date");
 7     //也可以使用pageContext对象获取属性,只要在获取时指明对象的属性范围即可
 8     String refName2 = (String)pageContext.getAttribute("name", PageContext.REQUEST_SCOPE);
 9     Date refDate2 = (Date)pageContext.getAttribute("date", PageContext.REQUEST_SCOPE);
10 %>
11 使用request对象获取属性:
12 <h1>姓名:<%=refName%></h1>
13 <h1>日期:<%=refDate%></h1>
14 使用pageContext对象获取属性:
15 <h1>姓名:<%=refName2%></h1>
16 <h1>日期:<%=refDate2%></h1>
复制代码

运行结果:

从运行结果可以看到:在pageScopeDemo04.jsp使用的是pageContext对象调用setAttribute()方法设置的属性范围是request的属性范围,因此在调用此方法时,把一个int类型的scope范围常量REQUEST_SCOPE传递了进来,这个REQUEST_SCOPE属性范围常量的作用就是告诉pageContext对象现在要设置的属性范围是request的属性范围,所以pageScopeDemo05.jsp这个页面中可以直接使用request.getAttribute();方法获取在pageScopeDemo04.jsp设置的属性。

四、jsp四种属性范围的使用场合

  1、request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的。
  2、session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐。
  3、application(servletContext):如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在application(servletContext)域中,像聊天数据。

转载于:https://my.oschina.net/zhanghaiyang/blog/606172

相关文章:

为什么不提供离线Blog管理工具呢?

网络Blog现在是到处开花, 好像全世界的网民都开始写Blog了. 但因为Web的HTTP无状态协议, 网站本身都自己设置有session过期时间. 如果写的Blog文字多,时间一长用户登录状态就没了,当你提交你的文字时系统会出错,结果你回来时,你辛辛苦苦写的长长的文字都没了, 你是不是很气愤?…

javascript a 标签打开相对路径,绝对路径

<a>标签中的href中&#xff0c;如果你写一个路径默认是以相对路径打开的&#xff0c;加上"http://" 消息头那就可以打开绝对路径 html&#xff1a; <a hrefjavascript:void(0); target_blank onclickCommon.openUrl(" rowObject.baiduPanUrl ")…

算法基础知识科普:8大搜索算法之红黑树(中)

红黑树也是一种特殊形式的二叉搜索树&#xff0c;通过结点的颜色以及三条规则来保证二叉搜索树的平衡。规则1&#xff1a;根结点的颜色是黑色&#xff0c;规则2&#xff1a;叶子结点到根结点路径上遇到的黑色结点数目相同&#xff0c;规则3&#xff1a;叶子结点到根结点路径上无…

Java基础学习总结(3)——抽象类

2019独角兽企业重金招聘Python工程师标准>>> 一、抽象类介绍 下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了&#xff0c;使用abstract关键字把enjoy()方法定义成一个抽象方法&#xff0c;定义如下&#xff1a;public ab…

Knuth(佩服的一塌糊涂)

Donald Knuth自传的开头这样写道&#xff1a;“Donald Knuth真的只是一个人么&#xff1f;”(我觉得不是&#xff0c;^_^)作为世界顶级计算机科学家之一&#xff0c;Knuth教授已经完成了编译程序、属性文法和运算法则的前沿研究&#xff0c;并编著完成了已在程序设计领域中具有…

编程基础知识科普:C#中的问号运算符

C#是一门非常性感的语言&#xff0c;时不时冒出一些语法糖来满足大家的需求&#xff0c;问号运算符就是其中的一种。我们知道基础数据类型的默认值都是基础数据类型的&#xff0c;如int为0&#xff0c;double为0.0&#xff0c;bool为false等等&#xff0c;而引用类型的默认值为…

Listener监听器之HttpSessionListener

编写一个OnlineUserListener。 package anni; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionListener; import javax.servlet.http.HttpSessionEvent;public class OnlineUserL…

ActiveMQ快速入门

2019独角兽企业重金招聘Python工程师标准>>> 1.下载ActiveMQ 去官方网站下载&#xff1a;http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip&#xff0c;然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。 启动Act…

企业为什么要使用基于Docker的PaaS/CaaS平台

作者&#xff1a;精灵云 前言早在十多年前国内外的一些大厂就开始投入研发和使用容器技术&#xff0c;比如Google&#xff0c;对他们来说&#xff0c;使用容器能够充分利用计算资源节省硬件成本。而这几年——众所周知——真正把容器技术发扬光大的是Docker。Docker的slogan“B…

算法基础知识科普:8大搜索算法之红黑树(下)

这是介绍红黑树的最后一部分&#xff0c;令y为要删除结点&#xff0c;n为要删除结点的子结点&#xff08;子结点最多有1个&#xff09;&#xff0c;w为y的兄弟结点&#xff0c;删除操作的重点是使红黑树删除结点并通过调整后仍满足自身是搜索二叉树和设定的三点规则。删除操作可…

asp提供在线文章翻译的功能(转)

有时候想为我们的网页提供多语言支持&#xff0c;如果一种语言用一张网页来做实在太麻烦了&#xff0c;幸好Google提供了语言工具功能&#xff0c;下面介绍如何利用它来实现网页多种语言之间的转换。 作者&#xff1a;淘特网 出处&#xff1a;http://www.tot.name 注&#xff1…

Java基础学习总结(13)——流IO

2019独角兽企业重金招聘Python工程师标准>>> 一、JAVA流式输入/输出原理 流是用来读写数据的&#xff0c;java有一个类叫File&#xff0c;它封装的是文件的文件名&#xff0c;只是内存里面的一个对象&#xff0c;真正的文件是在硬盘上的一块空间&#xff0c;在这个文…

ASP.NET 2.0 绑定高级技巧

1.简单数据绑定定<!--ASP.NET 1.x data binding expression --><%# DataBinder.Eval(Container.DataItem, "Price") %><!--Equivalent ASP.NET 2.0 data binding expression --><%# Eval("Price") %><!--XML data binding --&g…

JSP中的EL表达式详细介绍

2019独角兽企业重金招聘Python工程师标准>>> 一、JSP EL语言定义 EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0…

Software development Problem

筹划“软件开发过程”以及“面向对象分析与设计”这个话题已有很长时间。虽然大学毕业后在Rational公司学习过这方面的内容&#xff0c;这几年带着团队也一直践行里面的理念与方法&#xff0c;但总感觉自己理解的不透彻&#xff0c;不敢动笔。 10年过去了&#xff0c;总不能一…

Spring MVC常用注解说明

2019独角兽企业重金招聘Python工程师标准>>> 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能。02 之前在使用Struts2实现MVC的注解时&#xff0c;是借助struts2-convention这个插件&#xff0c;如今我们使用Spring自带的spring-webmvc组件来实现同…

代码规范性与品质问题~

&#xff12;&#xff10;&#xff10;&#xff11;年在delphibbs做“首届Delphi编程竞赛”活动(http://www.delphibbs.com/delphibbs/dispq.asp?lid650664)的时候&#xff0c;曾就代码的规范性与品质问题与大家进行过讨论&#xff0c;摘录一些言论如下&#xff1a;3. 我们公司…

FutureTask中Treiber堆的实现

2019独角兽企业重金招聘Python工程师标准>>> 在文章FutureTask源码分析中简单说明了FutureTask中使用Treiber堆栈来保存等待结果的线程&#xff0c;本文将详细分析其原理。 Treiber堆使用CAS操作来实现节点的入栈和出栈&#xff0c;由于CAS操作只是保证操作的原子性…

软件开发过程中遇到的问题

今天早晨去石家庄河北电力工程监理有限公司&#xff0c;回来后就在整理这篇图文&#xff0c;结果还是过了12:00。这是针对昨天图文“Software Development Problem”的翻译以及自己的一些理解&#xff0c;分享给大家。 其实&#xff0c;看看这些东西蛮好的&#xff0c;最起码能…

Java基础学习总结(9)——this关键字

2019独角兽企业重金招聘Python工程师标准>>> 一、this关键字 this是一个引用&#xff0c;它指向自身的这个对象。 看内存分析图&#xff1a; 假设我们在堆内存new了一个对象&#xff0c;在这个对象里面你想象着他有一个引用this&#xff0c;this指向这个对象自己&am…

转贴:雅虎公司C#笔试题,看看你能解答多少

这是刚在在网上看到了&#xff0c;觉得这些题目出得真不错&#xff0c;能考出一个程序员的基本功。所以先发在这里&#xff0c;做个备份&#xff0c;以后慢慢来做&#xff08;偶好像只能免强及格哦&#xff0c;呵呵&#xff0c;关于网络的题目太多了&#xff0c;偶不太熟啊&…

亿级PV请求的三种负载均衡技术

在互联网不断渗透到生活中的今天&#xff0c;各种各样的网络服务存在在我们身边&#xff0c;他们的访问流量也是大得惊人。一个大型网站&#xff08;百万PV以上&#xff09;想要正常访问&#xff0c;单单靠一台服务器是不可能提供稳定服务的。这时候就需要用负载均衡技术将海量…

The Six Best Practices(1~3)

前几期的图文我们介绍了软件工程中常见的问题&#xff0c;分析了产生这些问题的根本原因&#xff0c;引出了软件工程中的六个最佳经验。今天我们具体介绍这些最佳经验的内容。

Java项目命名规范

2019独角兽企业重金招聘Python工程师标准>>> 一、命名规范 1、 项目名全部小写 2、 包名全部小写 3、 类名首字母大写&#xff0c;如果类名由多个单词组成&#xff0c;每个单词的首字母都要大写。 如&#xff1a;public class MyFirstClass{} 4、 变量名、方法名首字…

一道数据结构算法题

现有一个链表&#xff0c;证明如果存在环&#xff0c;则&#xff1a;使用两个指针同时前进但步长不一样&#xff0c;则能够在有限步之后能够相逢。题目的意思是我归纳出来的&#xff0c;我的解题思路是这样的&#xff1a;能够相下逢的意思是&#xff1a;在走了x步以后&#xff…

win7系统下载 ghost win7 Sp1 32位纯净3月版

win7系统下载 ghost win7 Sp1 32位纯净3月版软件名称: Ghost Win7 Sp1 32位纯净3月版软件语言: 简体中文软件大小: 3.81大小: GB发布日期: 2017-03-21文件名称: ZJY_Ghost_win 7_X86_CJ201703.GHOM D 5: C21A7A17D8C2568A05844C5…

The Six Best Practices(4~6)

昨天图文介绍了The Six Best Practices的前三个经验&#xff1a;迭代化开发、需求管理、基于构件的体系构架&#xff0c;今天介绍后面的三个经验&#xff1a;可视化建模、持续的质量验证和变更管理。

代码生成器前戏 之 数据库元数据

总结&#xff1a;代码生成器大致有两种方式&#xff0c;1.根据po 生成 表 结构 等系列类&#xff0c;如 Hibernate自动生成 2.根据表生成 po 等系列类。其实实际 开发时候 多半还是 先设计好表&#xff0c;然后生成 的情况多。 元数据&#xff1a;描述数据的数据&#xff0c;就…

有感于框架设计难,实施框架更难!

很久没有写了&#xff0c;不能怪没有时间&#xff0c;只是自己太懒。这两天休息&#xff0c;有时间重新回顾一下项目的设计&#xff0c;从目前的开发情况看&#xff0c;最早设计的一些编程框架&#xff0c;并没有很好的遵守&#xff0c;看上去比较零乱&#xff0c;这个可能由于…

六个最佳的软件工程实践(基于构件的体系结构、可视化建模)

昨天图文介绍了迭代化开发和需求管理&#xff0c;今天我们介绍基于构件的体系结构和可视化建模。基于构件的体系结构是软件开发中最体现创造力的地方&#xff0c;可以通过“修建桥梁”来理解为什么要贯彻基于构件的体系结构以指导我们每次开发的演进增量过程。可视化建模是为了…