Day43-Struts01

xiaoxiao2021-02-28  95

一、Struts介绍

Struts框架其实就是对之前的servlet进行了包装。让我们写很少的代码即可完成web的请求和处理。所以在学习struts的时候,尽量跟servlet对比,就会发现很多相似之处。 Struts 是 Apache软件基金会(ASF)赞助的一个开源项目 , 它通过采用servlet 和 JSP 实现了基于Java EE Web应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。 Struts 早起发布的版本是 1.x 版本, 后来和另一个也很优秀的EE框架 WebWork 一起整合 ,就形成了我们目前熟悉的Struts2.x

二、Struts 入门

以一个案例来入门Struts的用法:

1)导入jar包 官方下载的包里面有很齐全的jar包,一共有106个,但是我们平常的开发都不会用到这么多。 在apps文件夹下有许多的war工程,其中blank工程就是一个空的工程所必须的jar包。将struts2-blank.war的后缀名修改成为rar或者zip,然后进行解压,在web-inf下面的lib中有Struts所必须的jar包(13个)。可以满足基本的需求了。

2)新建一个类,里面放置一个execute方法 //默认是执行execute方法

public class ActionDemo { public void execute(){ System.out.println("执行了请求了~~~"); } }

3)配置sturts.xml src底下新建一个xml 名称为 struts.xml

4)在struts.xml里面配置action 一个package就表示一组业务,继承了一个自带的包struts-default namespace的默认只是空串“”

<?xml version="1.0" encoding="UTF-8"?> <!-- 导入约束 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <!-- 这段代码如何找,导入的jar包中找到struts2-core-2.3.32.jar包,下方有struts-2.3.dad,点开这个文件就可以找到这段约束 --> <!-- 配置action --> <struts> <package name="demo" extends="struts-default" namespace="/"> <action name="demo" class="com.itheima.test.ActionDemo"></action> </package> </struts>

5) 在web.xml里面配置过滤器(也有称之为 前端控制总栈 ) web.xml是配置struts的核心控制器的配置

<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <!--这个类如何找,核心jar包,按上面class的路径--> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

三、Struts运行过程

因为配置了前端过滤器filter,里面配置了类org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilte,所以会去找这个类,这个类相当于一个servlet,有一个初始化方法init(); init()方法有这么一段代码:dispatcher = init.initDispatcher(config);点进去,在dispatcher.init()代码,点进去,会发现他初始化所做的一系列操作

项目部署 执行过滤器的init方法 前端拦截器先找到类: 在init方法里面有这样的一行代码 dispatcher = init.initDispatcher(config); init_DefaultProperties(); // [1] ---> 加载 default.properties init_TraditionalXmlConfigurations(); // [2] ->加载 struts-default.xml,struts-plugin.xml,struts.xml init_LegacyStrutsProperties(); // [3] ---> 加载struts.properties init_CustomConfigurationProviders(); // [5] ---> 加载自定义的一些初始化类. 一般不写 init_FilterInitParameters() ; // [6] ---> 加载初始化参数。 initparam init_AliasStandardObjects() ; // [7] ---> 给对象起别名 【1】加载default properties,在主包里面有 【2】加载三个文件 【3】加载struts.properties 【5】加载自定义的初始化类,一般不写 【6】加载初始化参数 【7】给对象起别名

一般关注上面三个。我们一般只写struts.xml Struts-default.xml里配置的拦截器。 Default.properties默认已配置所有的常量,根据需求可以在struts.properties,web.xml,struts.xml配置文件里配置常量

2.请求到来

四、配置详解

sturts.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- 导入约束 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <!-- 配置action --> <struts> <package name="demo" extends="struts-default" namespace="/"> <action name="demo" class="com.itheima.test.ActionDemo"> <result name="success" type="redirect">/other.jsp</result> </action> </package> </struts>

4.1package解释

package:一个package就是一组业务的集合,package: 用于表示一组业务,里面的action表示一个请求动作, 主要方便维护、以及struts 能够快速找到具体的类 * name:表示package的别名,一般不建议重复,我们针对用户的操作有很多请求 。 用户的添加 、 用户的删除 、用户的修改… * extends,这个package继承指定的package,struts-default 这也是一个package,这里面包含了很多的拦截器,一般我们都会使用到这些拦截器。这个struts-default 其实是 框架里面有一个 struts-default.xml 里面有声明一个package ,名字就叫struts-default ,这里写上extends其实是跟它形成一种关系。 * namespace:命名空间,直接写/表示根目录,表示在根目录下面再加入一个自路径,用意就是在根目录下面再加一个子路径才能访问到action。默认是空串的值

4.2action解释:

一个动作就是一个action,就是一个请求配一个action,和以前的一个请求配置一个servlet相似, 如上述访问的时候就是–工程名/demo 或者是 工程名/demo.action,action是默认的后缀名,可以通过配置文件进行配置的。 * name就是别名,一般就写方法名或者这个动作的名称 * class,action的全路径地址 * method:访问这个action中的某个方法,推荐使用通配符方式(告诉struts框架,找到那个类之后,执行什么方法)

4.3 result:

执行完结果之后,返回什么结果给浏览器,这个result 可以重复配置,但是name 不要一样, 保证一对一的关系。 之所以能够配置多个result, 那是因为我们在执行某个方法之后,可能会产生多种结果,我们需要针对每一种结果都进行判定。 name就是action的方法返回值,struts会拿着方法的返回值过来找到匹配的result,从而进行页面的跳转(一个action可以配置多个result,因为有可能执行会有多种结果出现) 默认情况走的是请求转发,type=‘redirect’表示重定向 结果还是可以跳转action的(去看看官方文档。)

<result name="success" type="redirect">/other.jsp</result> 使用重定向跳转到other.jsp <result name="error">/login.jsp</result> 使用请求转发跳转到login.jsp

五、Action的通用写法

1)普通类的方式 2)实现接口Action 3)继承ActionSupport类(推荐)

5.1采用普通类写法

public class ActionDemo { public String execute(){ System.out.println("execute333 ~~~~"); return "success"; } }

5.2采用实现Action接口方式

import com.opensymphony.xwork2.Action; public class ActionDemo2 implements Action { @Override public String execute() throws Exception { System.out.println("execute2222执行了~~~"); return SUCCESS; } }

5.3采用继承ActionSupport方式

未来写action都采用这种方式去做。 因为它除了实现接口,提供了一些常量之外,还额外实现了其他接口。 我们可以轻而易举的使用他们来完成一些数据回显 、 国际化的功能。

import com.opensymphony.xwork2.ActionSupport; public class ActionDemo03 extends ActionSupport{ @Override public String execute(){ System.out.println("actionDemo03 execute ~~"); //登陆失败 --》request.setAttribute("msg","用户名或者密码错误了~"); addActionError("用户名或者密码错误了"); return SUCCESS; } }

六、Action的访问策略

主要讲解的就是访问除了execute方法之外的其他方法。 1)使用method属性匹配 2)采用通配符访问Action方法(推荐使用) 3)采用动态方法访问开关

6.1使用method属性匹配

method里面直接写方法的名字即可,这个时候,就能执行一个你的方法了。 缺点:死板,一个action这样只能调用一个方法

public class ActionDemo extends ActionSupport{ public String add(){ System.out.println("访问了add方法~~~"); return SUCCESS; } }

struts.xml里面的配置

<?xml version="1.0" encoding="UTF-8"?> <!-- 导入约束 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <!-- 配置action --> <struts> <package name="demo" extends="struts-default" namespace="/"> <action name="demo" class="com.itheima.test.ActionDemo3" method="add"> <result name="success" type="redirect">/other.jsp</result> </action> </package> </struts>

6.2采用通配符访问 Action方法【推荐使用】

解决了一个Action有多个方法的时候,我们需要配置多个Action标签的问题。 ,现在只需要配置一个action标签即可,然后采用 * 通配符的方式起来访问action的方法

public class ActionDemo extends ActionSupport{ public String add(){ System.out.println("访问了add方法~~~"); return "add_success"; } public String update(){ System.out.println("访问了update方法~~~"); return "update_success"; } }

struts.xml配置

<?xml version="1.0" encoding="UTF-8"?> <!-- 导入约束 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <!-- 配置action --> <struts> <package name="demo" extends="struts-default" namespace="/"> <action name="demo_*" class="com.itheima.test.ActionDemo3" method="{1}"> <result name="success" type="redirect">/other.jsp</result> </action> </package> </struts>

6.3采用动态方法访问【不推荐使用】

打开动态方法访问开关 struts.xml的配置: <?xml version="1.0" encoding="UTF-8"?> <!-- 导入约束 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <!-- 配置action --> <struts> <!-- 打开动态访问的开关 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="demo" extends="struts-default" namespace="/"> <action name="demo" class="com.itheima.test.ActionDemo3"> <result name="add_success" type="redirect">/other.jsp</result> <!-- 添加成功 删除成功 --> <result name="update_success" type="redirect">/other.jsp</result> <!-- 添加成功 删除成功 --> </action> </package> </struts>

2.直接访问action localhost:8080/项目名/demo!add —> action名称 + ! + 方法名

小结:Struts使用步骤:

1)导入jar包到lib文件夹中 2)配置web.xml,配置里面的filter属性(前端控制总站) 3)配置struts.xml,配置具体的action的映射 4)编写Action

转载请注明原文地址: https://www.6miu.com/read-54810.html

最新回复(0)