您的位置:首页 > 编程语言 > Java开发

《Java Web从入门到精通》-笔记

2015-12-09 12:38 483 查看
2015-10-03

原文:Java是一种跨平台的面向对象语言

2015-10-03

原文:Java是一种优秀的面向对象语言,其有着健壮的安全性设计。Java的结构是中立的,可以移植到不同的系统平台。优秀的多线程设计也是Java语言的一大特色。但是Java语言的最

2015-10-03

原文:大优势还是其对多种操作系统平台的支持,这种特性是其他编程语言所无法比拟的。

2015-10-03

原文:J2EE是Java的企业版本,是Sun公司针对企业信息化提出的一套技术解决方案。

2015-10-03

原文:J2ME是Java针对嵌入设备(例如手机)设计的。在J2ME出现之前,在嵌入设备中编程只能选择C/C++,这样底层的编程是相当复杂的。当J2ME技术问世以后,就可以使Java语言十分方便地开发嵌入设备中的应用软件。

2015-10-03

原文:Java Web开发也就是基于B/S结构的Java应用程序开发

2015-10-03

原文:由服务器端的程序提供基本的服务,客户端是提供给用户的访问接口,用户可以通过客户端的软件访问服务器提供的服务。这种Web应用程序的开发模式就是传统的C/S开发模式。在这种模式中,由服务器端和客户端的共同配合来完成复杂的业务逻辑。例如以前的网络软件中,一般都会采用这种模式,而且现在的网络游戏中,一般还会采用这种Web开发模式。在这些Web应用程序中,都是需要用户安装客户端才可以使用的。

2015-10-03

原文:当前流行的B/S架构。在这种架构中,只需要开发服务器端的程序功能,而无须考虑客户端软件的开发,客户通过一个浏览器就可以访问应用系统提供的功能

2015-10-03

原文:下面简单介绍B/S结构中常用的服务器。

2015-10-03

原文:❑IIS是微软提供的一种Web服务器,提供对ASP语言的良好支持,通过插件的安装,也可以提供对PHP语言的支持。

2015-10-03

原文:❑Apache服务器是由Apache基金组织提供的一种Web服务器,其特长是处理静态页面,对于静态页面的处理效率非常高。

2015-10-03

原文:❑Tomcat也是Apache基金组织提供的一种Web服务器,提供对JSP和Servlet的支持。通过插件的安装,同样可以提供对PHP语言的支

2015-10-03

原文:持,但是Tomcat只是一个轻量级的Java Web容器,像EJB这样的服务在Tomcat中是不能运行的。

2015-10-03

原文:❑JBoss是一个开源的重量级的Java Web服务器。在JBoss中,提供对J2EE各种规范的良好支持,而且JBoss通过了Sun公司的J2EE认证,是Sun公司认可的J2EE容器。

2015-10-03

原文:❑另外,J2EE的服务器还有BEA的Weblogic和IBM的WebSphere等,这些产品的性能都是非常优秀的,可以提供对J2EE的良好支持。用户可以根据自己的需要选择合适的服务器产品。

2015-10-03

原文:于B/S架构的Web程序开发过程中,只需要开发服务器端的功能代码,然后把服务器端的程序部署在Web服务器软件中即可。在部署结束

2015-10-03

原文:之后,启动Web服务器,用户就可以通过浏览器访问Web应用程序提供的服务。

2015-10-06

原文:需要丰富的用户体验,那就选择C/S架构。在目前的网络游戏

2015-10-06

原文:中,基本都是选择C/S架构。如果更偏重的是功能服务方面的实现,就需要选择B/S架构,这也正是目前绝大部分管理应用系统采用的软件架构方法

2015-10-06

原文:ASP还只能运行在Windows环境中,这样Windows自身的一些限制就制约了ASP的发挥。

2015-10-06

原文:SP本质上就是把Java代码嵌套到HTML中,然后经过JSP容器的编译执行,可以根据这些动态代码的运行结果生成对应的HTML代码,从而可

2015-10-06

原文:以在客户端的浏览器中正常显示。

2015-10-06

原文:PHP和JSP类似,都是可以嵌套到HTML中的语言。不同之处在于,PHP的语法比较独特,其中混合了C、Java等多种语法中的优秀部分,而且PHP网页的执行速度要比CGI和ASP等语言的快很多。在PHP中,提供了对常见数据库的支持,例如SQL Server、MySQL、Oracle、Sybase等。这种内置的方法使PHP中的数据库操作变得异常简单。而且

2015-10-06

原文:PHP程序可以在IIS和Apache中运行,提供对多种操作系统平台的支持。

2015-10-06

原文:但是PHP也存在一些劣势,PHP的开发运行环境的配置比较复杂,而且PHP是开源的产品,缺乏正规的商业支持。这些因素在一定程度上限制了PHP的进一步发展。

2015-10-06

原文:在Windows平台的应用程序中,对用户界面的要求比较高,所以.NET提供了便捷的开发环境和工具。在Visual Studio中,用户的界面都可以通

2015-10-06

原文:过简单的拖曳来完成,这种可视化的编程方式在Java中还不是很成熟,.NET的可视化编程环境是得到一些程序员支持的原因之一。

2015-10-06

原文:Tomcat、JBoss这样的Web服务器,还有Spring、Hi

2015-10-06

原文:bernate、Struts这样的开源框架

2015-10-06

原文:安装JDK

2015-10-06

原文:在环境变量PATH的最前面增加Java的路径:C:\Program Files\Java\jre1.6.0_02\bin,再增加一个环境变量“JAVA_HOME”指向Java的安装路径

2015-10-06

原文:在命令行界面用命令java-version测试是否正确时,应该输出当前JDK的版本

2015-10-06

原文:JDK是整个Java的核心,包括了Java运行环境(Java Runtime

2015-10-06

原文:Environment)、Java工具和Java基础的类库(rt.jar)

2015-10-06

原文:由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现。Tomcat因其技术先进、性能稳定、简单易用,成为目前应用最广泛的JSP服务器。

2015-10-06

原文:设置Tomcat使用的端口,以及Web管理界面用户名和密码,确保该端口未被其他程序占用

2015-10-06

原文:选择J2SDK的安装路径,安装程序会自动搜索。如果没有正确显示,则可以手工修改。按以上安装步骤,这里应该是“C:\Program Files\Java\jre1.6.0_02”

2015-10-06

原文:此安装与配置都已完成。打开浏览器输入http://localhost:8080

2015-10-06

原文:即可看到Tomcat的相关信息

2015-10-06

原文:Eclipse的最大特点是它能接受各种开放源代码插件。而MyEclipse是对Eclipse的扩展,集成了很多常用的经典插件,支持HTML、Struts、JSF、CSS、JavaScript、SQL和Hibernate。利用它可以极大地提高工作效率。

2015-10-06

原文:JSP服务器管理JSP页面有两个阶段:转换阶段(translation phase)和执行阶段(execution

2015-10-06

原文:phase)。当有一个客户请求到来时,JSP服务器检验JSP页面的语法是否正确,将JSP页面转换为Servlet(Servlet就是用Java语言实现的CGI程序,后面章节将详细介绍)源文件,然后调用javac工具类编译Servlet源文件生成class文件,这一阶段是转换阶段。接下来,Servlet容器加载转换后的Servlet类,实例化一个对象处理客户端的请求,在请求处理完成后,响应对象被JSP服务器接收,服务器将HTML格式的响应信息发送到客户端,这一阶段是执行阶段,

2015-10-06

原文:从整个过程中可以知道,当第一次加载JSP页面时,因为要将JSP文件转换为Servlet类,所以响应速度较慢。当再次请求时,JSP服务器就会直接执行第一次请求时产生的Servlet,而不会再重新转换JSP文件,所以其执行速度和原始的Servlet执行速度几乎就相同了。在JSP执行

2015-10-06

原文:期间,JSP服务器会检查JSP文件,看是否有更新或修改。如果有更新或修改,JSP服务器会再次编译JSP或Servlet;如果没有更新或修改,就直接执行前面产生的Servlet。这也是JSP相对于Servlet的好处之一。

2015-10-06

原文:在classes以及lib子目录下,都可以存放Java类文件。在运行过程中,Tomcat的装载器会先装载classes目录下的类,再装载lib目录下的类。因此,如果两个目录下存在同名的类,classes目录下的类具有优先权。一般情况下lib中只应存放外部引

2015-10-06

原文:用的类,如JDBC驱动程序的JAR文件和后文中会提到的开源项目的包,而用户自己编写的类文件应该放在classes目录下

2015-10-06

原文:Java Web应用通过一个基于XML的发布描述符文件来配置其发布信息,这个文件名为web.xml,它存放于WEB-INF子目录下。在

2015-10-06

原文:web.xml文件中可主要包含如下配置信息: 1)Servlet的定义。 2)Servlet的初始化参数。 3)Servlet以及JSP的映射。 4)Filter的定义。 5)安全域配置参数。 6)welcome文件清单。 7)资源引用。 8)环境变量的定义。

2015-10-06

原文:SP网页主要分为脚本与网页数据两部分。网页数据就是JSP服务器不处理的部分,例如,HTML的内容会直接送到客户端执行。脚本是必须经由JSP服务器处理的部分,而大部分脚本都以XML作为语法基础,并且大小写必须一致。脚本有4种类型:编译指令、JSP脚本、动作标签和表达式语言(Expression Language)。其中表达式语言又简称为EL

2015-10-07

原文:客户端可以看到的注释以“<!--”开头,以“-->”结尾,如: <!--comment[<%=expression%>]-->

2015-10-07

原文:<!--现在时间为:<%=(new java.util.Date()).toLocaleString()%>--> 在客户端的HTML源文件中显示为: <!--现在时间为:January 1,2004-->

2015-10-07

原文:开发程序员专用的注释以“<%--”开头,以“--%>”结尾,如: <%--comment--%>

2015-10-10

原文:在JSP中声明变量或者函数,是以“<%!”开头、以“--%>”结尾,如: <%!declaration;[declaration;]+……%>

2015-10-10

原文:可以直接使用在<%@page%>中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明,一个声明仅在一个页面中有效。如果你想每

2015-10-10

原文:个页面都用到一些声明,最好把它们写成一个单独的文件,然后用<%@include%>指令包含进来。

2015-10-10

原文:JSP表达式是以“<%=”为起始、以“%>”为结尾,其中间内容包含一段合法的表达式,如: <%=expression%>

2015-10-10

原文:JSP脚本又称为scriptlet,包含一个有效的程序段,是以“<%”开头、以“%>”结尾,如: <%code fragment%>

2015-10-10

原文:编译指令主要用来提供整个JSP网页相关的信息,并且用来设定JSP网页的相关属性,例如:网页的编码方式、语法、信息等。起始符号为“<%@”,终止符号为“%>”,中间部分就是一些指令和一连串的属性设定。JSP有3个编译指令:page、include和taglib。

2015-10-10

原文:作标签又称为动作元素、动作指令,也可以理解为JSP自带的标准标签库。动作标签利用XML语法格式的标记来控制JSP服务器的行为。利用

2015-10-10

原文:动作标签可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。动作标签起始符号为<jsp:xxx>,终止符号为</jsp:xxx>。

2015-10-14

原文:page指令是最复杂的编译指令,它的主要功能为设定整个JSP网页的属性和相关功能。page指令的基本语法如下: <%@page attribute1="value1"attribute2="value2"attribute3=……%>

2015-10-14

原文:nclude指令是在JSP中包含一个静态的文件,同时解析这个文件中的JSP语句。include指令只有一个参数,就是要插入文件的相对路径。语法如下: <%@include file="relativeURL"%>

2015-10-14

原文:taglib指令能够让用户自定义新的标签

2015-10-14

原文:

2015-10-14

原文:taglib指令的语法如下: <%@taglib uri="tagLibraryURI"prefix="tagPrefix"%>

2015-10-14

原文:forward动作把请求转到另外的页面。<jsp:forward>标签只有一个属性page。page属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算。如下面的例子所示: <jsp:forward page="/utils/errorReporter.jsp"/> <jsp:forward page="<%=someJavaExpression%>"/>

2015-10-14

原文:<jsp:include>标签把指定文件插入到正在生成的页面。其语法如下: <jsp:include page="relative URL"flush="true"/>

2015-10-14

原文:所谓动态插入,正是相对于前面已经介绍过的静态include指令,它是在JSP文件被转换成Servlet的时候引

2015-10-14

原文:入文件,而这里的<jsp:include>动作不同,插入文件的时间是在页面被请求的时候。这里被插入的文件是一个完整的JSP文件而非片段,把两个JSP输出到客户端的结果结合在一起,它们分别被JSP服务器转化为两个不同Java类,因此不存在变量定义方面的冲突。用<jsp:include>标签引入文件的效率要稍微差一点,而且被引用文件不能包含某些JSP代码(例如不能设置HTTP头),但它的灵活性却要好得多。 又与静态插入不同,引入文件名可以是一个变量或者表达式。如果这个片段文件被改变,那么只是这个文件本身重新编译而包含此文件的JSP文件不会被重新编译。

2015-10-15

原文:<jsp:useBean>标签用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,因为它使得开发人员既可以发挥Java组件重用的优势,同时也避免了直接在JSP实例化对象的复杂操作。<jsp:useBean>标签最简单的语法为: <jsp:useBean

2015-10-15

原文:id="name"class="package.class"/>

2015-10-15

原文:获得Bean实例之后,要设置Bean的属性可以通过<jsp:setProperty>标签,要读取Bean的属性就用<jsp:getProperty>。这两个标签的语法如下: <jsp:setProperty name="myName"property="someProperty"value="value"/>

2015-10-15

原文:<jsp:getProperty name="myName"property="someProperty"/>

2015-10-18

原文:<jsp:plugin>标签用来根据浏览器的类型,插入通过Java插件运行Java Applet所必需的OBJECT或EMBED元素。当JSP网页被编译后送往浏览器执行时,<jsp:plugin>将会根据浏览器的版本替换成<object>标签或者<embed>标签。一般来说,<jsp:plugin>会指定对象Applet或Bean,同样也会指定类的名字和位置,另外还会指定将从哪里下载这个Java组件。

2015-10-18

原文:<jsp:fallback>一段文字用

2015-10-18

原文:于:当不能启动Applet或Bean时,那么浏览器会显示一段错误信息。 <jsp:params>标签用来提供key/value的信息,它也可以与<jsp:include>、<jsp:forward>和<jsp:plugin>一起搭配使用

2015-10-18

原文:XML标签示例xmlTag.jsp 01<jsp:element name="firstname"> 02<jsp:attribute name="name">Mike</jsp:attribute> 03<jsp:body>Hello</jsp:body> 04</jsp:element> 【运行程序】执行该代码,其结果如下: <firstname name="Mike">Hello</firstname>

2015-10-18

原文:JSP有以下9个内置对象:request、response、out、pageContext、session、application、config、page、exception。

2015-10-18

原文:request是最常用的内置对象,表示javax.servlet.http.HttpServletRequest对象。request对象包含所有请求的信息,如请求的来源、标头、cookies和请求相关的参数值等。比较常用的方法: 1)Object getAttribute(String name):返回由name指定的属性值,该属性不存在时返回null。 2)void setAttribute(String name,Object value):在属性列表中添加/删除指定的属性。

2015-10-18

原文:3)String getParameter(String name):获取客户端发送给服务器端的参数值。 4)String[]getParameterValues(String name):获得请求中指定参数的所有值。 5)String getProtocol():返回请求使用的协议,可以是HTTP1.1或者HTTP1.0。 6)String RequestURI():返回发出请求的客户端地址,但是不包括请求的参数字符串。 7)String getRemoteAddr():获取发出请求的客户端IP地址。
8)HttpSession getSession():获取session。

2015-10-18

原文:response表示HttpServletResponse对象,并提供了几个用于设置返回浏览器的响应的方法。如比较常见的方法: 1)sendRedirect(URL):可以将用户重定向到一个不同的页面(URL)。 2)setContentType(String type):响应设置内容类型头。 3)addHeader(String name,String value):添加String

2015-10-18

原文:类型的值到HTTP文件头。 这里需要说明一下response的sendRedirect方法是转到另一个网页,前文叙述过的JSP动作标签<forward>也是网页跳转。两者区别如下: 首先,forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL。因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。 其次,forward重定向将原始的HTTP请求对象(request)从一个

2015-10-18

原文:Servlet实例传递到另一个实例,而采用sendRedirect方式的两者不是同一个request,forward转移的时候会把前面的请求参数也都带上,而sendRedirect方式则不能。

2015-10-18

原文:session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存储用户的状态信息。session在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法(比如cookie)知道这是同一个客户,这

2015-10-18

原文:就需要session对象。

2015-10-18

原文:session对象常用方法: 1)public String getId():获取session对象编号。 2)public void setAttribute(String key,Object obj):将参数Object指定的对象obj添加到session对象中,并为添加的对象指定一个索引关键字。 3)public Object getAttribute(String key):获取session对象中含有关键字的对象。 4)public Boolean isNew():判断是否是一个新的客户。

2015-10-19

原文:服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,可以理解为,在一个应用中application对象是一个全局的Map。 pageContext与application对象类似,有setAttribute()和getAttribute()方法来保存对象,只是它的范围只限于本网页内。

2015-10-19

原文:❑Page指的是单单一页JSP Page的范围。 ❑Request的范围是指在JSP网页发出请求到另一个JSP网页之间,随后这个属性就失效。设定Request的范围时可利用request对象中的setAttribute()和getAttribute()。 ❑Session的作用范围为一段用

2015-10-19

原文:户持续和服务器所连接的时间,但与服务器断线后,这个属性将无效。 ❑Application的作用范围在服务器一开始执行服务,到服务器关闭为止。Application的范围最大,停留的时间也最久,所以使用时要特别注意,不然可能会造成服务器负载越来越重的情况。

2015-10-19

原文:exception对象用于处理JSP文件执行时发生的错误和异常,只有在错误页面里才可以使用,前提是:在页面指令里要有isErrorPage=true的属性。如: <%@page contentType="text/html;charset=GB2312"isErrorPage="true"%> 则在此页面中便可使用exception内置对象。

2015-10-19

原文:常用方法如下: ❑String getMessage():取得错误提示信息。 ❑void printStackTrace():异常的堆栈信息。

2015-10-19

原文:Servlet在web.xml中的配置 01<!--定义Servlet--> 02<servlet> 03<servlet-name>helloreader</servlet-name> 04<servlet-class>com.book.web3.HelloServlet</servlet-class> 05</servlet> 06<!--定义Servlet与URL映射关系--> 07<servlet-mapping>

2015-10-19

原文:08<servlet-name>helloreader</servlet-name> 09<url-pattern>/helloreader</url-pattern> 10</servlet-mapping> 【代码剖析】上面代码中首先通过标签<servlet>来定义关于Servlet的类,然后通过标签<servlet-mapping>来设置Servlet类的映射。

2015-10-19

原文:一个过滤器(Filter)是一个可以传送请求或修改响应的对象。过滤器并不是Servlet,它们并不实际创建一个请求。它们是请求到达一个Servlet前的预处理程序,在响应离开Servlet后的后处理程序。一个过滤器能够做如下工作: 1)在一个Servlet被调用前截获该调用。 2)在一个Servlet被调用前检查请求。

2015-10-19

原文:3)修改在实际请求中提供了可定制请求对象的请求头和请求数据。 4)修改在实际响应中提供了可定制响应对象的响应头和响应数据。 5)在一个Servlet被调用之后截获该调用。

2015-10-19

原文:编写监听器需要实现相应的接口。常用的监听接口如下: (1)ServletContextAttributeListener

2015-10-19

原文:监听对ServletContext属性的操作,比如增加、删除、修改。 (2)ServletContextListener 监听ServletContext。当创建ServletContext时,激发contextInitialized方法;当销毁ServletContext时,激发contextDestroyed方法。 (3)HttpSessionListener 监听HttpSession的操作。当创建一个Session时,激发sessionCreated方法;当销毁一个Session时,激发sessionDestroyed方法。
(4)HttpSessionAttributeListener 监听HttpSession中的属性的操

2015-10-19

原文:作。当在Session中增加一个属性时,激发attributeAdded方法;当在Session中删除一个属性时,激发attributeRemoved方法;当在Session属性被重新设置时,激发attributeReplaced方法。

2015-10-21

原文:1. 根据你的理解,简述关于JSP的基本动作 答:在具体开发中,经常会遇到如下6个动作,它们分别为: 1)jsp:include:在页面被请求的时候引入一个文件。 2)jsp:useBean:寻找或者实例化一个JavaBean。 3)jsp:setProperty:设置JavaBean的属性。

2015-10-21

原文:4)jsp:getProperty:输出某个JavaBean的属性。 5)jsp:forward:把请求转到一个新的页面。 6)jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。

2015-10-21

原文:2. 在开发JSP应用时,经常会用到哪些内置对象?并简述其作用。 答:在具体开发中,经常会遇到如下9个内置对象,它们分别为: 1)request:用户端请求,此请求会包含来自GET/POST请求的参数。 2)response:网页传回用户端的回应。

2015-10-21

原文:3)pageContext:网页的属性是在这里管理。 4)session:与请求有关的会话期。 5)application servlet:正在执行的内容。 6)out:用来传送回应的输出。 7)config servlet:构架部件。 8)page:JSP网页本身。 9)exception:针对错误网页,未捕捉的例外。

2015-10-21

原文:Struts是Apache基金会Jakarta项目组的一个开源项目,它采用MVC模式,能够很好地帮助Java开发者利用J2EE开发Web应用,它能大量减少开发Web应用的时间,提高产品的重用度。Struts主要是采用Servlet和JSP技术来实现的,它把Servlet、JSP、自定义标签和信息资源整合到一个统一的框架中。Struts只有一个中心控制器,它采用XML定制转向的URL,采用Action来处理逻辑,开发人员利用其进行开发时不用

2015-10-21

原文:再自己编码实现全套MVC模式。 Struts跟Tomcat、Velocity等诸多Apache项目一样是开源软件,这是它的一大优点,使开发者能更深入地了解其内部实现机制。 除此之外,Struts的优点主要集中体现在两个方面:标签库和页面导航。功能强大的标签库是Struts的一大贡献,灵活运用它,能大大提高开发效率。如果大量的开发需使用自己定义的标签库,则使用Struts是一个很好的起点。页面导航使项目结构清晰,业务和表现分离能最大限度地提高重用性。

2015-10-21

原文:Struts是使用最广泛的一个框架,也成为Java程序员的一项基本技能。但毕竟Struts诞生于很多年前,近期Ajax、JSF技术的兴起,原有设计上的缺陷成为它的硬伤,Struts有点跟不上时代的步伐。

2015-10-21

原文:truts2是以WebWork为核心而不是以Struts1为核心的

2015-10-21

原文:(View)进行交互,输入数据并单击按钮,控制器(Controller)接收

2015-10-21

原文:到来自视图的事件并对模型(Model)进行操作,根据用户提供的数据更新模型(Model)。视图也会接到“模型改变”的事件通知,因此它会随着模型而更新,将模型更新的结果显示给用户。这种模式在单机且实时更新的应用程序中可以起到很好的作用

2015-10-21

原文:在Web世界中的经典MVC应用程序是通过使用前端控制器(Front Controller)模式来实现的。这个模式包含了一个分发器(在Java的Web

2015-10-21

原文:MVC实现中,通过Servlet来实现分发器),而分发器将请求URL映射到需要被执行的命令实例(Command Instance)

2015-10-23

原文:开发过程中运用框架的意义,借助框架可以极大地提高效率、降低风险、优化结构

2015-10-23

原文:1. 简述使用Struts2框架的好处 答:与以前的其他框架相比,Struts2框架具有如下好处: 1)与Spring的集成:与Struts1.x相比,Struts2不必再自己编写singleton,进一步地降低了程序间的耦合性,就Struts2内部本身而言,降低了框架本身的耦合性。 2)更加模块化:与Struts1.x相比,Struts2更加模块化,可以轻松将配置信息按功能界限拆分成多个文件,

2015-10-23

原文:便于管理和团队协作开发。 3)基于插件的框架:Struts2是一个基于插件的框架,社区中提供了很多实用的插件,比如jfreechat/json等,使用这些插件可以简化我们的开发,加快开发进度。 4)大量的拦截器:Struts2本身提供了大量的可重用的拦截器,比如类型转换拦截器,很多时候我们从页面取得参数,这个时候它是String类型的,我们需要手动地把它转成Long型的或是Integer型的再使用。在Struts2中你不必这样做,Struts2已经帮你做了这些事情了。当然,也可以实现自定义的拦截器,比如,使用权限检查拦截器来做访问控制。
5)惯例大于配置:惯例大于配置

2015-10-23

原文:是Struts2的架构目标,比如我们需要对页面输入的数据进行验证,只需取一个跟Action同名的xxAction-validation.xml文件,Struts2就会自动进行验证。还有很多,比如国际化资源文件等。 6)多种视图的支持:jsp、freemarker、Veloctiy,只要你愿意,甚至可以轻松地改造让它支持pdf,同一个项目中可以支持多种视图。 最后还有申明式的异常处理。

2015-10-23

原文:2. 什么是MVC框架 答:MVC是三个单词的缩写,分别为模型(Model)、视图(View)和控制(Controller)。MVC模式的目的就是实现Web系统的职能分工。

2015-10-23

原文:Model层实现系统中的业务逻辑,View层用于与用户的交互,Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

2015-10-27

原文:首先请到http://jakarta.apache.org/struts下载Struts2,应该选择完全

2015-10-27

原文:发布版(Full Distribution),它包含必要的jar文件、自带的例子和文档

2015-10-27

原文:发布Struts2自带的例子 把apps目录下文件名为struts2-blank-2.0.11.war的文件拷贝到Tomcat的webapps下。重新启动Tomcat,直接访问http://localhost:8080/struts2-blank-2.0.11/测试这个例子

2015-10-29

原文:发布 在Tomcat的webapps目录下创建一个Web应用目录struts2,JSP文件应该放在这个目录下。在此

2015-10-29

原文:目录下创建子目录WEB-INF,web.xml文件应该在此目录下。程序中编写的类class文件和struts.xml文件应该放在WEB-INF/classes目录下,最重要的是要把Struts2提供的jar文件拷贝到WEB-INF/lib下,这样在程序中才能引用到Struts2的API

2015-10-29

原文:分析处理流程

2015-10-29

原文:1)浏览器请求http://localhost/HelloReader.action,发送到Web

2015-10-29

原文:应用服务器。 2)应用服务器接受此请求,查看webapp/WEB-INF/web.xml中的配置,发现所有的请求都要经过过滤器org.apache.struts2.dispatcher.FilterDispatcher。调用这个过滤器,由此进入Struts2流程中。 3)Struts2查看在struts.xml中有action名为“HelloReader”的配置,再找到对应的类HelloReader.class。 4)调用HelloReader.class的execute方法。 5)execute方法处理业务给message字段赋值并返回SUCCESS。

2015-10-29

原文:6)Struts2又一次在struts.xml中查看,返回值是SUCCESS时的result是HelloReader.jsp,则跳转到该页面。 7)页面HelloReader.jsp处理<s:property value="message"/>标签,调用HelloWorld.java中的方法getMessage(),取得message。 8)标签显示message并以HTML格式发送到浏览器。

2015-11-03

原文:Struts2定义了一些默认Result:error、input、login、none和success。开发者当然也可以根据应用情况自由地定义结果

2015-11-03

原文:esult在struts.xml文件中定义,嵌套在<action>标签里。如果location参数是唯一的参数,可以这样简单地定义: <!--在result中添加参数-->

2015-11-03

原文:<action name="bar"class="myPackage.barAction"> <result name="success"type="dispatcher"> <param name="location">foo.jsp</param> </result> </action>

2015-11-03

原文:如果<result>标签中没有<param>标签,Struts2就把<result></result>里面的文字作为location。所以上面例子可以简化为: <!--在result中添加参数--> <action name="bar"class="myPackage.barAction">

2015-11-03

原文:<result name="success"type="dispatcher">foo.jsp</result> </action>

2015-11-03

原文:如果没有指定<result>标签的type属性,Struts2默认为dispatcher类型(类似于Servlet标准中的ServletDispatcher的forward)。上面的例子可以简化为: <!--在result中添加参数--> <action name="bar"class="myPackage.barAction"> <result>foo.jsp</result> </action>

2015-11-03

原文:Interceptor(拦截器)是能在一个action执行的前后执行的代码。它是做Web应用程序时很有用的工具。最常见的由Interceptor实现的功能如:安全检查(确保访问者是登录用户)、跟踪日志(记录每个action)、效率瓶颈检查(记录每个action开始和结束的时间以检查程序中的瓶颈)。也可以把Interceptor连在一起组成Interceptor栈(interceptor-stack)。比如在action执行前同时做登录检查、安全检查和记录日志,可以定义一个Interceptor栈。

2015-11-03

原文:nterceptor配置:struts.xml 01<interceptors> 02<!--拦截器--> 03<interceptor name="security" 04 class="com.mycompany.security.SecurityInterceptor"/> 05<!--拦截器栈--> 06<interceptor-stack name="defaultComponentStack"> 07<interceptor-ref name="compo

2015-11-03

原文:nent"/> 08<interceptor-ref name="defaultStack"/> 09</interceptor-stack> 10</interceptors> 【代码剖析】上述代码在第3行通过标签<interceptor>配置了一个拦截器标签,而在第6行到第9行通过标签<interceptor-stack>配置了一个拦截器栈。如果想使用该拦截器,还必须在标签<action>中进行这样配置: <!--使用拦截器--> <action name="VelocityCounter" class="com.opensymphony.webwork

2015-11-03

原文:xample.counter.SimpleCounter"> <result name="success">……</result> <interceptor-ref name="defaultComponentStack"/> </action>

2015-11-03

原文:ActionSupport是一个让action类能够更快开始工作的基类。它包含了action能够提供的许多可选服务的默认实现,让开发者更容易地开始开发自己的action类,不需要再为这些可选服务提供具体实现了。同时能够改写可选择接口的任意一个方法实现并保持其他方法的默认实现。由于ActionSupport预建了许多开箱即用的功能,建议读者创建自己的action时都扩展ActionSupport类。

2015-11-03

原文:1)Validateable提供一个Validate()方法,可以对action进行校验。 2)ValidationAware提供了保存和取出action级别或者字段级别错误信息的方法。 3)TextProvider提供了获取本地化信息文本的方法。 4)LocalProvider提供了getLocale()方法以返回locale,而locale则用于获取本地化信息。

2015-11-03

原文:TextProvider和LocalProvider,它们都是为了使用本地的资源文件而设计的。

2015-11-03

原文:ActionContext的使用非常方便,如取得request中的某个参数的值: ActionContext context=ActionContext.getContext(); Map params=context.getParameters(); String username=(String)params.get("username"); 如通过ActionContext取得的HttpSession: Map session=ActionContext.getContext().getSession();

2015-11-03

原文:JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其他IDE报表工具一样来制作报表。JasperReports支持PDF、HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。

2015-11-03

原文:XSLT Result用XSLT来转换action对象到XML。 XSLT是eXtensible Stylesheet Language Transformation,是用于XML文档转换的一种标准,借助XSLT可以将XML数据以不同的表现方式表现

2015-11-03

原文:拦截器(Interceptor)是Struts2的一个强有力的工具,有许多功能都是构建在它之上,如国际化、转换器、校验等。Interceptor是Struts2的一大特色,在执行action之前和之后可以使请求一个或多个Interceptor。多个连接器组合在一起实现某一个功能称为Interceptor链(Interceptor Chain),在Struts2中称为拦截器栈(Interceptor Stack)。Interceptor链就是将Interceptor按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Interceptor链中的Interceptor就会按其之前定义的顺序被调用。

2015-11-06

原文:truts2的核心由action、interceptor、result 3个主要部分构成,interceptor是其最大特色。

2015-11-09

原文:在具体开发Struts2框架应用时,经常会用到哪些内置拦截器,列举5个,并根据你的理解,简述它们的作用 答:在具体开发中,经常会遇到如下的内置拦截器,它们分别为: (1)拦截器:File Upload Interceptor 名字:fileUpload 说明:提供文件上传功能。 (2)拦截器:I18n Interceptor 名字:i18n 说明:记录用户选择的locale。 (3)拦截器:Token Interceptor 名字:token 说明:通过Token来避免页面的重复提交。 (4)拦截器:Token
Session Interceptor 名字:tokenSession 说明:和Token Interceptor一样,不过当页面重复提交时会把请求的数据存储在Session对象里。 (5)拦截器:Cookies Interceptor

2015-11-09

原文:名字:cookies 说明:使用配置的name和value来配置cookies。

2015-11-09

原文:EL语法很简单,它最大的特点就是使用方便。所有EL都是以“${”起始、以“}”结尾的,例如: ${sessionScope.user.sex}

2015-11-09

原文:EL提供“.”和“[]”两种运算符来存取数据。下列两者所代表的意思是一样的: ${sessionScope.user.sex} 等价于 ${sessionScope.user["sex"]} 使用“[]”有一个优势就是可以使用变量,而“.”无法做到动态取值。例如: ${sessionScope.user[data]} 此时,data是一个变量,假若data的值为“age”,那上述的例子等价于 ${sessionScope.user.age}

2015-11-09

原文:EL存取变量数据的方法很简单,例如: ${username} 它的意思是取出某一范围中名称为username的变量。因为并没有指定哪一个范围的username,所以它的默认值会先从Page范围找,假如找不到,再依次到Request、Session、Application范围找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到,就回传null。

2015-11-09

原文:include标签与JSP的<jsp:include>标签的功能类似,在使用Struts2进行开发的时候,Struts2的include标签会更有用。这里有以下两个原因: 1)它能够更好地与Struts2集成在一起。很多时候include进来的文件名是一个变量,而Struts2的include标签提供了对值栈进行本地访问的能力,并且提供了更具有扩展性的参数模型。 2)Struts2的include标签同样也是对用户友好的。如果希望包含../index.jsp这样的URL,仍然可以随意地这样做,即使一些应用服务器并不支持这种类型的URL。可以规避很多<jsp:include>的限制,因为Struts会将这些URL都重写为绝对路径的URL。

2015-11-09

原文:text标签是为了支持国际化信息的标签,用于显示特定语言的文本,譬如中文。它是基于键查询的标签。i18n标签将某个特定“resource bundle”放入value stack。然后通过text标签拿到相应message,而不是仅限于绑定到当前action的bundle。

2015-11-11

原文:类型转换器都需要实现ognl.TypeConverter类,而Struts2提供了一个很好的工具类org.apache.struts2.util.StrutsTypeConverter。该类可以让用户很方便地编写处理对象和字符串相互转换的类型转换器

2015-11-13

原文:通过设置<form>标签的validate="true"来启用: <s:form name="test"action="javascriptValidation"validate="true"> …… </s:form>

2015-11-13

原文:纯JavaScript客户端校验 纯JavaScript客户端校验在xhtml theme和css_xhtml theme中使用,是最简单且包含最少客户端校验的校验。这种类型的校验使用了100%的客户端JavaScript代码来设法校验用户输入的数据。因为实际上校验逻辑在JavaScript里面重复进行,所以理解这种情况很重要。有些数据会被JavaScript代码认为是可接收的,而可能会被服务器端校验认为是不可接收的。有下列的校验器被支持:

2015-11-13

原文:❑required validator(必填校验器) ❑requiredstring validator(必填字符串校验器) ❑stringlength validator(字符串长度校验器) ❑regex validator(表达式校验器) ❑email validator(邮件校验器) ❑url validator(网址校验器) ❑int validator(整数校验器) ❑double validator(双精度数校验器) 因为客户端校验不与服务器端通信,xhtml theme和css_xhtml
theme负责正确地操作HTML DOM以内置方式显示错误信息。负责来进行这个逻辑的JavaScript是validation.js,可以在每个theme里发现。

2015-11-13

原文:基于AJAX的客户端校验是对纯JavaScript客户端校验的改进,它仅在ajax theme中使用。它使用了多种技术的组合:JavaScript、DOM操作和通过DWR进行的远端服务器通信。不像纯客户端校验实现,基于AJAX的校验会和Server进行通信

2015-11-13

原文:校验通过每个表单元素的onblur事件发生。当每一次用户输入一些内容以及移动到下一个表单元素时,输入的数据(以及和其他所有之前输入的数据)都会被发送到服务器端进行校验。整个校验stack都在进行,包括visitor校验器和action的validate()方法。 如果遇到一个错误,就像纯客户端校验一样,HTML和DOM会立刻被更新。

2015-11-13

原文:了给不同的地区提供不同的字符串信息,需要一个应用程序的源文件来为给定的locale找到正确的字符串信息。幸运的是,Java以Java.util.ResourceBundle抽象类的方式提供了这些功能。JDK带来了资源包的实现:java.util.PropertyResourceBundle和java.util.ListResourceBundle。这两个类会自动加载含有这些国际化信息的属性文件(*.properties文件)。当ResourceBundle.getBundle()被调用的时候,会查找正确的ResourceBundle名字,如CreateLocalizedCategory.properties(默认一般是英文)、CreateLocalizedCategory_zh.properties(简体中文)或者CreateLocalizedCategory_de.properties(德文)。

2015-11-13

原文:资源包按照下面的顺序搜索: 1)ActionClass.properties. 2)BaseClass.properties. 3)Interface.properties(每一个接口和子接口)。 4)ModelDriven的model(如果实现了ModelDriven),对于model对象从第一步重复执行。 5)package.properties(类所在的目录和每个父目录直到根目录)。 6)搜索i18n message key自己的层次关系。 7)全局资源属性(struts.custom.i18n.resources),在struts.properties里定义。
说明 i18n是internationalization(国际化)的缩写,这个单词的长度是20,然后取其首尾字母,中间省略的字母刚好18个。

2015-11-16

原文:Struts2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用FileUpload拦截器将文件绑定到Action的实例中,就能够以本地文件方式的操作浏览器上传的文件

2015-11-18

原文:简述Struts2框架中常用的拦截器 答:在具体开发中,经常会遇到如下的内置拦截器,它们分别为: 1)拦截器fileUpload提供文件上传功能。 2)拦截器i18n记录用户选择的locale。 3)拦截器token通过token来避免页面的重复提交。 4)拦截器tokenSession和token拦截器一样,不过当页面重复提交时会把请求的数据存储在Session对象里。 5)拦截器cookies使用配置的name和value来配置cookies。

2015-11-18

原文:Hibernate是一种免费的开源Java包,它使得程序与数据库的交互变得十分容易,更加符合面向对象的设计思想,像数据库中包含普通Java对象一样,而不必考虑如何把它们从数据库表中取出。使开发者可以专注于应用程序的对象和功能,而不必关心如何保存它们或查找这些对象。甚至在对SQL语句完全不了解的情况下,使用Hibernate仍然可以开发出优秀的包含数据库访问的应用程序。

2015-11-26

原文:❑DriverManager类:负责管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载并向DriverManager注册后才可以使用,同时提供方法来建立与数据库的连接。

2015-11-26

原文:❑Connection类:负责维护JSP/Java数据库程序和数据库之间的联机,可以建立三个非常有用的类对象。

2015-11-26

原文:❑Statement类:通过Statement类所提供的方法,可以利用标准的SQL命令,对数据库直接进行新增、删除或修改操作。

2015-11-26

原文:❑PreparedStatement类:PreparedStatement类和Statement类的不同之处在于,PreparedStatement类对象会将传入的SQL命令事先编好等待使用,当有单一的SQL指令要多次执行时,用PreparedStatement类会比Statement类有效率。

2015-11-26

原文:❑ResultSet类:负责存储查询数据库的结果,并提供一系列的方法对数据库进行新增、删除和修改操作。也负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当地移动记录指针,可以随心所欲地存取数据库,加强程序的效率。

2015-11-26

原文:使用JDBC操作数据库,一般有如下几个步骤: 1)载入数据库驱动。不同的数据库驱动程序是不同的,一般由数据库厂商提供这些驱动程序。 2)建立数据库连接,获得Connection对象。 3)根据SQL语句建立Statement对象或者PreparedStatement对象。 4)用Connection对象执行SQL语句,获得结果集ResultSet对象。 5)然后一条一条读取结果集ResultSet对象中的数据,保存在某个Java对象中。 6)如果是修改或者删除操作需要对数据发commit命令。 7)最后依次关闭各个Statement对象和Connection对象。

2015-11-26

原文:查询数据库组装对象

2015-11-26

原文:executeQuery

2015-11-26

原文:保存对象到数据库

2015-11-26

原文:executeUpdate

2015-11-30

原文:使用MySQL的网站提供的MySQL的官方驱动。下载地址是http://dev.MySQL.com/downloads/connector/j/5.1.html。下载后是一个zip文件,解压后包含源代码和工程文件,这里只需要驱动文件本身就可以了,文件名为MySQL-connector-java-X.X.X-bin.jar。在使用时需要把驱动程序的jar文件加入到CLASSPATH中。

2015-11-30

原文:Hibernate的安装非常简单,只要把Hibernate提供的jar文件加入到CLASSPATH,再做几项简单配置就可以使用了。

2015-11-30

原文:请到Hibernate的网站http://www.hibernate.org/下载Hibernate包

2015-11-30

原文:1)Hibernate Core。就是人们通常说的Hibernate,它提供了具备完整功能以及优秀性能的对象持久性映射(ORM),即持久层映射核心。Hibernate可以帮助开发者节省持久层编码时间,有助于面向对象的设计。Hibernate Core需要JDK1.3以上或者支持J2EE 1.4、Java EE 5.0的应用服务器,其他软件包建立在Hibernate Core核心提供的功能之上。 2)Hibernate Annotations。提供了JDK 5.0代码标注的功能,从而替代XML元数据,通过使用Hibernate
Annotations,能够减少描述符,编译期校验,以及减少配置和维护工作等。它们提供了其他XML元数据,提供了在XML元数据中不存在的一些功能,诸如Lucene和Validator等。

2015-11-30

原文:3)Hibernate EntityManager。以Hibernate方式实现了J2EE标准中的Java持久化编程接口(JPA),也是EJB 3.0的组成部分。

2015-11-30

原文:4)Hibernate Validator。是一个验证框架,不需要和Hibernate的其他部分绑定就可以使用。用Annotations给类或者类的属性加上约束(constraint),在运行期就可以对属性值进行检查。

2015-11-30

原文:5)Hibernate Search。Hibernate与Lucene相结合的一个Java全文搜索引擎,利用它可以轻易地为Java软件加入全文搜寻功能。Lucene是Apache的一个开源项目,它的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高,Lucene提供一组解读、过滤、分析文件、编排和使用索引的API,它的强大之处除了高效和简单外,最重要的是使使用者可以随时应自己需要自订功能。

2015-11-30

原文:6)Hibernate Shards。是被设计来封装和最小化这种复杂性的一个框架,它在Hibernate Core上提供了水平分割的支持。简单地说,是通过Hibernate在多重数据库上提供一个统一的视图。

2015-11-30

原文:7)Hibernate Tools。Hibernate官方提供的Eclipse插件和Ant工具(在MyEclipse中已经包含了这些工具,如果使用MyEclipse就无须再单独下载)。

2015-11-30

原文:8)NHibernate。Hinbernate的.NET实现。

2015-12-07

原文:Hibernate并不依赖于任何服务器和框架,所以在程序中使用Hibernate非常简单,只需要把Hibernate提供的jar加入到CLASSPATH中就可以了。

2015-12-07

原文:解压下载的Hibernate Core的zip文件,这是一个包括源代码和文档的包,在包的根路径下找到hibernate3.jar(注意,这个jar不是在/lib目录下),这就是Hibernate提供的jar。在程序中可能还会用到以下文件,它们在/lib目录下:

2015-12-07

原文:❑antlr.jar:Hibernate使用ANTLR来产生查询分析器,这个类库在运行环境下时也是必需的。 ❑cglib.jar:Hibernate用CGLIB库来实现PO字节码的动态生成,它是非常核心的库,必需的jar包。❑asm.jar:ASM字节码库,cglib.jar包依赖的包,是必需的jar包。 ❑asm-attrs.jar:ASM字节码库,cglib.jar包依赖的包,是必需的jar包。 ❑commons-collections.jar:Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大,也是必须使用的jar包。

2015-12-07

原文:❑commons-logging.jar:Apache Commons包中的一个,包含了日志功能,是必须使用的jar包。这个包本身包含了一个Simple Logger,但是功能很弱。在运行的时候它会先在CLASSPATH找log4j,如果有,就使用log4j,如果没有,就找JDK1.4带的java.util.logging,如果也找不到就用Simple Logger。这是必需的。 ❑ehcache.jar:Hibernate可以使用不同cache缓存工具作为二级缓存。EHCache是默认的cache缓存工具。如果没有其他的可选缓存工具,则为必需的。
❑jta.jar:JTA规范,当Hibernate使用JTA的时候需要。这是必需的。

2015-12-07

原文:❑dom4j.jar:dom4j是一个Java的XML API,类似于jdom,用来读写XML文件。Hibernate使用dom4j解析XML配置文件和XML映射元文件。这是必需的。 ❑log4j.jar:日志包,是可选的。

2015-12-07

原文:如果想要看到绑定参数的值或者需要减少日志的长度,就要在log4j.properties文件调整Log的输出级别。

2015-12-07

原文:Hibernate支持两种数据库连接方式:JDBC和JNDI方式。 1)基本JDBC配置。入门章节已经介绍过JDBC配置方法,前4个配置也是必须配置的几个属性,如表11.1所示。 2)JNDI配置。为了能在应用程序服务器(application server)中使用Hibernate,应当总是将Hibernate配置成从注册在JNDI中的Datasource处获得连接,至少需要设置下列属性中的一个,如表11.2所示。

2015-12-07

原文:Session接口是Hibernate向应用程序提供操作数据库的最主要接口,它提供了基本的保存、更新、删除和查询的方法。

2015-12-07

原文:UUID包含IP地址和JVM的启动时间(精确到1/4秒)、系统时间和一个计数器值(在JVM中唯一)。在Java代码中不可能获得MAC地址或者内存地址,所以这已经是在不使用JNI的前提下能做的最好实现了。包含IP和时钟两个重要元素UUID可以保证生成的值在网络范围内是唯一的。

2015-12-07

原文:有些数据库的JDBC驱动程序不支持java.sql.Blob或java.sq.Clob。如果在Java应用中处理图片或长文件的二进制数,用byte[]比java.sql.Blob方便;如果处理长度超过255的字符串,java.lang.String比java.sql.Clob更方便。 说明 CLOB表示字符串大对象(Character Large Object),BLOB表示二进制大对象(Binary Large Object)。MySQL不支持标准SQL的CLOB类型。在MySQL中,用TEXT、MEDIUMTEXT及LONGTEXT类型来表示长度超过255的长文本数据。

2015-12-07

原文:除了JDBC风格的问号(?)接收参数外,接口Query还提供了一种对命名参数(named parameters)参数进行绑定的方法。命名参数在查询字符串中是形如name的标识符。如果按JDBC绑定参数,Hibernate对参数从0开始计数。

2015-12-07

原文:通常来讲,事务具备以下四个特性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持续性(durability)。这四个特性也简称为ACID性。

2015-12-07

原文:❑原子性:事务是应用中最小执行单位,就如原子是自然界最小颗粒,具有不可再分的特征一样。事务是应用中不可再分的最小逻辑执行体。

2015-12-07

原文:❑一致性:事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库只包含事务成功提交的结果时,数据库处于一致性状态。如果系统运行发生中断,某个事务尚未完成而被迫中断,而该未完成的事务对数据库所做的修改已被写入数据库,此时,数据库就处于一种不正确的状态

2015-12-07

原文:❑隔离性:各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务都具有隔离性。也即并发执行的事务之间不能互相影响。

2015-12-07

原文:❑持续性:持续性也称为持久性(persistence),指事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中,通常保存进物理数据库。

2015-12-07

原文:在JDBC中,可以用Connection来管理事务,可以将Connection的AutoCommit设定为false,在一连串的SQL语句后,自行调用Connection的commit()来送出变更,如果中间发生错误,则撤销所有的执行。如下代码片段: try{ …… connection.setAutoCommit(false); …… //一连串SQL操作 connection.commit(); }catch(Exception){ //发生错误,撤销所有更改 connection.rollback();
}

2015-12-08

原文:Hibernate通过使用关联到SessionFactory上的SQLExceptionConverter来把SQLException转换为一个对应的JDBCException异常的子类。默认情况下,SQLExceptionConverter可以通过配置dialect选项指定。此外,也可以使用用户自定义的实现类。标准的JDBCException子类型是: ❑JDBCConnectionException:指明底层的JDBC通信出现错误。 ❑SQLGrammarException:指明发送的SQL语句的语法或者格式错误。
❑ConstraintViolationException:指明某种类型的约束违例错误。 ❑LockAcquisitionException:指明了在执行请求操作时,获取所需的锁级别时出现的错误。 ❑GenericJDBCException:不属于任何其他种类的原生异常。

2015-12-08

原文:Hibernate的加锁模式: ❑LockMode.NONE:无锁机制。 ❑LockMode.WRITE:Hibernate在Insert和Update记录的时候会自动获取。 ❑LockMode.READ:Hibernate在读取记录的时候会自动获取。 这3种加锁模式是供Hibernate内部使用的,与数据库加锁无关。 ❑LockMode.UPGRADE:利用数据库的for update子句加锁。

2015-12-08

原文:乐观锁定(optimistic locking)则乐观地认为资料的存取很少发生同时存取的问题,因而不作数据库层次上的锁定。为了维护正确的数据,乐观锁定采用应用程序上的逻辑实现版本控制的方法。

2015-12-08

原文:在不实行悲观锁定策略的情况下,数据不一致的情况一旦发生,有几个解决的方法,一种是先更新的为主,一种是后更新的为主,比较复杂的就是检查发生变动的数据来实现,或是检查所有属性来实现乐观锁定。 Hibernate中透过版本号检查来实现后更新为主,这也是Hibernate所推荐的方式。在数据库中加入一个VERSION栏记录,在读取数据时连同版本号一同读取,并在更新数据时递增版本号,然后比对版本号与数据库中的版本号,如果大于数据库中的版本号则予以更新,否则就回报错误。

2015-12-08

原文:延迟加载机制是为了避免一些无谓的性能开销而提出来的。所谓延迟加载,就是当在真正需要数据的时候,才执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。

2015-12-08

原文:缓存(Cache)是计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝,应用程序在运行时直接读写缓存中的数据,只在某些特定时刻按照缓存中的数据来同步更新数据存储源。 缓存的物理介质通常是内存,而永久性数据存储源的物理介质通常是硬盘或磁盘,应用程序读写内存的速度显然比读写硬盘的速度快,如果缓存中存放的数据量非常大,也会用硬盘作为缓存的物理介质。 缓存的实现不仅需要作为物理介质的硬件,同时还需要用于管理缓存的并发访问和过期等策略的软件。因此,缓存是通过软件和硬件共同实现的

2015-12-08

原文:@Entity注释声明该类为持久类

2015-12-08

原文:在Hibernate的官方网站上提供了一组针对Eclipse的Hibernate插件包,称为“Hibernate Tools”,其安装非常简单。在MyEclipse中已经自动包含了这个插件而且额外提供了很多实用的功能。

2015-12-08

原文:Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。

2015-12-08

原文:Spring的核心是个轻量级(Lightweight)容器(Container),实现了IoC(Inversion of Control)模式的容器,基于此核心容器所建立的应用程式,可以达到程式元件的松散耦合(Loose coupling),让程式元件可以进行测试(Testability),这些特性都使得整个应用程式可以在架构上与维护上都能得到相当程度的简化。

2015-12-08

原文:解释一下其中的各个模块: ❑核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IoC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 ❑Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。 ❑Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP。Spring
AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。

2015-12-08

原文:❑Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO的面向JDBC的异常遵从通用的DAO异常层次结构。 ❑Spring ORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从Spring的通用事务和DAO异常层次结构。
❑Spring Web模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring框架支持与Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

2015-12-08

原文:❑Spring MVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI。 Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。

2015-12-08

原文:Spring的安装非常简单,首先请到http://www.springframework.org/download下载Spring

2015-12-08

原文:在dist根目录下有一个spring.jar包,里面含有完整发布模块的单个jar包。这完全是为初学者考虑,大部分简单应用只引用这一个jar包就足够了,避免了引用多个文件,非常方便。这个文件中不包括mock.jar、aspects.jar、spring-portlet.jar和spring-hibernate2.jar。 除了spring.jar文件,Spring还包括有其他独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar的所有类文件。下面列出了这些包的用途和依赖关系。
❑spring-core.jar。这个jar文件包含Spring框架基本的核心工具类。Spring其他组件都要使用到这个包里的类,是其他组件的基本核心,当然也可以在自己的应用系统中使用这些工具类。外部依赖Commons Logging(Log4J)。

2015-12-08

原文:❑spring-beans.jar。这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理Bean以及进行Inversion of Control/Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。外部依赖spring-core(CGLIB)。

2015-12-08

原文:❑spring-aop.jar。这个jar文件包含在应用中使用Spring的AOP特性时所需的类和源码级元数据支持。使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。外部依赖spring-core(spring-beans,AOP Alliance,CGLIB,Commons Attributes)。

2015-12-08

原文:❑spring-context.jar。这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,instrumentation组件以及校验Validation方面的相关类。外部依赖spring-beans(spring-aop)。

2015-12-08

原文:❑spring-dao.jar。这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。外部依赖spring-core(spring-aop,spring-context,JTA API)。

2015-12-08

原文:❑spring-jdbc.jar。这个jar文件包含Spring对JDBC数据访问进行封装的所有类。外部依赖spring-beans、spring-dao。

2015-12-08

原文:❑spring-support.jar。这个jar文件包含支持UI模板(Velocity,FreeMarker,JasperReports),邮件服务,脚本服务(JRuby),缓存Cache(EHCache),任务计划Scheduling(uartz)方面的类。外部依赖spring-context(spring-jdbc,Velocity,FreeMarker,JasperReports,BSH,Groovy,JRuby,Quartz,EHCache)。

2015-12-08

原文:❑spring-web.jar。这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入Web Application Context特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。外部依赖spring-context,Servlet API(JSP API,JSTL,Commons FileUpload,COS)。 ❑spring-webmvc.jar。这个jar文件包含Spring MVC框架相关的所有类。包括框架的Servlets,Web
MVC框架,控制器和视图支持。当然,如果应用使用了独立的MVC框架,则无须这个jar文件里的任何类。外部依赖spring-web(spring-support,Tiles,iText,POI)。 ❑spring-portletjar。spring自己实现的一个类似Spring MVC的框架,包括一个MVC框架和控制器。外部依赖spring-web,Portlet API(spring-webmvc)。

2015-12-08

原文:为了更好地使用和理解应用上下文,通常用户应当对Spring的Resource有所了解。应用上下文同时也是个资源加载器(ResourceLoader),能被用来加载多个Resource。一个Resource实质上可以当成一个java.net.URL,可被用来从大多数位置以透明的方式获取底层的资源,包括从CLASSPATH、文件系统位置、任何以标准URL描述的位置以及其他一些变种。如果资源位置串是一个没有任何前缀的简单路径,这些资源来自何处取决于实际应用上下文的类型。

2015-12-09

原文:Spring Web MVC框架提供了大量独特的功能,包括: ❑清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command object)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、视图解析器(view resolver)等。每一个角色都可以由一个专门的对象来实现。 ❑强大而直接的配置方式:将框架类和应用类都作为JavaBean配置,支持在一个context中引用其他context中的JavaBean,例如,在Web控制器中对业务对象和验证器(validator)的引用。
❑可适配、非侵入的controller:可以根据不同的应用场景,选择合适的控制器子类(simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器(如Action/ActionForm)继承。 ❑可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要在类似ActionForm的子类中重复它们的定义。

2015-12-09

原文:❑可定制的绑定(binding)和验证(validation):比如将类型不匹配作为应用级的验证错误,这可以保存错误的值。再比如本地化的日期和数字绑定等。在其他某些框架中,只能使用字符串表单对象,需要手动解析它并转换到业务对象。 ❑可定制的handler mapping和view resolution:Spring提供从最简单的URL映射,到复杂的、专用的定制策略。与某些MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。 ❑灵活的model转换:在Spring Web框架中,使用基于Map的名/值对来达到轻易地与各种视图技术的集成。

2015-12-09

原文:❑可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等。 ❑Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。准确地说,这并非Spring MVC框架本身特性,而应归属于Spring MVC使用的WebApplicationContext容器。

本书中的一些图片:









































内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: