Struts2学习笔记
Java相关课程系列笔记之十三
笔记内容说明
Struts2(李翊老师主讲,占笔记内容100%);
目录
一、Struts2概述 (1)
1.1为什么要用Struts (1)
1.2什么是MVC (1)
1.3JSP Model1和JSP Model2 (1)
1.4Struts2发展史 (2)
1.5衡量一个框架的标准 (2)
1.6Struts2使用步骤 (2)
1.7struts.xml内容详解 (4)
1.8Struts2提供的方便之处 (5)
1.9案例:简单登录(使用Strust2) (5)
1.10案例:修改1.6、1.9案例使用户不能绕过前端控制器 (6)
1.11NetCTOSS项目:显示资费列表 (7)
1.12NetCTOSS项目:资费列表分页显示 (11)
二、OGNL技术 (14)
2.1什么是OGNL (14)
2.2OGNL基本语法 (14)
2.3OGNL表达式中加“#”和不加“#”的区别 (15)
2.4OGNL体系结构 (16)
2.5XWord框架对OGNL进行了改造 (16)
2.6ValueStack对象结构 (16)
2.7ValueStack结构演示 (17)
2.8Struts2标签的使用 (18)
2.9Struts2对EL表达式的支持 (18)
2.10案例:修改1.12案例(使用Struts2标签和OGNL表达式) (19)
三、Action (20)
3.1Struts2的核心组件 (20)
3.2Struts2的工作流程 (20)
3.3在Action中访问Session和Application (20)
3.4NetCTOSS项目:用户登录 (21)
3.5Action属性注入 (24)
3.6案例:重构NetCTOSS资费列表分页显示(使用属性注入) (24)
3.7使用通配符配置Action (24)
3.8案例:通配符配置(资费增、改、查) (25)
3.9Struts2中Action的设计经验 (25)
四、Result (26)
4.1Result注册配置 (26)
4.2Result组件利用
4.3常见的Result组件类型 (26)
4.4NetCTOSS项目:资费删除 (26)
4.5NetCTOSS项目:基于StreamResult生成验证码 (28)
4.6NetCTOSS项目:基于JSONResult进行验证码检验 (30)
4.7NetCTOSS项目:添加资费模块中的验证资费名是否重复 (32)
五、Struts2标签 (36)
5.1A开头的标签 (36)
5.2B开头的标签 (36)
5.3C开头的标签 (36)
5.4D开头的标签 (36)
5.5E开头的标签 (36)
5.6F开头的标签 (36)
5.7G开头的标签 (37)
5.8H开头的标签 (37)
5.9I开头的标签 (37)
5.10L开头的标签 (37)
5.11M开头的标签 (37)
5.12O开头的标签 (37)
5.13P开头的标签 (37)
5.14R开头的标签 (37)
5.15S开头的标签 (37)
5.16T开头的标签 (38)
5.17U开头的标签 (38)
5.18所有标签都具备的属性 (38)
5.19案例:常用标签 (38)
六、拦截器 (41)
6.1Struts2详细流程图 (41)
6.2拦截器的作用 (41)
6.3拦截器的常用方法 (41)
6.4自定义拦截器步骤 (41)
6.5Struts2内置的拦截器 (42)
6.6案例:拦截器入门 (43)
6.7拦截器栈 (46)
6.8fileUpload拦截器原理 (46)
6.9案例:使用fileUpload拦截器实现文件上传 (46)
6.10NetCTOSS项目:登录检查拦截器 (48)
七、Struts2中如何处理异常 (50)
7.1异常一般出现在何处 (50)
7.2如何配置异常 (50)
八、Struts2中如何实现国际化 (51)
8.1i18n (51)
8.2如何获得中文的Unicode编码 (51)
8.3浏览器如何决定用哪个资源文件 (51)
8.4资源文件的命名 (51)
8.5资源文件的分类 (51)
8.6实现国际化的步骤 (51)
九、NetCTOSS项目 (53)
9.1DAO优化、重构、封装!【重要】 (53)
9.3导航条 (57)
十、项目经验 (59)
10.1主键用int还是Integer (59)
10.2“../”表示的意思 (59)
10.3导入静态页面,样式、JS失效问题 (59)
10.4
10.5四种情形下的绝对路径写法 (59)
10.6URL和URI (59)
10.7util.Date和sql.Date (59)
一、Struts2概述
1.1为什么要用Struts
1)JSP用HTML与Java代码混用的方式开发,把表现与业务逻辑代码混合在一起给前期开发与后期维护带来巨大的复杂度。
2)解决办法:把业务逻辑代码从表现层中清晰的分离出来。
3)2000年,Craig McClanahan采用了MVC的设计模式开发Struts主流的开发技术,大多数公司在使用。
1.2什么是MVC
1)M-Model模型
模型(Model)的职责是负责业务逻辑。包含两部分:业务数据和业务处理逻辑。比如实体类、DAO、Service都属于模型层。
2)V-View视图
视图(View)的职责是显示界面和用户交互(收集用户信息)。属于视图的类是不包含业务逻辑和控制逻辑的JSP。
3)C-Controller控制器
控制器是模型层M和视图层V之间的桥梁,用于控制流程。比如我们之前项目中写的ActionServlet。
1.3JSP Model1和JSP Model2
1)JSP Model1
最早的JSP/Servlet模式被我们称之为JSP Model1(JSP设计模式1),在其中有模型层M,但是视图层V的JSP中包含了业务逻辑或控制逻辑,JSP和Servlet紧密耦合。即:JSP (数据的展现和业务流程的控制)+JavaBean(对数据的访问和运算,Model)。
2)JSP Model2
JSP Model2(JSP设计模式2)和JSP Model1不同之处再与将JSP中的业务逻辑和控制逻辑全部剔除,并全部放入控制层C中,JSP仅仅具有显示页面和用户交互的功能。
编程理念:高内聚低耦合。即:
M:Model,用JavaBean来做(对数据的访问和运算)
V:View,用JSP来作(数据的展现)
C:Controller,用Servlet来作(业务流程的控制)
Struts2发展史
1)最早出现的Struts1是一个非常著名的框架,它实现了MVC模式。Struts1简单小巧,其中最成熟的版本是Struts1.2。
2)之后出现了WebWork框架,其实现技术比Struts1先进,但影响力不如Struts1。
3)在框架技术不断发展的过程中,有人在WebWork的核心XWork的基础上包装了Struts1(算是两种框架的整合),由此,结合了Struts1的影响力和WebWork的先进技术,Struts2
生了。
4)Struts2不是Struts1的升级,它更像是WebWork的升级版本。
衡量一个框架的标准
1)健壮性:Struts2.0不健壮(带0的就是实验品),Struts2.1.8是健壮的(2.1.6也不健壮,该版本BUG较多),3颗星。
2)易用性:易用性越好,原理则越复杂,4颗星。
3)扩展性:Struts2,5颗星。
4)侵入性:即对写代码的要求(如:必须继承某个类才能怎么怎么样……),越低越好。Struts2低但也有侵入性,4颗星。
Struts2使用步骤
:创建一个JavaWeb Project,命名为struts01(Struts2只能用在Web项目里)
step2:拷贝Struts2的核心Jar包到WEB-INF/lib/下,基本功能核心jar包5个:1)xwork-core-2.1.6.jar:Struts2核心包,是WebWork内核。
2)struts-core-2.1.8.jar:Struts2核心包,是Struts框架的“外衣”。
3)ognl-2.7.3.jar:用来支持OGNL表达式的,类似于EL表达式,功能比EL表达式强大的多。
4)freemarker-2.3.15.jar:freemarker是比JSP更简单好用,功能更加强大的表现层技术,用来替代JSP的。在Struts2中提倡使用freemarker模板,但实际项目中使用JSP也很多。
5)commons-fileupload.jar:用于实现文件上传功能的jar包。
制器,它只负责根据请求调用不同的Action
注意事项:原来的项目是用Servlet的方式作为控制器。
web.xml内容:
(Java类)的对应关系,前端控制器会根据配置信息调用对应的Action(Java类)去处理请求
◆注意事项:
在编写时struts.xml放在src目录中,而部署后该文件位于WEB-INF/classes/下!
同样的,.properties文件也放src下,部署后也在WEB-INF/classes/下!
程序一启动,struts.xml就会被加载到内存,并不是现读的。
http://localhost:8080/appName/namespace/actionName.action
即:http://localhost:8080/struts01/day01/welcome.action
③extends="struts-default":继承的包名,一般继承Struts2默认提供的struts-default 包,该包中定义了很多Struts2应用必须的组件(比如:拦截器);该package声明的位置在struts2-core-2.1.8.jar/struts-default.xml文件中。
◆注意事项:
appName是部署时项目的名字!
包只能继承包。不能说包继承某个类!
2)
一个请求),
①name="welcome":表示请求的名字为welcome(即welcome.action)
②class="com.tarena.action.WelcomeAction":格式为“包名.类名”。指定了对应的Action类(Java类)来处理请求。class属性可以不写,不写则Struts2会默认为该
③method="xxx":用于指定在对应的Action类中要执行的方法名,该方法的返回值
step2:在WebRoot下创建jsp文件夹,并放入loginform.jsp和welcome.jsp
应用名前的“/”要写。