struts 1.x 原理

Struts

当我接触到这个框架的时候,我就在想为什么是struts,而不是什么CraigFramework。结构、支撑,这样来理解也不难怪了。

为什么需要struts?

在struts in action这本书里,struts的开发者也讲到。在有了MVC后依然需要这样一个框架来支撑开发的工作,因为有了jsp和model和ejb来处理这一套流程还需要什么?

原理

首先需要在tomcat服务器启动,而tomcat启动后。部署在tomcat中的项目启动,相应在根据项目下的web.xml文件来实例化struts的servlet;并载入struts-config.xml文件。而后web客户端向tomcat发出request后,实例化request以及response对象。如果是post提交就调用dopost方法,请求ActionServlet并调用doPost方法。

部分图解:

1.截取url

在doPost方法中调用的process方法,通过一路艰辛传过来的request对象携带的url。通过RequestProcessor类中的processpath方法来截取url;

2.获取ActionMapping

截取得到的url再来通过RequestProcessor的processmapping来调用ModuleConfigImpl类来读取servlet-config.xml中的节点并将对应的数据设置到ActionMapping对象之中。

3.实例化ActionForm

在struts-config.xml中有对应ActionForm的name。通过这个name,首先在session或request中查找,如果有直接返回;没有通过name拿到对应value来通过反射得到对应类的实例。

4.设置表单数据

将表单数据设置到ActionForm

5.创建并执行Action

调用RequestProcessor的processActionCreate来创建Action,创建过程类似于ActionForm。执行execute方法,调用业务逻辑,返回response对象,转发到jsp页面,渲染页面。

actionForm:一种和actionconfig关联的javabean,在对应的action被调用之前都会自动初始化参数,将经过验证的数据填充自己类对应的属性。

优点:

1.struts相当于一种隔离,只有经过actionform的数据才能被后面的action调用。多少进行了一些隔离和过滤。

2.在http请求和action之间建立桥梁,也算是一种针对业务的分层和解耦吧。针对表单数据的单独处理。

缺点:

1.当只有一个或几个actionform时,这种解决方案当然解决并应对问题。而后面出现几百个actionform时这种针对每个请求来整合数据的方式就影响了效率,不单单在编写时候容易出问题,也不利于后面的维护。所以后面的struts1.x都针对这个问题出现了dynaactionform的解决方案,将相关的属性配置在xml文件中,这样更改和编写只用来针对config来修改即可。

后序

struts在jsp和model之间相当于桥梁的作用。一个功能强劲、性能更加优越的控制和转发数据中心,其实还是一个以MVC为核心的控制器。所以有他的一些既定的标准,如:需要指定的超链接格式(*.do、*.action)才能请求到ActionServlet中。struts会自动创建、组装、校验和最后处理
Action对象所对应的ActionForm。 这样Action 就可以直接从 ActionForm bean 取得它需要的数据以及渲染到最后的jsp中。

时间: 2024-12-22 19:45:28

struts 1.x 原理的相关文章

struts过滤器的原理

struts就是充当拦截器(过滤器)的作用.在web.xml配置过滤器, 1 package cn.itcast.framework.core; 2 3 import java.io.IOException; 4 import java.lang.reflect.Method; 5 import java.util.HashMap; 6 import java.util.List; 7 import java.util.Map; 8 9 import javax.servlet.Filter;

struts的工作原理

struts的工作原理是通过struts的配置文件,将你对应的请求进行转接,也就是说: 原来是:A——>B现在是:A——>C——>B 这样的好处是,当你需要改变程序的对应的代码时候,你可以通过修改C来实现,而不需要一个个去改动A了,这样你理解了吧? 当然,还有很多,不过你可以理解为一个代理的功能,他帮助你去处理负责的关系,而你只需要对配置修改,从而起到嫁接的功能.

Struts1——从BeanUtils看struts的实现原理

在Struts中很典型的特点就是使用了ActionForm来搜集表单数据,但是搜集到的表单数据全部都是String类型的,如果我们直接拿来使用我们会面临一个很麻烦的问题就是频繁的类型装换.Struts中使用了BeanUtils来使我们从繁重的体力劳动中解脱出来. BeanUtils的工作原理: 我们通过一个简单的例子来了解一下他最基本的使用,首先建立一个实体类Student package com.tgb.struts; import java.sql.Date; public class St

Struts 原理

今天开始接触公司的框架,叫YNA,三个字母应该是雅马哈的缩写,这个框架听公司前辈说功能很强大,但实际上我看不懂.哈哈...... 其中整合了SSH框架,接下来我说下Struts的一些原理 其实这张图就能很清晰地表明Struts的工作原理了,但前提是要有WEB系统的实践经验,只要接触过,再来看这个说明图,我相信都能理解. 下面是一个实例说明

Struts2原理及简单实例

参考连接: http://blog.csdn.net/laner0515/article/details/27692673/ http://www.cnblogs.com/sobne/articles/5443114.html 一.Struts2原理 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就不在提了. 技术优势 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The 

struts2的核心和工作原理

在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就不在提了. 技术优势 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The Java Servlet API揭示了Java Servlet只是Java API的一个很小子集,这样我们可以在业务逻辑部分使用功能强大的Java语言

Struts2(1)——struts2的核心和工作原理

在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就不在提了. 技术优势 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The JavaServlet API揭示了Java Servlet只是Java API的一个很小子集,这样我们可以在业务逻辑部分使用功能强大的Java语言进

Struts之Token机制

Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配.在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换.这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生. 具体使用方法如下: 1.先在一个Action中,调用sav

Struts2 的核心、执行原理

转自: http://www.cnblogs.com/xiadongqing/p/5240615.html 在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就不在提了. 技术优势 Struts2有两方面的技术优势,一是所有的Struts2应用程序都是基于client/server HTTP交换协议,The Java Servlet API揭示了Ja