Struts2学习一----------Struts2的工作原理及HelloWorld简单实现

? 版权声明:本文为博主原创文章,转载请注明出处

Struts2工作原理

一个请求在Struts2框架中的处理步骤:

1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2.这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的继承很有帮助,例如SiteMesh Plugin)

3.接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action

4.如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5.ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类,这里,我们一般是从struts.xml配置中读取

6.ActionProxy创建一个ActionInvocation的实例

7.ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用

8.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker模板。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中涉及到ActionMapper。

在上述过程中所有的对象(Action,Results,Interceptors等)都是通过ObjectFactory来创建的。

HelloWorld实例

1.项目结构

2.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  	<modelVersion>4.0.0</modelVersion>

	<groupId>org.struts</groupId>
	<artifactId>Struts2-HelloWorld</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>Struts2-HelloWorld Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<!-- 统一Struts2开发环境 -->
		<struts2.version>2.5.10</struts2.version>
	</properties>

	<dependencies>
		<!-- junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- struts2 -->
		<dependency>
		    <groupId>org.apache.struts</groupId>
		    <artifactId>struts2-core</artifactId>
		    <version>${struts2.version}</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>Struts2-HelloWorld</finalName>
	</build>

</project>

3.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_3_0.xsd"
  		version="3.0" metadata-complete="true">

  	<!-- 过滤所有请求交给Struts2处理 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

4.HelloWorldAction.java

package org.struts.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	/**
	 * Struts2默认执行方法
	 */
	@Override
	public String execute() throws Exception {

		System.out.println("执行了Action方法");
		return SUCCESS;

	}

}

5.struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>

	<package name="default" namespace="/" extends="struts-default">

		<action name="helloWorld" class="org.struts.action.HelloWorldAction">
			<result>/success.jsp</result>
		</action>

	</package>

</struts>

6.success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Success.jsp</title>
</head>
<body>
	This is success.jsp
</body>
</html>

7.效果预览

时间: 2024-10-07 16:24:57

Struts2学习一----------Struts2的工作原理及HelloWorld简单实现的相关文章

struts2学习笔记2 -struts2的开发步骤和工作原理

struts2的开发步骤: 1.先定义一个能发送请求的页面,可以是链接,也可以是表单(form) 2.开发action类,struts2对action并没有过多的要求,只要求: a 推荐实现action接口,或继承actionsupport类 b 为每个请求参数都提供feild,并为之提供相应的setter和getter方法 c 该action类应该有无参数构造器 3.配置action类 所有action都需要放在package里配置. <action>元素有如下属性: name 指定该act

深入研究Struts2(一)---Struts2是什么?它的工作原理是什么?

本文绝对原创, 欢迎转载, 但是转载请记得注明文章出处:http://blog.csdn.net/izard999/article/details/39891281 近4年都在从事Android方 面的工作, 最近换到一家单位做技术主管, 拿到外包的代码发现是Struts2做的, 5年之前对Struts2还是有一定见解的, 但是由于多年不用, 导致还是有些小淡忘,  翻出以前记录的一些笔记和心得, 再加上从官方文档又看到一些版本更新带来的一些新东西, 于是决定再次深入研究一次. 也希望此系列文章

[struts2学习笔记] 第三节 创建struts 2 HelloWorld所需的六个步骤

本文地址:http://blog.csdn.net/sushengmiyan/article/details/40349201 官方文档:http://struts.apache.org/release/2.3.x/docs/hello-world-using-struts-2.html 本文作者:sushengmiyan ---------------------------------------------------------------------------------------

Android学习笔记View的工作原理

自定义View,也可以称为自定义控件,通过自定义View可以使得控件实现各种定制的效果. 实现自定义View,需要掌握View的底层工作原理,比如View的测量过程.布局流程以及绘制流程,除此之外,还需要掌握View常见的回调方法.而对于那些具有滑动效果的自定义View,我们还需要处理View的滑动,如果遇到滑动冲突则需要处理相应的滑动冲突. 下面是View的常见回调方法: 构造方法 onAttach onVisibilityChanged onDetach onFinishInflate on

Ajax学习--理解 Ajax 及其工作原理

Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. 下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段. • JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信. • DHTML 或 Dynamic HTML,用于动态更新表单.我们将使用 div.span 和其他动态 HTML 元素来标记 HTML. • 文档对象模型 DOM 用于(

Linux学习之路-Shell 工作原理

Shell 工作原理 什么是shell shell是命令语言.命令解释程序及程序设计语言的统称,是用户和Linux内核之间的接口程序,为用户提供使用操作系统的接口. shell的特性 shell的一个重要特性是它自身是一个解释型的程序设计语言,程序运行时由解释器全程参与运行过程,每次读取一行,运行一行.shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数.变量.数组和程序控制结构.shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中. sh

【知了堂学习笔记】ajax工作原理

ajax工作原理 什么是ajax? ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思.从全称中就可以看出AJAX = 异步 JavaScript 和 XML.  AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面. 使用 AJ

走进Struts2(一) — Struts2的执行流程及其工作原理

 Struts2是一套很优秀的Web应用框架,实现优雅.功能强大.使用简洁.能够说是Struts2是一款很成熟的MVC架构. 在我们学习Struts2时,最好是先学习它的执行流程.核心概念.从中得到启示.提升自己,而不不过学习怎么怎么使用它. 在网上看到这样一句话: 你千万不要成为一个仅仅会熟练使用框架的程序猿.那样.你会疲于奔命,你或许永远仅仅会使用 Hadoop ,而写不出一个 Hadoop ,你仅仅是一个 Hadoop程序猿,而不是一个分布式project师. 你或许永远仅仅会使用 Str

走进Struts2(一) — Struts2的运行流程及其工作原理

 Struts2是一套非常优秀的Web应用框架,实现优雅.功能强大.使用简洁.可以说是Struts2是一款非常成熟的MVC架构. 在我们学习Struts2时,最好是先学习它的运行流程.核心概念,从中得到启发,提升自己,而不仅仅是学习怎么怎么使用它. 在网上看到这样一句话: 你千万不要成为一个只会熟练使用框架的程序员,那样,你会疲于奔命,你也许永远只会使用 Hadoop ,而写不出一个 Hadoop ,你只是一个 Hadoop程序员,而不是一个分布式工程师. 你也许永远只会使用 Struts,而忘