一、对整本书的理解--什么是j2ee
二、Springmvc和struts的区别
三、struts 、hibernate、spring和j2ee
四、Struts2
一、对整本书的理解--什么是j2ee
什么是J2EE?它和普通的Java有什么不同?
答:J2EE全称为Java2 Platform Enterprise Edition。
“J2EE平台本质上是一个分布式的服务器应用程序设计环境——一个Java环境,它提供了:
·宿主应用的一个运行基础框架环境。
·一套用来创建应用的Java扩展API。”(引自《J2EE服务器端高级编程》)
2J2EE好学吗?
答:J2EE是很多技术的集合体,并且还在成长中。
你会遇到很多专有名词:比如(X)HTML,Servlet/JSP,JDBC,JMS,JNDI,EJB,XML,Web Service……。
尤其是XML和Web Service正在快速成长。幸运的是,你不需要等到学会所有技术后再开始编程。
大体上J2EE可以分成3个主要应用:Servlet/JSP,EJB,XML/Web Service 和一些支撑技术例如JDBC和JNDI。
你可以一个一个的学。
J2EE有什么用?
答:J2EE用来建设大型的分布式企业级应用程序。或者用更时髦的名词说就是“电子商务”应用程序。
这些企业可能大到拥有中心数据库服务器,Web服务器集群和遍布全国的办公终端,也可能小到只不过想做一个网站。
学J2EE有前途吗?
答:在这一市场目前只有一种技术可以和J2EE竞争,那就是Microsoft的.NET。
相对来说.NET要“新”一些而J2EE要“老”一些。
但是.NET只能用于Windows平台(Microsoft声称要开发C#在Linux上的虚拟机但是尚未兑现该诺言),
考虑到Linux的发展势头,你可以相信.NET不会一统天下。
J2EE的性能不如.NET好,是真的吗?
答:在Sun公司提供的样例程序Pet Store上,Microsoft声称不如相同的.NET程序好。
而Sun公司反驳说这一程序不能真正体现J2EE的性能,并且指责Microsoft在数据库上做了优化。
作者没有学习过.NET因而不能妄下断言。
无论如何,大型分布式程序中的性能瓶颈通常首先来自于错误的设计。
二、Spring MVC和Struts2的区别
1. 机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
4. 设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。
5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。
SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。
为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法:
第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。
第二、从设计实现角度来说,我觉得SpringMVC更加清晰。即使我们去对比Struts2的原理图和SpringMVC的类图,它依然很让人困惑,远没有SpringMVC更加直观:
SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。
这个方案实际上涉及到两个方面:
l
l
处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤:
l
l
l
l
正是这基于组件、接口的设计,支持了SpringMVC的另一个特性:行为的可扩展性。
第三、设计原则更加明朗。
这条重要的设计原则被写在了Spring官方的reference中SpringMVC章节的起始段:
并且重点很好地体现在SpringMVC的实现当中,可以扩展,但却不能改变。我曾经扩展过Spring的IOC、AOP功能,这一点SpringMVC应该和Spring一脉相承。
第四、组件化的设计方案和特定的设计原则让SpringMVC形散神聚。
神
形
SpringMVC是一个基于组件的开发框架,组件的不同实现体系构成了“形”;组件的逻辑串联构成了“神”。因此,“形散神不散”: SpringMVC的逻辑主线始终不变,而行为模式却可以多种多样。
Struts2能够在一个相当长的时间段内占据开发市场主导地位的重要原因在于其技术上的领先优势。而这一技术上的领先优势,突出表现为对Controller的彻底改造:
public class UserController {
}
从上面的代码中,我们可以看到Webwork2 /Struts2对于Controller最大的改造有两点:
·
·
三、struts
1.j2ee是规范,
2.学好j2ee第一是打好基础比如什么servlet,jsp,filter,等等都重点学学,很多培训学校都忽视了这些。然后学习一些服务器,比如tomcate,jboss,weblogic,webshpere等等,特殊后几个,非常有用,如果想达到企业级开发,集群,远程调用等技术是必不可少,单单那用hibernate,sturts,spring这些东西,代表不了j2ee的精髓。
仔细说说,hibernate就是一种持久层技术,说白了就是帮你怎增删该查你的数据,所以你会不会hibernate根本就和j2ee没有太大关系。
在说说spring,管理bean和集成一些开源技术的东西,我们能用到的只是ioc这块,就是用来管理应用层。所以说spring是一种理念,spring让程序员的思路和头脑进化一个层次,这是不容置疑的,但是它本身是可有可无的,没有spring的时代我们一样开发。
3.struts、hibernate、spring
4.struts利用了Servlet、JSP开发的一种设计框架,为了实现MVC
四、Struts2
1.Mvc
如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architectural pattern),属于编程的方法论。
这个模式认为,程序不论简单或复杂,从结构上看,都可以分成三层。
1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。
2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。
3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。
这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。
MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
2.下载目录:
apps:基于Struts 2的示例应用。
docs:Struts 2的相关文档。
lib:Struts 2框架的核心类库。
src:Struts 2框架的全部源代码。
3.配置struts2运行环境
MyEclipse”->“Project Capabilities”->“Add Struts Capabilities”,选择Struts2.1后弹出另外一个对话框,在该对话框中单击“Next”,在其中选择Struts2类库,完成选择后单击“打开”即完成。
4.新建第一个struts示例
新建一个web程序,按上面描述将struts导入
配置 web.xml(一般不用配置) 配置struts.xml
编写struts.xml文件,主要代码如下:
5.struts2处理流程----这个需要敲实例来理解p10
客户提交请求;
请求被提交到一系列的过滤器过滤后到FilterDispatcher;
FilterDispatcher读取配置文件struts.xml,根据配置信息调用Action处理客户请求;
Action执行完毕,返回执行结果,根据struts.xml的配置找到返回结果。
Struts2框架处理流程
加载类:FilterDispatcher
读取配置:struts配置文件中的Action
派发请求:客户端发送请求
调用Action:FilterDispatcher从配置中读取对应的Action
启用拦截器:如验证
处理业务:回调Action的execute()方法
返回响应:execute方法将信息返回到FilterDispatcher
查找响应:FilterDispatcher根据配置查找响应信息,如:SUCCESS、ERROER,跳转到相应jsp页面
响应用户:jsp--->浏览器端显示
6.struts2配置详情(基础概念)
文件结构
Bean配置
常量配置
包配置
命名空间配置
包含配置---了解就好了,后面都有完善版的
7.实现action配置类
Action--actionsupport
通过实现接口,继承类得到默认属性和方法
8.struts2访问servlet API----action类的操作
直接:ioc:通过实现接口
非ioc:servletActionContext
间接:通过actioncontext传递数据
9.配置result
-----name
10.使用注解配置action
实现零配置,将基于xml的配置转换成基于注解的配置
parentPackage:父包
Result:定义一个result的映射
Action:动作
Namespace:命名空间--------掌握需敲实例p52