Struts2第一天
1.为什么要学习Struts2
先分析我们之前所写的Servlet:
MVC设计模式其实是一种软件设计思想,可以把设计思想理解成接口;MVC设计模式有多种实现方式,其中,JSP+Servlet+JavaBean就是其中的实现方式之一。
但是,JSP+Servlet+JavaBean这种实现方式中,Servlet存在着接收请求参数、页面跳转代码冗余的问题。所以,这种实现方式不是最好的MVC的实现。Struts2框架就是一种更好的MVC设计模式的实现方式。
2.3.Struts2在项目中的角色
JavaEE开发规范规定,一个Java web项目应该要分为三层:
1、WEB层:页面数据显示、页面跳转调度;
2、业务层:业务处理和功能逻辑、事务控制;
3、持久层:数据存取和封装、和数据库打交道;
3.1.2.第二步:在web.xml中配置Struts2的核心过滤器
3.1.3.第三步:在类的根路径下创建一个名叫struts.xml的文件,并导入约束
src下新建struts.xml,文件名一般都是struts.xml,不要去改文件名。
truts.xml配置DTD信息:可从struts2-core.jar中的struts-2.3.dtd中复制。
如何配置XML自动提示br> 果电脑可以联 ,自动从 上下载 DTD,在编写xml文件时就有了提示。
果电脑没有联 ,在本地配置DTD文件位置,提供本地提示。
置XML自动提示步骤:
第一步:从struts.xml中复制dtd 址:
第二步:打开eclipse的Window–>Preferences–>XML Catalog:
第三步:点击Add添加dtd文件路径:
点击File System添加dtd文件的路径,dtd文件在源码中可以找到:struts-2.3.24srccoresrcmainresourcesstruts-2.3.dtd
Key type选择URI,key填写我们之前复制的dtd 址
确定,重新打开struts.xml,就有了提示。
Struts2入门案例
需求:使用Struts2编写一个简单的请求与跳转的功能:在浏览器中输入请求地址,经过struts2框架,跳转到success.jsp页面。
案例实现
第二步:在struts.xml中配置HelloAction类
第三步:在WebContent下新建success.jsp页面
3.2.2.4.第四步:启动Tomcat测试访问结果
启动tomcat,在浏览器中输入地址:http://localhost:8080/struts2_day01/hello.action
或http://localhost:8080/struts2_day01/hello
注意:Struts2框架规定action默认的后缀名就是action,也可以不写,一般都带上action。
Struts2的执行过程
程序基本运行流程分析
拦截器:对请求做出一些处理,每个拦截器对应一个功能(公用的,重要的),帮Action处理一些重复的重要的事情,拦截完之后,请求再进入Action,此时Action只需要关注业务逻辑。
那么在调用Action之前会经过哪些拦截器了br> 我们可以参考 struts-core.jar 提供 struts-default.xml 配置文件
默认情况下, 访问每个Action ,默认拦截器defaultStack里的拦截器都会执行。
为了能在拦截器中打断点,需要关联Struts2的源码。步骤如下:
第一步:确定你要观察的类在哪个jar包中。modelDriven拦截器类在xwork-core.jar包中,fileUpload拦截器在struts-core.jar包中,所以需要关联xwork-core.jar、struts-core.jar这两个jar包的源码。
第三步:点击Apply,再点击OK。
那么我们该如何查看源代码呢便挑选几个拦截器,选中拦截器类
点击OK,即可打开源码。
3.4.Lib目录中的jar包介绍(了解)
sm-.jar:字节码操作类库 (.class文件)
ommons-fileupload-1.2.2.jar:文件上传组件,2.1.6版本后需要加入此文件。
ommons-io-2.0.1.jar:上传文件依赖的jar包。
ommons-lang-2.5.jar:对java.lang包的增强,主要是提供字符串等操作的公用方法。
reemarker-2.3..jar:模版引擎,struts2标签库,依赖freemarker ,Struts 2的UI标签的模板使用FreeMarker编写。
avassist*.jar 生成代理的类库。
og4j-api.jar:log4j日志接口。
og4j-core.jar:log4j日志实现
gnl-3.0.x.jar:OGNL对象图导航语言(Object Graph Navigation Language), struts2框架通过其读写对象的属性。(类似于EL但更强大)
truts2-core-2.3.x.jar:Struts 2框架的核心类库。
work-core-2.3.x.jar:Command命令模式框架, Struts2和WebWork都基于和依赖xwork。
Struts2配置文件详解
配置文件的分类
框架内置的配置文件(有三个)
efault.properties:在struts2-core.jar的org.apache.struts2包中,存放了Struts2所有的常量信息
truts-plugin.xml:可有可无,在某个插件的jar包中,定义了插件中的bean、action等信息
配置文件加载的顺序
Struts2框架中的六个配置加载顺序如下:
default.properties—>struts-default.xml—>struts-plugin.xml—>struts.xml—>struts.properties—>web.xml
补充:从源码的角度来分析各种配置文件的加载顺序
(1)Struts2项目启动时,会调用过滤器的init方法完成初始化;(参考StrutsPrepareAndExecuteFilter的第57行代码,InitOperations第74行代码)
(2)初始化时,先加载default.properties文件;(参考Dispatcher类第483行代码)
(3)再加载,struts-default.xml、struts-plugin.xml、struts.xml文件;(参考Dispatcher类第484行代码)
(4)再加载struts.properties;(参考Dispatcher类第485行代码)
(5)再加载web.xml配置的初始化参数;(参考Dispatcher类第486行代码)
(2)当更改了配置文件,自动重载配置文件,不需要重启服务,提高开发效率
说明:常量还可以在struts.properties和web.xml中配置,但是我们一般就在struts.xml配置常量。
package标签
作用:
在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理Action类。便于模块化开发Action类。
属性:
- name: 包的名称。必须写。且必须唯一。
- extends: 一般情况下需要继承struts-default包,但不是必须的。不过如果不继承的话,将无法使用struts2提供的核心功能。struts-default.xml中定义着struts-default这个包。而struts-default.xml是在我们的struts.xml加载之前加载。
- abstract: 把包声明为抽象包,抽象包就是用来被继承的。只要是没有元素的包,就可以声明为抽象包。
- namespace: 名称空间。它的作用是把访问的URL按照模块化来管理。 名称空间的写法:
一般以/开头
当我们指定了名称空间之后,访问的URL就变成了:
名称空间+action标签的name属性取值
例如:
/n1/hello.action
/customer/addCustomer.action
/customer/editCustomer.action
/linkman/findAllLinkMan.action
/linkman/removeLinkMan.action
用法:
下面演示namesapace的具体用法:
struts.xml中自定义了一个default包,namespace是/,父包是struts-default,该包下hello这个action的访问路径是http://localhost:8080/struts2_day01/hello.action
下面演示命名空间为/xxx/ooo的情况
新建Action类Hello1Aciton
自定义一个包,名叫default1,命名空间是/xxx/ooo,把Hello1这个Action配置这个包下。该包下hello1这个action的访问路径是http://localhost:8080/struts2_day01/xxx/ooo/hello1.action
命名空间使用公式:http://服务器ip地址/项目名/命名空间/action名字
命名空间一般是以模块名来命名,例如:部门模块 /dept 员工模块 /emp
action标签
作用:
配置Action类。
属性:
-
name:指定的Action类的访问名称。注意此处不能有后缀。必须唯一。
-
class:指定的是Action类的全限定类名。
-
method:指定的是Action中方法名称
每新建一个Action类,都要为该类做配置:
特殊情况:
果在配置action节点时,没有指定class属性,则默认寻找com.opensymphony.xwork2.ActionSupport类,因为在struts-default.xml做了如下配置,指定默认的Action类,当根据某个名字找不到对应的action时,就找默认的类ActionSupport.
示例代码:
在struts.xml中新增一个action节点的配置,name叫hello1,不指定class属性
在浏览器地址栏中输入地址:http://localhost:8080/struts2_day01/hello1.action,发现依然能跳转到success.jsp页面,证明请求进入了ActionSupport.
果根据名字不到对应的action,则默认使用指定的action的名字。当访问hello123时,在包中根本没有名叫hello123的类,但也能跳转到success.jsp页面,因为会去找hello,执行HelloAction类的execute方法
示例代码:
在struts.xml中添加节点,指定当某个action的名字不存在时,默认找哪个action
<ml version=”1.0″ encoding=”UTF-8″gt;
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!