Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
1.tomcat启动加载Web.xml,核心控制器 加载并解析struts.xml
2.客户端发出请求到Action,核心控制器 根据后缀名拦截
3.FilterDispatcher根据struts.xml配置文件信息找到指定的Action方法
4.执行相关的业务逻辑后返回字符串
5.根据返回字符串,在 struts.xml的<result>的name属性的值,进行匹配跳转到指定的jsp或重定向到其他Action使用Struts2进行操作
搭建struts2的框架
1.导入jar包
2.在web.xml文件中添加StrutsPrepareAndExecuteFilter
<!-- struts begin -->
<filter>
<filter-name>struts2</filter-name>
<!-- struts的总控制器-->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<!-- struts2会将后缀名为.action的路径拦截下来 -->
<url-pattern>*.action</url-pattern>
</filter-mapping>
|
在src下添加struts.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!--
package提供了将多个Action组织为一个模块的方式 package的名字必须是唯一的
package可以扩展 当一个package扩展自 另一个package时
该package会在本身配置的基础上加入扩展的package 的配置
父package必须在子package前配置
name:package名称
extends:继承的父package名称
abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false
namespace:定义package命名空间 该命名空间影响到url的地址,
例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action -->
<package name="struts2" extends="struts-default">
<!--
Action配置
一个Action可以被多次映射(只要action配置中的name不同)
name:action名称 class:
对应的类的路径
-->
<action name="hello" class="com.mr.action.HelloAction">
<!--
节点配置
name : result名称 和Action中返回的值相同
type : result类型 不写则选用superpackage的type
struts-default.xml中的默认为dispatcher
dispatcher :转发
redirect :重定向
-->
<result name="hello">/WEB-INF/view/hello.jsp</result>
</action>
</package>
</struts>
|
创建类HelloAction
如何调用方法
- 将项目添加在tomcat中,启动。
- 在浏览器中输入路径。
http://localhost:8080/mr-struts2/hello!hello.action
通过以上路径的形式,可以访问到需要访问的方法。
如何接受参数
//私有化属性
private String name;
//提供公共的get、set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
3.get方法访问,通过url?name=张三 传参。
url
http://localhost:8080/mr-struts2/hello!hello.action?name=张三
结果
如何跳转页面
- 返回的String字符串,将和<action>标签中的<result>标签中的name值进行匹配。跳转到<result>标签中的指定页面。
如何传递参数
- 项目中我们还需要将数据发送前台进行展示,例如查询到数据之后,将数据发送到list页面进行展示。
- 在类中定义私有化的属性,给属性提供公共的get、set方法,前台jsp页面就可以通过${属性名} 获取到数据。