Struts基本概念
内容源自:
一.struts2体系结构:
1、Web浏览器请求一个资源。
2、过滤器Dispatcher查找方法,确定适当的Action。
3、拦截器自动对请求应用通用功能,如验证和文件上传操作。
4、Action的execute方法通常用来存储和重新获得信息。
5、结果被返回到浏览器。
二.Struts2的具体工作流程

(1)  客户端(Client)向Action发用一个请求(Request)
(2)  容器(Container)通过web.xml映射请求,并获得控制器(Controller)的名字
(3)  容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或FilterDispatcher)。在Struts2.1以前调用FilterDispatcher,Struts2.1以后调用StrutsPrepareAndExecuteFilter
(4)  控制器(Controller)通过ActionMapper获得Action的信息
(5)  控制器(Controller)调用ActionProxy
(6)  ActionProxy读取struts.xml文件获取action和interceptor stack的信息。
(7)  ActionProxy把request请求传递给ActionInvocation
(8)  ActionInvocation依次调用action和interceptor
(9)  根据action的配置信息,产生result
(10) Result信息返回给ActionInvocation
(11) 产生一个HttpServletResponse响应
(12) 产生的响应行为发送给客服端。
三.配置文件:
1、struts.xml
struts.xml是Struts 2 的核心配置文件,主要用于配置开发人员编写的action。
(1)基本格式如下:
<?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">
<struts>
<package name="test" extends="struts-default"/>
<action name="Login1" class="com.chen.LoginAction1" >
<result>/loginResult.jsp</result>
<result name="input">/login1.jsp</result>
</action>
</package>
</struts>
①通过反射机制将请求参数注入到"com.chen.LoginAction1"类中
②调用"com.chen.LoginAction1"类的execute方法,该方法的原型为:public String execute() throws Exception;
③ 根据execute方法返回的String类型的字符串(如"input"),在配置文件中查找该字符串对应的页面,并转到该页面。
(2)标签详解
<package>标签
如果要配置<Action>的标签,那么必须要先配置<package>标签,代表的包的概念。包含的属性:
name         包的名称,要求是唯一的,管理action配置。
extends      继承,可以继承其他的包,只要继承了,那么该包就包含了其他包的功能,一般都是继承struts-default
namespace    名称空间,一般与<action>标签中的name属性共同决定访问路径,常见的配置如下:
namespace=""     -- 默认的名称空间(访问的方式和namespace="/"是一样的)
namespace="/"    -- 根名称空间
namespace="/aaa" -- 带有名称的名称空间,这样请求action时,URL是/namespace/name的形式
abstract         -- 抽象的。这个属性基本很少使用,值如果是true,那么编写的包是被继承的。
<action>标签
代表配置action类,包含的属性:
name              和<package>标签的namespace属性一起来决定访问路径的。
class             配置Action类的全类名(默认值是ActionSupport类)
method            Action类中执行的方法,如果不指定,默认值是execute方法
<result>标签
action类中方法执行,返回的结果跳转的页面
name      结果页面逻辑视图名称
type        结果类型(默认值是转发,也可以设置其他的值)
注:
设置Struts2默认的Action:
在地址栏上输入一个不存在的action请求,程序会报404的异常。但是在<package>标签中通过<default-action-ref name="指定action标签name属性"></default-action-ref>来设置默认的Action。当在配置文件中找不到相应的action时,就由默认的action进行处理。
设置Action默认处理类:
在地址栏上输入一个正确的action请求,但是<action>标签中的class属性没有写具体的Action类也会报异常。在<package>标签中通过<default-class-ref class="指定action类的全路径"></default-class-ref>来设定action的默认处理类。
2、多个struts的配置文件的合并
为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。可以在使用<include>标签来引入其他的struts_xx.xml的配置文件。例如:
<struts>
<include file="conf/struts_user.xml"></include>
<include file="conf/struts_editer.xml"></include>
</struts>
这样可以把struts_user.xml和struts_user.xml各自编写,并放到一个文件目录下,使用时strus.xml直接包含这两个配置文件即可。需要注意的是struts_user.xml和struts_user.xml也必须按照strus的配置文件格式来写。
3、web.xml的配置
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
通过<url-pattern>/*</url-pattern>使得struts拦截所有URL请求。
Filter 过滤器是用户请求和处理程序之间的一层处理程序。它可以对用户请求和处理程序响应的类容进行处理,通常用于权限、编码转换等场合。
四。实现Action
1、把Action看作是POJO类
POJO(Plain Ordinary Java Object)简单的Java对象。简单来说,没有继承某个类,没有实现接口,就是POJO的类。我们直接写一个POJO类,把它当作struts2对应的一个Action类。这个类必须包含处理逻辑所需要的属性及相应的get、set方法,并且提供Struts2调用的execute方法。但通常不推荐这样做,这样不利于统一接口。
2、实现Action接口
Action接口中定义了5个常量,5个常量的值对应的是5个逻辑视图跳转页面(跳转的页面还是需要自己来配置),还定义了一个方法,execute方法,我们可以自己来实现。
常量值如下所示:
SUCCESS       -- 成功.
INPUT         -- 用于数据表单校验.如果校验失败,跳转INPUT视图.
LOGIN         -- 登录.
ERROR         -- 错误.
NONE          -- 页面不转向.
3、继承ActionSupport类,而该类实现了Action 、Validateable 、 ValidationAware 、TextProvider、LocaleProvider,Serializable接口。我们只需要根据实际情况重写一些其中的方法就可以满足需求。
五。实例
链接:https://blog.csdn.net/xiaokang123456kao/article/details/58601826
Struts基本概念的更多相关文章
- Struts 基本概念,优点及不同版本之间的关系
		strutx 1.x struts 是 apache 基金会的一个开源项目. struts 是一套实现 MVC的框架. MVC = 程序分层设计的思想 = Model(数据访问层1) / View(视 ... 
- Struts 2 概念介绍
		概念引入 Web层通常使用Servlet+jsp,现在使用Struts2来处理访问服务器请求 Service层 目前使用JavaBean Dao层目前使用Hibernate Spring是一个大的管家 ... 
- struts理解
		最近大家都在找工作,我好迷茫,觉得自己会的东西太少了.所以决定开始学习SSH三大框架. 首先是struts. struts是基于mvc模式的框架.(struts其实也是servlet封装,提高开发效率 ... 
- 基于MVC模式的应用框架之struts
		1.struts开发步骤 引入struts的jar包: 在web.xml中引入struts的核心功能,配置struts核心过滤器:(如果项目中用到了其他过滤器,要放在struts过滤器之前,否则会失效 ... 
- (28)初识struts框架
		案例剖析中介绍了一个自己写的mystruts框架,这里开始简单的认识struts框架. 1.先看一个简单的struts开发的例子来熟悉一下流程 Struts就是基于mvc模式的框架! (struts其 ... 
- Struts框架之 执行流程  struts.xml 配置详细
		1.执行流程 服务器启动: 1. 加载项目web.xml 2. 创建Struts核心过滤器对象, 执行filter → init() struts-default.xml, 核心功能的初 ... 
- Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】
		前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ... 
- Struts framework
		Struts功能详解——ActionMapping对象 Struts旅程(一)Struts简介和原理 实例讲解DispatchAction和LookupDispatchAction DispatchA ... 
- Struts2框架基础
		Struts2框架基础 1.Java的框架 1.1.框架简介 在大型项目开发过程中,经常会使用到一些框架,这样做好的好处是能够提高工作效率,在java中最常用的的框架就是SSH,这其实是三个框架的简称 ... 
随机推荐
- JSON优缺点
			总结: 1.占带宽小(格式是压缩的) 2. js通过eval()进行Json读取(便于客户端读取) 3. JSON支持多种语言(c.c++.PHP等),便于服务端解析 JSON (JavaScript ... 
- LoadRunner中进程运行和线程运行区别
			LoadRunner中的进程与线程 1.进程与线程的区别: 进程和线程的区别是什么?进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性.进程和线程的区别 ... 
- linux 把用户加入一个组&从这个组中移除
			# usermod -a -G www zhou // zhou这个用户现在属于两个组 zhou www # groups zhou zhou : zhou www # gpasswd -d zhou ... 
- ZOJ 3327 Friend Number
			构造. (1)如果数字中带有$0$: 1.只有个位是$0$,这种情况就是给输入的数字$+10$再输出即可. 2.其余情况就是给输入的数字$+1$再输出即可. (2)如果数字中没有$0$: 从个位开始一 ... 
- ZOJ 3324 Machine
			线段树,延迟标记. 记录一下每个节点代表的区间的最小值,以及左右端点是否为最小值,记录区间被下压几次作为延迟标记,再记录一下这个区间中有多少个最小值的连通块. $n$最大有$1$亿,可以开动态线段树避 ... 
- 0822JDBC--Java连接数据库
			JDBC定义: JDBC全称: Java DataBase Connectivity 独立于特定数据管理系统, 通用的sql数据库存取和操作的公共接口, 是一种面向接口编程 JDB ... 
- 循序渐进PYTHON3(十三) --3-- DJANGO之FORM表单(为自动生成的HTML标签添加样式)
			views.py from django.shortcuts import render,HttpResponse from django import forms import json impor ... 
- CodeForces888E Maximum Subsequence(折半枚举+two-pointers)
			题意 给定一个包含\(n\)个数的序列\(a\),在其中任选若干个数,使得他们的和对\(m\)取模后最大.(\(n\leq 35\)) 题解 显然,\(2^n\)的暴枚是不现实的...,于是我们想到了 ... 
- Flask实战第56天:板块管理
			cms布局 编辑 cms_boards.html {% block main_content %} <div class="top-box"> <button c ... 
- 杭电oj 1002
			#include <iostream> #include <algorithm> using namespace std; int nCases; ], n[]; ], b[] ... 
