struts1工作原理

            最近刚刚结束了SSH的学习,其实我觉得那不叫结束,是java学习的一个真正的入门,其中包含很多非常精华的思想,让我想到一句话:“为人民服务”,不管是用户,还是开发人员,特点是都是人,老师说过:你设计的软件,xx都会用了,那你就是精英,其实更近一步说,如果一个框架能够让一般的开发人员很容易上手,那这个框架也是一个非常优秀的框架,在学习SSH的这段时间,我学习的每一步都能够体会到当初设计这个框架的人的智慧,真的很棒,首先从struts1说起。

          虽然strut2被我们熟知,并且常用,但是没有strut1的起步,也很难有strut2的进步,下面我们首先用一张图描述一下struts1的工作原理: 

                 

      1.初始化(struts-config.xml-->ActionServlet):struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。(面向对象思想)

      2.发送请求(Web客户端-->ActionServlet):用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器。

      3.form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。

      4.派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。

      5.处理业务:Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。服务器通过ActionForward对象进行转发工作。

      6.返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。

      7.查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。

      8.响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。

      下面举个例子说一下:    

     
在web.xml 文件中配置ActionServlet 应增加如下片段: 

 <servlet>
    <!-- ActionServlet 的名 -->
    <servlet-name>actionSevlet</servlet-name>
    <!-- 配置Servlet 的实现类 -->
    <servlet-class>
        org.apache.struts.action.ActionServlet
    </servlet-class>
    <!-- 指定Struts 的第一个配置文件 -->
    <init-param>
        <!-- 指定配置文件的映射 -->
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-configl.xml</param-value>
    </init-param>
    <!-- 指定Struts 的第二个配置文件 -->
    <init-param>
        <!-- 指定配置文件的映射 -->
        <param-name>config/wawa</param-name>
        <param-value>/WEB-INF/struts-config2.xml</param-value>
    </init-param>
    <!-- 将ActionServlet配置成自启动Servlet -->
    <load-on-startup>2</load-on-startup>
</servlet>

       第二步,配置actionForm

       ActionForm 用于封装用户的请求参数,而请求参数是通过JSP 页面的表单域传递过来的。因此应保证ActionForm 的参数与表单域的名字相同。  
           

<span style="color:#333333;">package com.bjpowernode.structs;

import org.apache.struts.action.ActionForm;
/**
 * 登录ActionForm,负责收集表单数据
 * 表单属性必须和ActionForm中的get和set或的属性一致
 * @author dandan
 *
 */
public class LoginActionForm extends </span><span style="color:#ff6666;">ActionForm </span><span style="color:#333333;">{

	private String username;

	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}
</span>

            第三步,配置Action

            Action 负责管理与之关联的ActionForm. 它不仅需要配置实现类,还需要配置Action 的path 属性,该属性用于被用 户请求。对于只需在本Action
内有效的Forward. 还应在Action 元素内配置局部Forward。             

<span style="color:#333333;">package com.bjpowernode.structs;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 * 登录Action 负责取得表单数据,调用业务逻辑,返回转向信息
 *
 * @author dandan
 *
 */
public class LoginAction extends </span><strong><span style="color:#ff6666;">Action </span></strong><span style="color:#333333;">{

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			</span><span style="color:#ff6666;">HttpServletRequest</span><span style="color:#333333;"> request, </span><span style="color:#ff6666;">HttpServletResponse</span><span style="color:#333333;"> response)
			throws Exception {

		LoginActionForm laf = (LoginActionForm) form;
		String username = laf.getUsername();
		String password = laf.getPassword();

		UserManager userManager = new UserManager();
		try {

			userManager.login(username, password);
			request.getSession().setAttribute("username", username);
			return mapping.findForward("success");

		} catch (UserNotFoundException e) {
			e.printStackTrace();
			request.setAttribute("msg", "用户不能找到,用户名称=【"+username+"】");
		} catch (PasswordErrorException e) {
			e.printStackTrace();
			request.setAttribute("msg", "密码错误");
		}
		return mapping.findForward("error");
	}

}
</span>

           action的配置代码:

<action-mappings>
		<action path="/login" type="com.bjpowernode.structs.LoginAction"
			name="loginForm" scope="request">
			<forward name="success" path="/login_success.jsp" />
			<forward name="error" path="/login_error.jsp"></forward>
		</action>

		<action path="/must_login" type="com.bjpowernode.structs.MustLoginAction">
			<forward name="success" path="/must_login.jsp" />
		</action>
		<action path="/dyna_actionforward"
			type="com.bjpowernode.structs.DynaActionForwardTestAction">
			<forward name="page1" path="/page1.jsp" />
			<forward name="page2" path="/page2.jsp"></forward>
		</action>
	</action-mappings>

          这是关于struts1简单的一个总结,希望和大家交流~

             

         

时间: 2024-08-30 09:11:18

struts1工作原理的相关文章

Structs深入研究(一)-----Struts framework的工作原理和组件

Struts framework的工作原理和组件 对于Struts 如何控制.处理客户请求,让我们通过对struts的四个核心组件介绍来具体说明.这几个组件就是:ActionServlet.Action Classes,Action Mapping(此处包括ActionForward),ActionFrom Bean. Struts ActionServlet控制器对象        ActionServlet继承自javax.servlet.http.HttpServlet类,其在Struts

Ajax工作原理

在这篇文章中,我将从10个方面来对AJAX技术进行系统的讲解.  1.ajax技术的背景        不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax的流行.而这也让微软感到无比的尴尬,因为早在97年,微软便已经发明了ajax中的关键技术,并且在99年IE5推出之时,它便开始支持XmlHttpRequest对象,并且微软之前已经开始在它的一些产品中应用ajax,比如说

光纤猫工作原理

  光猫就是"光modem",是指将光以太信号转换成其它协议信号的收发设备,也是起着调制解调的作用.光猫也称为单端口光端机,该设备作为本地网的中继传输设备,适用于基站的光纤终端传输设备以及租用线路设备.而对于多口的光端机一般会直称作"光端机",对单端口光端机一般使用于用户端,工作类似常用的广域网专线(电路)联网用的基带modem,和有称作"光modem"."光猫"."光调制解调器". 光猫的工作原理 光猫的

GMPLS工作原理

目前,电信企业正在寻求将IP和光纤网络进行融合的技术,以便开发出高效率的先进业务.首先需要克服的是,被设计用于支持语音和固定电路多层体系结构的IP业务所带来的高度复杂性,最终的结果是需要得到一个从Layer 3的IP扩展到Layer 1的光传输层次的控制平面. GMPLS(通用多协议标记交换)技术的目标就是迎合这一需求,在一个统一的控制平面之下,从网络的边缘设备到核心设备,并再回到边缘来扩展网络的智能化. 作为建议中的一个IETF标准,GMPLS仍处在开发之中,而且据估计,在一两年之内不太可能会

FTP文件传输协议两种方式的工作原理

FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式). Standard模式 FTP的客户端发送 PORT 命令到FTP server.Passive模式FTP的客户端发送 PASV命令到 FTP Server. 下面介绍一个这两种方式的工作原理: Standard模式 FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个

VMware Server的工作原理

VMware Server提供了一个免费的并且比较容易进入的服务器虚拟化方法,不过部署它的几个方面--尤其是配置,可能很棘手.即使这个产品是免费的,可如果在安装和安全化进程中出了错误,也将会付出很高的代价. 本指南提供了VMware Server在安装.配置(主要注重高安全性)以及如何成功运行于微软Windows 2003服务器等方面的说明. 这一系列文章共分为八部分.在这一部分中,TechTarget中国的特约专家Andrew Kutz主要为大家提供其部署和调配方面的指导以及对其工作原理的描述

JavaScript的计时器的工作原理

最近都在看一些JavaScript原理层面的文章,恰巧看到了jQuery的作者的一篇关于JavaScript计时器原理的解析,于是诚惶诚恐地决定把原文翻译成中文,一来是为了和大家分享,二来是为了加深自己对于JavaScript的理解.原文链接:http://ejohn.org/blog/how-javascript-timers-work/ 原文翻译: 从基础层面来讲,理解JavaScript计时器的工作原理是很重要的.由于JavaScript是单线程的,所以很多时候计时器并不是表现得和我们的直

了解DNS服务器的工作原理及其过程

DNS服务器所提供的服务是完成将主机名和域名转换为IP地址的工作.为什么需要将主机名和域名转换为IP地址的工作呢?这是因为,当网络上的一台客户机访问某一服务器上的资源时,用户在浏览器地址栏中输入的是便于识记的主机名和域名.而网络上的计算机之间实现连接却是通过每台计算机在网络中拥有的惟一的IP地址来完成的,这样就需要在用户容易记忆的地址和计算机能够识别的地址之间有一个解析,DNS服务器便充当了地址解析的重要角色.接下来我就带您走入DNS的世界,详细了解DNS服务器的工作原理及其过程,希望能够给各位

由PHP底层工作原理说起

之前做过.netjava开发也写过几个Php的网站似乎3种主要编程语言都接触了.但是越来越觉得自己对编程的整个流程缺乏一个整体的认识尤其是底层的机制.譬如网络编程编译原理服务器端数据库存储引擎原理等.于是看了一些书比较经典的有apue,unp,tcp/ip,nginx,mysql的innodb存储引擎深入理解jvm.渐渐发现无论用什么语言做开发背后都有linux,shell,c/c++,nginx服务器mysql的身影.也许只有掌握了这些核心的原理知识一个程序员才具有核心竞争力. BAT的后端部