一MVC设计模式:
1. mvc:是一种使用模型(model)-视图(view)-控制器(control)三种模式相结合的一种开发web端应用的设计模式;
2. 各层次作用:
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分;通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分;通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分;通常控制器负责从视图读取数据(获取jsp页面的用户输入的参数),控制用户输入(对数据进行校验),并向模型发送数据(将数据发送到底层,与数据库中的数据进行对比,判断用户是否登录成功等…)。
3. mvc的优点: (1)MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。(2) MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
二,框架和设计模式的区别:
框架: 框架通常是代码重用; 框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。
模式: 设计模式是设计重用; 设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;
三:Struts2框架:
1. 框架的搭建:添加jar包:
commons-fileupload:文件上传组件依赖的jar包
commons-io:Struts2的输入输出,是java.io.*的扩展
commons-lang3:包含一些数据类型工具,是java.lang.*的扩展
freemarker:Struts2标签模板的使用类库
javassist:javaScript字节码解释器
struts2-core:struts2的核心类库
log4j:和日志有关
ognl:Struts2使用的一种表达式语言类库
2. (web.xml)前端控制器的配置:
该文件应该放在根目录下的WEB-INF下面
3. 核心控制器的配置:
该文件中的name属性决定了Action处理哪个用户请求,class属性决定了该Action所对应的实现类;(struts.xml文件通常放在/WEB-INF/Classes/目录下,在该目录下的struts.xml文件会被自动加载,如果是在MyEclipse IDE环境下进行struts.xml文件的配置,需要将该文件放在src下面)
4. Struts2框架的执行原理:
(1),浏览器发送请求,例如:xxx.action.
(2),控制层的核心控制器调用相应的action(过滤)
(3),控制层的拦截器链自动地对请求进行相关的控制逻辑,例如数据校验,数据封装,和文件上传等;
(4),回调actionde的execute方法,(action的默认方法)
(5),execute方法会返回一个字符串输出,该字符串经过拦截器自动处理,核心控制器将根据返回的字符串跳转奥不同的页面,呈现给用户.
5.struts.xml文件配置中的属性:
Constant:该元素用于常量的配置,constant元素包括的属性有name,和value;
处理中文乱码时可以使用:<constantname=”struts.i18n.encoding” value=”utf-8”>
Package:struts2框架会将Action,result等组织到一个名为package的包中,方便管理;
该包中的name属性:是必须的,并且是唯一的,用来指定包名称
该包中的extends属性:指定继承的包;
该包中的namespance属性:该属性定义该包中action命名空间默认命名空间用””表示,根命名空间用”/”表示;
Action元素:用于配置框架中的Action类,name属性是必须的,class可选,用来设定action 类;在<action>中如果不配置class属性时,则默认class为ActionSupport
Result:用来设定Action类处理结束后,下一步做什么,name属性表示result的逻辑名,域action返回的字符串进行匹配;result的值来指定这个结果对应的实际资源位置
四:定义控制器的三种方法:
1. 不继承任何类不实现任何接口 ---体现了struts2的轻侵入性
该方法的弊端: 方法名称错误在编译器不能发现; 返回的逻辑地址名没有规则
2. 引入Action接口(Action接口中定义了5个常量用于规范逻辑地址名;定义了抽象方法用于规范方法签名)
3.继承ActionSupport,实现Action接口;(开发中常使用)
ActionSupport类中提供了execute方法的默认实现,不做任何处理直接跳转到success对应的页面
五,如何在Action中接收用户提交的数据;
1. 属性驱动:在页面中输入的属性username必须与Action中的属性username对应;
2. 模型驱动(开发中常用):在action类中需要实现getModel()方法,返回值为值Bean对象
六,提交页面存在中文乱码问题:
1.所有的页面统一使用utf-8编码,提交的信息中最好不包含中文,如果包含中文请使用post的提交方法
2.在struts.xml文件中配置constant常量:<constant name=”struts.i18n.encoding”value=”utf-8”>
七,编码实现服务器端数据校验:
1. 在action类中添加ActionSupport父类的validate()可以编码实现服务器端数据校验
2. 字段错误信息(FieldError):addFieldError(username对应的就是输入域的name,用于决定未来的报错显示位置”,”具体的报错提示信息”);
3. Validate方法在数据提交的执行流程:
(1)创建action对象 Class.forName(“”).newInstance()
(2)调用set方法注入请求参数
(a) 采用的是模型驱动则使用的是getModel().setXXX
(3)调用validate方法,
(a) 如果添加了报错信息addFieldError时,则自动转向到input,不会调用execute方法
(b) 如果没有添加报错信息,则继续执行execute()方法
(4).struts2的标签库:<%@ taglib uri=”/struts-tags” prefix=”s”%>;该标签库提供了四种主题, xhtml(默认主题,底层采用table进行显示控制); css_xhtml;simple; ajax
(5)<s:fielderror/>:该标签负责显示在Action实例中采用表单验证,数据校验,类型转换出现的错误信息; <s:fielderrorfieldName="username"/>显示和username输入域相关的报错信息
八:用户登录的简单实现:
1.搭建struts2框架;
2.定义欢迎首页:
3.在核心控制器中添加:
4. 创建login.jsp页面;
5. 定义用户提交数据的值bean
同时创建接口,以及其子实现类,定义用户登录的方法:
定义工厂类:
6. 定义action实例:
7. 部署Tomcat服务器,测试系统;
九:MySQL的存储引擎:MylSAM;
1. 静态MylSAM: 如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。
2.动态MylSAM: 如果数据表中出现varchar,xxxtext或xxxblob字段时,服务器将自动选择这种表类型。相对于静态mylsam,这种表存储空间较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表都可以用optimize table命令或优化工具来进行碎片整理
3.压缩MylSAM: 以上说的两种类型的表都可以用mylamchk工具压缩。这种类型的表进一步减少了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先进行解压缩。不管哪种,目前都不支持事务,行级锁和外键约束的功能。