Struts2学习一 框架搭建及内部运行流程

一.环境搭建

一般是三个步骤

 第一步:拷贝所需的Struts2的jar包

第二步:在顶层文件路径下,配置一个文件名为struts.xml的xml文件

第二步:在web.xml中配置控制器

1.Struts2 的jar包

Struts2-core和xwork-core是Struts2最为核心的包,这两个是必须拷贝进去的,其它的包可以根据需要进行拷贝,一般在下载Struts2后,会有例子,可以报实例中所引用的包都拷贝进去。

当我们搭建好环境后,就可以开发第一个Struts2的项目了

二开发Struts2项目

第一步:可以编写一个jsp页面

第二步:在struts.xml中配置动作类和动作方法,

第三部:编写动作方法和动作类

第四部:编写结果视图,结果视图是请求服务器后,要返回给前端的页面。

 

三.当一个请求发送过来之后,它的执行过程

首先是启动tomcat服务器后做的操作

1.加载web.xml文件

2.初始过滤器

3.加载struts.xml文件

下面是一个请求发送过来后,所做的操作

4.客户端的发送请求 *.do

5.请求到达过滤器

6.截获请求的动作名称,并且在struts.xml中查找其请求名称

7.找到动作名称后,实例化动作类

8.执行动作方法

9.根据返回值,在struts2.xml中取到返回的jso页面

10.找到其jsp页面

11.返回给前端页面

 

四.详解Struts2

 1.struts2的配置文件

在Tomact启动的时候,其配置文件就被加载了

配置文件的加载也有一定的顺序,顺序如下:default.properties——>struts-default.xml——>strtuts-plugin.xml——>struts.xml——>struts.properties——>过滤器配置文件

   

    注意:   1.红颜色表示的,我们可以修改其中的参数值

                 2.如果多个配置文件中有相同的值,那么后面值会把前面的值覆盖掉

2.修改一些常量,验证上述结果

例如,我们可以修改其扩展名

 

 <constant name="struts.action.extension" value="do"></constant>

 

这样修改后,就只有是后缀带.do的请求才可以访问,后缀是action和不带任何后缀的都不可以访问(不带默认后缀是action)

 

3.xml中配置元素

a.package元素

struts2中引入了面向对象的思想,引入了包的管理机制,为了更好的管理action动作类。

(1).属性

name,必须写,其必须唯一

extends:一般需要继承struts-default.xml文件,在这个文件有定义着struts-default包,不一定非要继承,如果不继承,那么将不能使用struts2的核心包

abstract:把包声明为抽象包,抽象包被用来继承的,只要是没有action的元素都可以被声明为抽象包

namespace:名称空间,在有名称空间后,访问路径=名称空间+动作名称

属性配置如下:

 

<struts>
  <constant name="struts.action.extension" value="do"></constant>
  <package name="p1" extends="struts-default" namespace="/struts">
  <action name="hello" class="com.yu.web.action.HelloAction" method="sayHello">
  <result name="success">/success.jsp</result>
  </action>
  </package>
</struts>


只有加上名称空间才可以访问到页面

 

 

 <a href='${pageContext.request.contextPath}/hello.action'>带action的</a>
   <a href='${pageContext.request.contextPath}/hello'>不带action的</a>
    <a href='${pageContext.request.contextPath}/hello.do'>带do的</a>
    <a href='${pageContext.request.contextPath}/struts/hello.do'>带namespace的do</a>


b.package中的元素详解

 

(1)namespace

 经过的上面我们可以看到,namespace有两种可能,一种写了此属性,一种不写此属性

不写此属性时:该namespace默认值是"",即namespace="";

注意:不是"/"

(2)action

(1)

name:动作名称   class:类名   默认为:com.opensymphony.xwork2.ActionSupport,是在struts-default.xml中定义的

我们可以替换该动作类,怎么替换了,在上面我们学到的可以替换变量一样的,可以在struts.xml中替换该变量。

 

 <default-class-ref class="自己想写的类名" />


method:动作类的方法名称,,默认是public string execute()

 

当然,该动作名称有一定的规则要求:必须是public ,返回名称必须是String类型,没有参数

(2)动作类的创建方式

第一种,创建一个pojo类,

 

public class HelloAction {
public String sayHello(){
	System.out.println("访问完成");
	return "success";
}
}


第二种实现com.opensymphony.xwork2.Action接口

 

该接口中,有很多的变量,可以表示其返回的字符串,比如:success表示成功的页面,error表示错误页面

第三种继承com.opensymphony.xwork2.ActionSupport

(3)动作访问的配置方式

a.使用通配符:

我们在配置动作方法的时候,根据动作名来配置动作类,这样会写很多的动作配置

 

<action name="addUser" class="com.yu.web.action.ActionImpl" method="addUser">
  <result name="addUser">/addUser.jsp</result>
  </action>
  <action name="updateUser" class="com.yu.web.action.ActionImpl" method="updateUser">
  <result name="updateUser">/updateUser.jsp</result>


用通配符写一个方法就可以了

 

 

<action name="*" class="com.yu.web.action.ActionExtends" method="{1}">
  <result name="*">/{1}.jsp</result>

*表示任意的请求动作名,{1}表示匹配第一个*号

 

使用两个通配符

 

<action name="*_*" class="com.yu.web.action.{1}Action" method="{1}">
  <result name="success">/{1}{2}.jsp</result>
  </action>


{1}对应第一个星号,{2}对应第二个星号

 

 

在stratus.xml中的找寻action时的原则:

绝对匹配优先,如果有通配符,那么按照在配置文件中的顺序来匹配(注意,一个通配符和两个通配符是同样级别的,即所有通配符的匹配都是按照其顺序来匹配)

b.动态访问

如果想使用动态访问,那么首先要允许动态调用.

 

  <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>


动态访问的格式是动作名!动作方法

 

 <a href='${pageContext.request.contextPath}/struts/hello!sayHello'>动态调用</a>

 

  <action name="hello" class="com.yu.web.action.HelloAction" >
  <result name="success">/success.jsp</result>
  </action>

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值