1.[Struts2权威指南笔记]Struts2体系介绍

简介:

1.Struts2体系介绍

Struts2的体系和Struts1体系差别很大,因为Struts2使用了WebWork的设计核心,而不是使用Struts1的设计核心。Struts2大量使用连接器来处理用户请求,从而允许用户的业务逻辑控制与Servlet API分离。

Struts2的框架

Struts2使用拦截器作为处理用户的业务逻辑,通过控制器代理负责处理用户请求,处理用户请求时回调业务控制器的execute方法。

175229624.png

Struts2框架处理流程:

1.浏览器发送请求

2.核心控制器FilterDispatcher根据请求决定调用合适的Action

3.Struts2的拦截器链自动对请求应用通用功能

4.回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作

5.Action的execute方法处理结果信息将被输出到浏览器

核心控制器FilterDispatcher

该控制器作为一个Filter运行在Web应用中,负责拦截所有用户请求,当用户请求达到时,该Filter会过滤用户请求。如果用户请求以action结尾,则请求被转入Struts2框架处理。

Struts2应用的Action被定义在struts.xml文件中,该文件中定义Action时,定义该Action的name属性和class属性。

Struts2处理用户请求的Action实例,不是用户实现的业务控制器,而是Action代理,因为用户实现的业务控制器没有与Servlet API耦合。

Struts2提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中请求参数解析并传入Action,并回调Action的execute方法来处理用户请求。

业务控制器

业务控制器组件就是用户实现Action类的实例,Action类包含execute方法,该方法返回一个字符串—— 该字符串就是一个逻辑视图名,当业务控制器处理完用户请求后,根据处理结果不同,execute方法返回不同的字符串。

每个Action都要处理一个用户请求,而用户请求总是包含指定URL,当FilterDispatcher拦截到用户请求后,根据请求的URL和Action处理URL之间的对应关系来处理转发。

Struts2的视图组件

当Struts2的控制器返回逻辑视图名时,不仅需要指定Action的name属性和class属性,还要为Action指定系列<result../>元素,每个<result../>元素顶一个个逻辑视图和物理视图之间的映射。

Struts2的配置文件

Struts2配置文件有两份:

1.配置Action的struts.xml文件

2.配置Struts2的全局属性的struts.properties文件

struts.xml文件定义了Struts2的Action,定义Action,指定Action实现类和定义该Action处理结果与视图资源之间的映射关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
< struts >
     <!-- struts2的Action都必须配置在package里 -->
     < package  name = "frame-default"  extends = "struts-default,json-default" >
         <!-- 定义一个Logon的Action,实现类为lee.Logon -->
         < action  name = "Logon"  class = "lee.Logon" >
             <!-- 配置Action的返回input时转入pages/Logon.jsp页面 -->
             < result  name = "input" >/pages/Logon.jsp</ result >
             <!-- 配置Action的返回cancel时重定向到名为Welcome的Action -->
             < result  name = "cancel"  tyep = "redirectAction" >Welcome</ result >
             <!-- 配置Action的返回 success时重定向到名为MainMenu的Action-->
             < result  name = "redirectAction" >MainMenu</ result >
             <!-- 配置Action的返回 expired时进入名为修改密码的Action-->
             < result  name = "expired"  type = "chain" >ChangePassword</ result >
         </ action >
         <!-- 定义Logoff的Action,实现类为lee.Logoff -->
         < action  name = "Logoff"  class = "lee.logoff" >
             <!-- 配置Action的返回 success时重定向到名为Welcome的Action-->
             < result  type = "redirectAction" >Welcome</ result >
         </ action >
     </ package >
</ struts >

定义Action时,不仅定义了Action的实现类,而且在定义Action时处理结果使,指定了多个<result/>,<result/>元素指定execute方法返回值和视图资源之间的映射关系。

定义result元素时,指定两个属性:type和name,其中name制定了execute方法返回的字符串,而type指定转向的资源类型,转向的资源可以是JSP、FreeMarker,甚至是另一个Action等。

175307162.png

Struts2标签库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- 使用JSP定义一个Action -->
< from  method = "post"  action = "basicvalid.action" >
     <!-- 下面顶一个说那个表单域 -->
     名字< input  type = "text"  name = "name"  />< br />
     年龄< input  type = "text"  name = "age"  />< br />
     性别< input  type = "text"  name = "sex"  />< br />
     <!-- 定义一个按钮 -->
     < input  type = "submit"  value = "提交"  />     
</ from >
<!-- 使用Struts2标签定义的一个表单 -->
< s:form  method = "post"  action = "basicvalid.action" >
     <!-- 下边使用Struts2标签定义三个表单域 -->
         < s:textfield  label = "名称"  name = "name"  />
         < s:textfield  label = "年龄"  name = "age"  />
         < s:textfield  label = "性别"  name = "sex"  />
         <!-- 顶一个提交按钮 -->
         < s:submit />
</ s:form >

Struts2的控制器组件

Struts2的控制器组件是Struts2的核心,其实所有MVC框架的核心都是控制器组件。实际上,Struts2应用中起作用的业务控制器不是用户定义的Action,而是系统生成的Action代理,但Action代理是以用户定义的Action为目标。

1
2
3
4
5
6
7
public  class  LoginAction {
     private  String username;
     private  String password;
     public  String execute()  throws  Exception {
         return  "success" ;
     }
}

实际上,Struts2的Action就是一个包含execute方法的而普通Java类。

2.Struts2的配置

任何MVC框架都需要与Web应用整合,则不得不借助web.xml文件,只有配置在web.xml文件中servlet才会被加载。

对于Struts2框架,Web应用需要加载FilterDispatcher,只要Web应用负责加载FilterDispatcher,FilterDispatcher会加载应用的Struts2框架,因此将Struts2的核心控制器设计成Filter,而不是一个Servlet。

安装Struts2

Struts2必须需要依赖于XWork,lib依赖包:struts2-core-2.jar、xwork-2.jar和ognl-2.jar等必须类库。

web.xml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<? xml  version = "1.0"  encoding = "UTF-8" ?>
< web-app  id = "WebApp_ID"  version = "2.5"
     xmlns = "http://java.sun.com/xml/ns/javaee"  xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
     <!-- 定义struts2.0 start  -->
     <!-- 定义Struts2的核心控制器FilterDispathcer的Filter -->
     < filter >
         <!-- 定义核心Filter的名字 -->
         < filter-name >struts2</ filter-name >
         <!-- 定义核心Filter的实现类 -->
     < filter-class >org.apache.struts2.dispatcher.FilterDispatcher</ filter-class >
     </ filter >
     <!-- FilterDispatcher用来初始化struts2并且处理所有的HTTP请求。 -->
     < filter-mapping >
         < filter-name >struts2</ filter-name >
         < url-pattern >*.action</ url-pattern >
     </ filter-mapping >
     < filter-mapping >
         < filter-name >struts2</ filter-name >
         < url-pattern >*.jsp</ url-pattern >
     </ filter-mapping >
     <!-- 定义struts2.0 end.  -->
</ web-app >

Action用户请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
< html >
   < head >
     < title >My JSP 'MyJsp.jsp' starting page</ title >
   </ head >
   < body >
     < from  method = "post"  action = "login.action" >
         <!-- 下面顶一个说那个表单域 -->
         名字< input  type = "text"  name = "name"  />< br />
         年龄< input  type = "text"  name = "age"  />< br />
         性别< input  type = "text"  name = "sex"  />< br />
         <!-- 定义一个按钮 -->
         < input  type = "submit"  value = "提交"  />     
     </ from >
   </ body >
</ html >

这个页面没有任何动态内容,完全是一个静态的HTML页面,但注意该表单的action属性:login.action,当表单提交时,Struts2的FilterDispatcher将用户请求转发东对应的Struts2的Action。

Struts2的Action默认拦截器所有后缀为.action的请求。











本文转自 LinkedKeeper 51CTO博客,原文链接:http://blog.51cto.com/sauron/1231068,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
开发框架 前端开发 Java
Struts vs. Struts 2:Java Web 开发框架的升级之路与竞争力分析
Struts vs. Struts 2:Java Web 开发框架的升级之路与竞争力分析
45 0
|
XML 前端开发 Java
框架技术,Struts2入门配置
框架技术,Struts2入门配置
130 0
框架技术,Struts2入门配置
|
Web App开发 Java 应用服务中间件
|
Java 应用服务中间件 数据库
|
前端开发 Java 容器
|
XML 前端开发 Java
|
移动开发 前端开发 Java