在struts2中有一个核心控制器FilterDispatcher,它负责处理用户的所有请求,如果遇到以.action结尾的请求url,就会交给Struts2框架来处理,Struts2的工作流程如下:
客户端浏览器发送请求--核心控制器FilterDispatcher接收请求后,根据后面的扩展名,来决定是否调用action,以及调用哪个action--在调用action的execute方法之前,struts2会调用一系列的拦截器以提供一些通用的功能,如验证或文件上传等功能,这些拦截器的组合被称为拦截器链--在调用完拦截器链后,struts2就会调用action的execute方法,在execute方法中就会执行用户的相关操作--根据action的execute方法的返回值,会将处理结果信息返回到浏览器,这些结果可以是html页面,jsp页面、图像,也可以是其他的任何web资源
开发一个struts2框架程序的步骤:
配置web.xml文件--编写发出请求的页面--编写处理请求的action--配置关于action的映射文件--进行测试
准备工作:
myEclipse-创建web项目-导入struts2的包
开发步骤例子:
开发struts2的步骤:
1.配置web.xml文件
配置FilterDispatcher的xml
<filter>
//过滤器名称
<filter-name>struts2</filter-name>
<filter-class>
//指定Struts2过滤器的类名
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
//配置Struts2过滤器要过滤的路径
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.编写发出请求的页面
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>hello world</title>
</head>
<body>
<h2>
//使用property标签来获取Action中的属性
<s:property value="message"/>
</h2>
</body>
</html>
3.编写处理请求的action
实现业务逻辑message
package struts2;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport{
public static final String MESSAGE="Hello World!I'm from struts2 ";
public String execute()throws Exception{
setMessage(MESSAGE);
return SUCCESS;
}
private String message;
public void setMessage(){
this.message=message;
}
public String getMessage(){
return message;
}
}
4.配置关于action的映射文件
<struts>
<constant name="struts.devMode" value="false"/>
<package name="struts2" extends="struts-default">
<action name ="HelloWorld" class="struts2.HelloWorld">
<result>/helloWorld.jsp</result>
</action>
</package>
</struts>
5.进行测试
其他概念:
Struts2是基于J2EE平台的MVC框架,主要是采用servlet和JSP技术来实现的一个MVC框架。
Struts2=jsp+servlet
1、(jsp获取页面信息,传递给web容器,web容器分给对应的servlet)Struts2中,jsp获取数据,传递给FilterDispatcher来分派,找到对应的action来处理;
2、执行方法前后,会调用拦截器提供一些通用功能(验证/文件上传等)
3、调用完拦截器后,struts2 会调用action的execute方法,执行用户相关操作。(如果action中想对servletAPI做访问,就要用ActionContext类)
4、根据返回值返回 result 给浏览器,<result>元素的值可以是jsp页面文件,也可以是一个Action的name值。通过这些配置告诉Struts2框架,在执行Action后,将相应一个JSP文件或者将执行另一个Action。
5、在web的世界中,输入/输出是没有数据类型的概念的,任何数据都被当作字符串或字符串数组来传递。如果使用servlet+JSP,我们需要自己手动转换数据类型成为对象,然后处理之后再转换成字符串传递给用户。
Struts2中有强大的类型转换功能,对常用的数据类型提供了内建的数据类型转换器。
6、Struts2输入校验,action中有validate方法可以做校验的跳转。