`
yufei
  • 浏览: 94047 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Struts 2 自学之路: 2 Struts2 基本流程

阅读更多
内容简介:了解Struts2 的基本流程

说明: 此文只是我参看资料以及自己试验以后的观点

此文的代码皆来自上篇文章中的项目,不过添加了些注释,毕竟流程还是看个程序怎么运行更直观
(我个人就觉得看程序怎么走,再看那些枯燥的说明让人更容易理解)




首先我们来看struts2 在web.xml配置文件里配置的信息,这是我们使用struts2要做的第一步工作
文件中我们配置了一个过滤器,处理的类是org.apache.struts2.dispatcher.FilterDispatcher,从url-pattern可以看出,此应用程序的所有请求都会经过该过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">	
    <display-name>Struts 2.0 Hello World</display-name>
    <filter>
        <filter-name>struts2</filter-name>        
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>



接下来我们需要一个请求页面和两个分别表示成功和失败的页面
index.jsp,welcome.jsp,error.jsp
index.jsp代码如下,welcome.jsp和error.jsp由于只需要显示成功或失败的文字
这里就不在列出代码了

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>第一个Struts程序</title>
  </head>
  
  <body>
  	<!-- form 表单提交给Login.action去处理 -->
	<form action="Login.action" method="post">
    	<table align="center">
    	<caption><h3>用户登录</h3></caption>
    		<tr>
    			<td>用户名:<input type="text" name="username"/></td>
    		</tr>
    		<tr>
    			<td>密  码:<input type="text" name="password"/></td>
    		</tr>
    		<tr align="center">
    			<td colspan="2"><input type="submit" value="登录"/>
    			<input type="reset" value="重填"/></td>
    		</tr>
    	</table>
    </form>
  </body>
</html>



然后我们需要处理action的类HelloAction
这个类只是个简单java类,没有继承任何类和实现任何接口

package yufei.hello;

public class HelloAction
	{
	private String username;
	private String password;
	public String getPassword()
		{
		return password;
		}
	public void setPassword(String password)
		{
		this.password = password;
		}
	public String getUsername()
		{
		return username;
		}
	public void setUsername(String username)
		{
		this.username = username;
		}
	public String execute()
		{
		String strReturn = "error";
		if (username.equals("yufei"))
			strReturn = "success";
		return strReturn;
		}
	}



最后我们配置struts.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<!--
		package 先不管,以后会讲,目前知道下面那些就够了
		name 属性任意填,只要不出现重复的就行,该属性必需有
		extends 属性 目前 记住一定要是"struts-default"这个
                               该属性必需有

	 -->
	<package name="yufei.hello" extends="struts-default">
		<!-- 
		 action 标签里 name属性代表我们要处理的.action的前面部分
		 		例如,这里的Login代表Login.action,可以打开项目里的index.jsp
		 		看表单的action属性,注意name的值是不带.action,只是前面部分
		 action 标签里 class属性代表我们需要哪个类来处理
		 result 标签的 name属性代表action类的执行方法的返回值,
		 		(即外层action标签里class属性那个类的),struts2中
		 		action类的默认执行方法是public String execute()
		        action类的执行方法一定要是public String 和 无参数
		        标签对中的属性代表,当execute方法返回的字符串和name里的
		        相同时就跳转到相应那页去,斜杠(/)是必需的
		 -->
		<action name="Login" class="yufei.hello.HelloAction">
			<result name="error">/error.jsp</result>
			<result name="success">/welcome.jsp</result>
		</action>
	</package>
</struts>



流程说明:
当我们运行程序在index.jsp页面中提交表单后,(实际上就是让页面跳转带着表单参数到相应的URL路径)表单里的action是Login.action,当我们提交表单实际就是将URL跳转到
http://127.0.0.1:8888/Struts2Study/Login.action这个路径上去
(http://127.0.0.1:8888/Struts2Study 这个为你的项目根路径)
由于我们在web.xml里面配置了过滤器,该过滤器在本应用程序的任何路径下都会执行,所以触发了FilterDispatcher来处理,然后该过滤器将以action结尾的请求转入Struts2框架处理。(struts2 配置文件中的默认后缀标记是action,当然你要喜欢也可以改为其它的,以后讲配置文件会提到)这里实际是截获了Login.action的请求,然后将.action的前面部分和struts.xml文件里的action的name对比,当找到相同的后,调用class属性里的类来处理,这里实际就是调用的yufei.hello.HelloAction(说明,当struts.xml里没有明确配置处理方法时,默认会去找execute方法来处理,而且处理的方法必需是公共(public) 返回字符串类型(String) 没有参数,关于方法配置在以后会提),最后根据action类的执行方法的返回值(String)来和struts.xml里面的该action配置下的result标签的name属性进行比对,然后进行相应的跳转
-
-
-
-
-
最后我将网上的关于Struts2 基本流程 比较理论化的说明放下面


--FilterDispatcher 是 Struts 2 框架的核心控制器,该控制器作为一个 Filter 运行在 Web应用中,它负责拦截所有的用户请求(拦截所有还是部分是由url-pattern来决定的),当用户请求到达时,该 Filter 会过滤用户请求。如果用户请求以 action 结尾,该请求将被转入 Struts 2 框架处理。
--Struts 2 框架获得了*.action 请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于 login.action 请求,Struts 2调用名为 login 的 Action来处理该请求。
--Struts 2 应用中的 Action都被定义在 struts.xml 文件中,在该文件中定义 Action 时,定义了该 Action 的name 属性和 class 属性,其中 name 属性决定了该 Action 处理哪个用户请求,而 class属性决定了该 Action 的实现类。
--Struts 2 用于处理用户请求的 Action实例,并不是用户实现的业务控制器,而是 Action代理——因为用户实现的业务控制器并没有和 Servlet API耦合,显然无法处理用户请求。而 Struts 2 框架提供了系列拦截器,该系列拦截器负责将 HttpServletRequest 请求中的请求参数解析出来,传入到 Action 中,并回调 Action 的 execute方法来处理用户请求。
--显然,上面的处理过程是典型的 AOP(面向切面编程)处理方式。图 3.19 显示了这
种处理模型。

--从图3.19中可以看出,用户实现的Action类仅仅是Struts 2的Action代理的代理目标。用户实现的业务控制器(Action)则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象里,而用户的 Action 类无需访问 HttpServletRequest 对象。拦截器负责将 HttpServletRequest里的请求数据解析出来,并传给业务逻辑组件 Action 实例

-
-
-
最后发点牢骚,这篇文章写到1/3的时候保存到草稿箱,写完以后我保存到草稿箱,打开来看居然是1/3时候的样子...害我又重新写,吸取教训,下次写好了粘贴上来
分享到:
评论
1 楼 lwwy20041372 2008-01-26  
流程是很重要的
就是讲的太简单了

相关推荐

    Struts 2 自学之路: 3.1 struts.xml 核心配置实例说明

    这篇博客"Struts 2 自学之路: 3.1 struts.xml 核心配置实例说明"将引导我们深入了解如何使用这个至关重要的文件。 首先,`struts.xml`位于项目的`src/main/resources`或`WEB-INF/classes`目录下,它是Spring框架与...

    Struts 2 自学之路: 1 准备工作及helloworld

    本篇文章将带你踏上Struts 2的自学之旅,首先从准备工作开始,然后通过一个简单的“Hello, World”程序来熟悉基本操作。 准备工作: 1. **环境配置**:首先确保你的计算机上已经安装了Java Development Kit (JDK)...

    完美版(适合自学)struts2

    Struts2是一个强大的Java web应用程序框架,它是Struts1的后续产品,融合了WebWork的核心技术,提供了全新的架构。在Struts2中,基于拦截器的机制被...对于自学Struts2的人来说,理解这些核心概念和配置方式至关重要。

    struts2自学文档

    ### Struts2自学文档知识点详解 #### 一、Struts2简介 Struts2是一个用于构建企业级Java Web应用程序的开源框架。它基于MVC(Model-View-Controller)架构模式,提供了一种灵活的方式来组织代码,使得业务逻辑、...

    struts2 自学材料

    综上所述,"struts2 自学材料"这个压缩包包含的练习和资源,覆盖了Struts2的主要特性和实践应用,是学习和掌握Struts2框架的宝贵资料。通过深入研究和实践这些例子,开发者可以更好地理解如何在实际项目中运用Struts...

    Struts2完全自学手册(16-19)

    本书全面讲述Struts 2开发框架的知识,包括Struts 2中配置文件的详细讲解、国际化与异常处理、数据类型的转换、数据的输入校验、Struts 2强大的标签库、Struts 2中文件的上传与下载、Struts 2对Ajax的支持、Struts 2...

    struts2视频自学总结

    ### Struts2框架深入解析与自学总结 #### Struts2框架简介 Struts2是Apache组织维护的一个开源框架,它是Struts1的升级版本,基于MVC(Model-View-Controller)架构模式,用于简化Java Web应用的开发过程。Struts2...

    Struts 2 自学入门教程

    这个"Struts 2自学入门教程"涵盖了Struts 2的核心概念和技术,是初学者了解和掌握Struts 2框架的绝佳资源。 首先,我们要理解Struts 2的标志(Tag)。这些标签是用于构建用户界面的JSP标签库,它们简化了在页面上...

    struts2自学笔记

    Struts2自学笔记 Struts2是Java Web开发中的一款广泛应用的MVC框架,它基于Model-View-Controller设计模式,旨在简化企业级应用的开发流程。本自学笔记将深入探讨Struts2的核心概念、主要功能及其实现原理。 1. **...

    struts2实战案例(项目+建库语句)

    通过实践这个案例,你可以逐步熟悉Struts2的开发流程,提升对MVC架构的理解,为构建更复杂的Java web应用打下坚实基础。记得按照说明文档一步步操作,遇到问题时查阅相关资料或社区求助,相信你将从中受益匪浅。

    Java Web整合开发完全自学手册:Struts+Hibernate+Spring+Eclipse源码

    以国内使用最广泛的Struts为例,其新版本Struts2与前一版Struts1.x已经有了天壤之别。Hibernate也从2.0升级为3.X,近期Spring也最新推出了2.5版。读者如果再参考以前的版本书籍学习,无异于南辕北辙,而《JavaWeb...

    Struts2自学笔记——Struts2的文件上传

    这篇自学笔记将深入探讨Struts2的文件上传机制。 1. **文件上传原理** 文件上传是基于HTTP协议的POST请求实现的。在HTML表单中,通过`&lt;input type="file" /&gt;`元素让用户选择本地文件。当用户提交表单时,浏览器会...

    《Struts2_自学教程》

    - **Struts2**: 相比之下,Struts2采用了一种更为灵活的设计理念。在Struts2框架中,Action类可以实现一个或多个接口,如`Action`接口,这使得Action类能够更加灵活地选择所需的功能和服务。此外,Struts2还提供了一...

    Struts2超详细学习笔记分享(献给自学新人)

    首先,让我们了解Struts2的基本特性。Struts2是一个基于Servlet的框架,它通过将JSP作为视图(View),Servlet作为控制器(Controller),并将业务逻辑和数据封装在模型(Model,通常为VO或JavaBean)中,实现MVC的...

Global site tag (gtag.js) - Google Analytics