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简单的一个总结,希望和大家交流~

             

         

相关文章
|
30天前
|
Java 应用服务中间件
struts基本概念(2)
struts基本概念(2)
12 0
|
30天前
|
XML 前端开发 Java
struts基本概念(1)
struts基本概念(1)
11 1
|
4月前
|
XML 前端开发 Java
外文翻译:Struts框架介绍
外文翻译:Struts框架介绍
|
存储 搜索推荐 前端开发
SpringMVC工作原理详解
SpringMVC框架是以请求为驱动,围绕Servlet设计,将请求发给控制器,然后通过模型对象,分派器来展示请求结果视图。其中核心类是DispatcherServlet,它是一个Servlet,顶层实现的是Servlet接口。
216 0
SpringMVC工作原理详解
|
前端开发 Java Spring
SpringMVC工作原理
一:SpringMVC的工作原理图 二:SpringMVC流程 用户发送请求至前端控制器DispatcherServlet。 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
1567 0
|
前端开发 Java Spring
|
XML 前端开发 Java
|
前端开发 Java Spring
|
Java
Struts2框架基础篇
首先,要了解Struts2框架中参数传递的大体流程: 服务器端的Web容器收到用户的请求(URL)——Struts2的核心控制器FilterDispatcher接受用户发起的请求,然后判断这个请求是交给action还是交给web组件来处理;如果请求的action或web组件不存在,就会报错404。在整个处理过程中,需要一个辅助对象: ActionMapper ,它会确定调用哪个Actio
1614 0