一、基本原理
1. 问题
如果是前端的静态HTML,处理网页设计的美术人员可以独立设计
如果是后端的类,程序设计人员可以独立设计而结合HTML与Java代码的JSP,处理网页设计的美术人员与程序设计人员,必须被彼此加入至视图组件中的逻辑互相干扰,开发一个JSP页面,需要双方不断交流才能够完成,开发人员的学习负担重,他们必须一人了解多个角色的工作以及相关技术。
2. 解决
Struts它试图在不同的角度上提供网页设计人员、应用程序设计人员、架构设计人员解决方案,让不同技术的人员可以彼此合作又不互相干扰。从架构设计人员的角度来看,他只需要做出一些配置与定义,定义后端bean与前端页面的关系。从网页设计人员的角度来看,Struts提供了一套像是新版本的HTML标签,但它不是静态的,而是动态的,可以与后端的动态程序结合,但网页设计人员不需要理会后端的动态部份。从应用程序设计人员的角度来看,他只需要按架构师设计人员的定义,完成后端bean的实现即可。
3. 总的来说,struct就是为了解决前台设计人员与应用程序设计人员的各自工作的解耦,尽量让另一方的工作不影响到另一方工作。
二、使用
1. 添加jar包
注:struct-spring-plugin.jar这个包是负责struct与spring进行交互,这个包是spring提供的,spring提供的这个jar包是有严谨的版本要求,spring决定是哪一个版本的struct
2,配置web.xml: 配置struts引擎
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
<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>
</web-app>
3,添加struts.xml到src根目录
<?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 name="demo_struts2" extends="struts-default">
<action name="UserLogin" class="demo.mystruct.UserAction">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
所定义的action都是在package标签里面,例如:
在struts.xml中定义一个action
<action name="UserLogin" class="demo.mystruct.UserAction">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="input">/index.jsp</result>
</action>
4.按struts.xml中的action定义撰写一个简单的Action类,demo.mystruct.UserAction定义两个用户输入的属性(也就是页面会传过来的参数,注意页面的name要和该类对应的属性要一致),提供getter/setter,定义处理用户请求的execute方法。运行的流程是:页面使用到action--->通过web.xml的struct引擎进行过滤---->找到struct.xml,查询对应的action所对应的定义处理----->找到对应的类,执行execute方法,根据execute方法返回的内容进行跳转那个页面(跳转页面是由action定义的)。
处理类execute方法的写法
public String execute() throws Exception {
// 当用户请求参数的username等于admin,密码请求参数为12345时,返回success字符串
// 否则返回error字符串
f ("11".equals(getName()) && "22".equals(getPass())) {
ActionContext.getContext().getSession().put("userinfo", getName());
System.out.println(this.SUCCESS);
return this.SUCCESS;
} else if(getName() == null || getName().trim().equals("")||getPass() == null || getPass().trim().equals("")){
return this.INPUT;
} else
return this.ERROR;
}
5. 总结:
Struts2的工作机制:
一个请求在Struts2框架中的处理大概分为以下几个步骤:
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;
5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。
- 大小: 26.6 KB
- 大小: 38.1 KB
- 大小: 23.4 KB
分享到:
相关推荐
在MATLAB编程环境中,`struct2double`是一个非常实用的函数,主要用于将结构体(struct)数据转换成双精度浮点数(double)数组。这个功能在处理大量结构体数据时尤其有用,例如当你需要对结构体数组进行数值计算...
`struct2ini`函数的工作原理大致如下: 1. **解析输入的结构体**:函数首先接收一个结构体变量,这个结构体会被分解成其包含的所有字段和子结构。 2. **构建INI文件结构**:对于每一个字段,`struct2ini`会在INI...
下面我们将详细探讨`xls2struct`函数的工作原理以及如何在MATLAB环境中使用它。 首先,我们要理解结构数组在MATLAB中的概念。结构数组是一种特殊的数据类型,它可以包含不同类型的字段,每个字段都可以存储不同类型...
`ini2struct` 函数的工作原理是读取`.ini`文件的每个节(section)和键值对(key-value pairs),然后将它们组织成MATLAB中的结构体。结构体的字段名对应于`.ini`文件中的节名,而字段值则为包含键值对的细胞数组。...
在本篇中,我们将深入探讨`struct2vars`函数的用法、工作原理以及相关的编程实践。 ### 1. `struct2vars`函数简介 `struct2vars`是MATLAB自定义函数,它的主要作用是从结构体中提取字段并将其转换为独立的工作空间...
首先,我们来了解`str2struct`的基本语法。`str2struct`函数通常接受一个字符串输入,该字符串由逗号分隔的键值对组成,然后将其转换为结构体数组。例如: ```matlab s = str2struct('key1=value1,key2=value2,key3...
在MATLAB编程环境中,`struct2string`是一个非常实用的函数,它允许用户将结构体(struct)转换成创建该结构体的MATLAB代码字符串。这个功能在代码的序列化、存储或者理解复杂的结构体定义时特别有用。下面我们将...
《深入理解Armink-struct2json工具:从结构体到JSON的转换之道》 在现代软件开发中,数据交换和序列化是至关重要的环节。JSON(JavaScript Object Notation)因其简洁明了的格式,被广泛应用于跨平台的数据交互。 ...
在给定的内容中还提到了以太网头部 (`struct eth_hdr`),这同样是网络通信中不可或缺的一部分,主要包含以下字段: 1. **`dstmac`: 目标 MAC 地址** - 接收方的物理地址。 2. **`srcmac`: 源 MAC 地址** - 发送...
"模拟Struct2"项目是一个旨在帮助开发者深入了解Structs2框架工作原理的学习资源。Structs2是一个流行的MVC(Model-View-Controller)框架,用于构建Java Web应用程序。它以其轻量级、高效和灵活的特性受到开发者的...
在这个“Struct简易留言板”的项目中,我们利用Struct来构建一个基础的留言管理系统,实现了增、删、改、查四大基本功能。下面我们将详细探讨Struct的原理及其在留言板中的应用。 首先,理解Struct的概念。Struct是...
`structfun2` 的基本语法是: ```matlab result = structfun2(fun, S1, S2) ``` 其中: - `fun`:这是用户定义的二元函数,例如 `@plus`、`@times` 等,用于执行字段间的运算。 - `S1` 和 `S2`:这两个是结构数组...
一、MapStruct的工作原理 MapStruct基于注解驱动的代码生成机制,它通过读取源对象和目标对象上的注解,自动生成映射器接口的实现类。这种自动化的映射方式避免了手动编写繁琐的映射代码,同时也减少了出错的可能性...
在 C/C++ 语言中,typedef struct 是一个非常重要的概念,它可以帮助我们定义新的数据类型,简化代码,并提高代码的可读性。在本文中,我们将详细解释 typedef struct 的用法和原理,并讨论它与 struct 的区别。 1....
在编程领域,结构(Struct)和枚举(Enum)是两种基本的数据类型,它们在C#、C++等面向对象语言中广泛使用。本实践项目是基于VS2005进行的,它提供了关于如何使用Struct和Enums的实例,帮助学习者加深理解。 **结构...
首先,我们需要了解上传和下载的基本原理。上传通常指的是将本地计算机上的文件或数据发送到远程服务器的过程,而下载则是相反的过程,即从服务器获取并保存到本地设备上。在实现这些功能时,我们通常会用到HTTP或...
MapStruct 是一个强大的Java库,专门用于简化对象到对象映射的过程。它的核心理念是通过...通过阅读MapStruct的参考指南,开发者可以深入理解其工作原理,掌握各种配置和高级功能,从而更好地在项目中应用这一工具。
下面将详细讨论MapStruct的基本概念、其工作原理以及可能包含在压缩包中的内容。 MapStruct是一个代码生成库,它的主要目标是通过自动生成转换代码来减少样板代码。在Java中,当我们在不同对象之间进行数据转换时,...
总的来说,Struts框架为Java Web开发提供了一种结构化的解决方案,虽然现在有Spring Boot等更现代的框架,但学习Struts可以帮助理解MVC模式和Web开发的基本原理。通过不断学习和实践,开发者可以掌握这一经典框架,...