一、框架概述
1、框架的意义与作用:
所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。
特点:封装了很多细节,程序员在使用的时候会非常简单。
2、三大框架:
Struts2,Hibernate,Spring
1、Struts2概述
Struts2是Apache发行的MVC开源框架。注意:它只是表现层(MVC)框架。
在这里我要来说说什么是(MVC)框架
M:Model模型,封装数据。javabean
V:view视图,展示界面。jsp
C:Controller控制器,控制程序流程。Servlet
示意图:2、Struts2的来历
Struts1:也是apache开发的一套mvc的开源框架。在2005年之前非常流行。
弊端:Struts1的核心控制器就是一个Servlet。随着使用者的增多,弊端开始出现。
Struts2:在之前有一个设计超前的框架XWork,后来推出了XWork1和WebWork2。Struts2就是apache和OpenSymphony组织合并开发出来。
Struts里面包含了WebWork2的核心及Struts1的一些特性和功能。除此之外,和Struts1没有任何关系了。
三、Struts框架搭建
1、下载Struts2开发包
官网下载: http://struts.apache.org,现在官网最新版本是2.5版本,我暂且使用2.3版本吧
这是下载的包。下载最新版本亦可以
2、开发包目录结构说明
lib文件夹下面有很多jar包,开发中使用那个,直接拷贝哪个就可以了
3、开始搭建Struts开发环境
所需jar包我们到下载的Struts包中的apps目录下
war包文件,把这个struts2-blank.war包文件解压
apps\struts2-blank\WEB-INF\lib下的所以jar全部拷贝
在src目录下创建一个strust.xml文件
这里我要说明一下,由于eclipse本身没有带strust的dtd约束
找到jar包中文件,解压
我们会看到dtd文件
下面我来配置Struts的dtd文件约束,找以下位置,myeclips是集成好的,不用我们来配置
点击ADD增加
key:http://struts.apache.org/dtds/struts-2.3.dtd 这是dtd文件命名空间地址
然后ok
最后找到
xml文件模本语法:
<?xml version="1.0" encoding="${encoding}"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
配置完之后,我们在写Struts文件时就会语法提醒
新建一个Struts.xml文件
下一步next
这是我们创建好的模板
下一步finsh完成,就会看到生成的Struts.xml文件
注意:
1.文件名大小写。
2.创建位置。
3.该名称允许修改,但是我们一般不改。
接下来我们来配置控制器a、配置位置:在web.xml中
b、配置什么: struts2已经写好了的一个过滤器。
打开web.xml文件增加以下配置 <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后我们来发布下,看看
启动没报错,说明成功了
运行http://localhost:8080/Strust-S1/hello
执行成功了
Struts工作原理图
4、Struts执行流程
Struts2配置文件加载时序:
加载时机:
当应用被tomcat容器加载的时候,struts2的配置文件就已经被加载过了。
加载顺序:default.properties——struts-default.xml——plugins配置——struts.xml——struts.properties——web.xml
default.properties 该文件保存在 struts2-core-2.3.15.3.jar 中 org.apache.struts2包里面
struts-default.xml 该文件保存在 struts2-core-2.3.15.3.jar
struts-plugin.xml 该文件保存在struts-Xxx-2.3.15.3.jar
struts.xml 该文件是web应用默认的struts配置文件
struts.properties 该文件是Struts的默认配置文件
web.xml 该文件是Web应用的配置文件
如果多个文件配置了同一个struts2 常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值
Struts给我们提供了两种文件配置方式:
1、Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。缺点:如果属性太多不容易维护上下级关系
2、是xml文件配置。我们推 荐使用xml文件(它能描述层级关系)。
我们来看struts-default.xml文件
我们这里注意下,
当多个配置文件中,有相同的参数,后面的会把前面的值给覆盖了
下面我们来看看default.properties配置文件,体现形式都是key=value。它主要定义了Struts框架的常量,下面主要是一些常用的列举出来
如果我们想改变Struts默认提供的常量,我们可以选择覆盖的方式:
1.例如,Struts默认的后缀名是.action,我们想修改一下后缀名,我们可以在Struts.xml文件中定义常量
这里我只是把开发上常用的常量列举了出来一部分
除了在xml文件中配置,我们也可以创建
struts.properties文件来设置
3、Struts的package元素
3.1、作用:
在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。
3.2、属性:
name:包的名称。必须写。且必须唯一。
extends:一般情况下需要继承struts-default包,但不是必须的。不过如果不继承的话,将无法使用struts2提供的核心功能。
struts-default.xml中定义着struts-default这个包。而struts-default.xml是在我们的struts.xml加载之前加载。
abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包。
namespace:名称空间。
名称空间 + 动作名称 = 访问路径
这里的不是必须的,默认的不是“/”,可以不写,如果写了可以是“”
这里我要说明下
名称空间的搜索顺序:
第一步:先去找对应的名称空间在指定的名称空间下找到了:
就执行第二步。
在指定的名称空间下没找到:按照名称空间结构向上追溯,一直到根名称空间,只要 在任何一级找到了,执行第二步
第二步:找动作名称
先在指定的名称空间下,搜索对应的动作名称:找到了就执行动作类的动作方法。
在指定的名称空间下没找到对应的动作名称:前往默认的名称空间下,找动作名称。
注意:它只找动作名称。