前面我们已经把Struts2的运行环境搭建起来了,下面我们开始创建我们的第一个Action,还是按照Max的教程来,我新创建了如下几个文件:

sayHello.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!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>Say Hello</title>

</head>

<body>

<h3>Say "Hello" to: </h3>

Address:<input type="text" name="address"/>

<s:form action="HelloWorld">

Name: <s:textfield name="name"/>

<s:submit></s:submit>

</s:form>

</body>

</html>

HelloWorld.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Hello</title>

</head>

<body>

<h3><s:property value="name" /></h3>

</body>

</html>

  1. HelloWorld.java
  2. package tutorial;
  3. import com.opensymphony.xwork2.ActionSupport;
  4. public class HelloWorld extends ActionSupport {
  5. private String name;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public String execute(){
  13. name="Hello "+name+"!";
  14. //System.out.println(name);
  15. return SUCCESS;
  16. }
  17. }

这几个文件之间的流程如下图所示:

首先sayHello.jsp向服务器发送请求,然后根据我们web.xml文件的配置,这个请求被交给了FilterDispatcher这个类来进行处理,FilterDispatcher会根据我们struts.xml文件的中的配置信息来对这个请求分流,让它进入某个指定的action(本例中是HelloWorld.java),在处理完请求之后,再将页面转向HelloWorld.jsp(这个也是在struts.xml中指定的)。为了保证上述流程的顺利执行,现在struts.xml文件的内容修改如下:

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<!--  this is a test

<include file="struts-default.xml"></include> -->

<package name="tutorial" extends="struts-default">

<action name="HelloWorld" class="tutorial.HelloWorld">

<result>HelloWorld.jsp</result>

</action>

</package>

</struts>

注意,这里action的name属性和sayHello.jsp中的action属性的值是一样的,实际上在FilterDispatcher中就是根据这两个值对request进行分流的,具体过程如下:

1.  我们写出这个处理这个请求的url,本例是http://localhost:8888/Struts/HelloWorld,

2.  取出http://localhost:8888/Struts/之后的字符串得到了HelloWorld

3.  在struts.xml文件中查找name属性为HelloWorld的action,把request交给它处理,默认情况下首先执行它里面的execute()方法

4.  请求处理完毕之后进入HelloWorld.jsp页面,配置在<result>标签里面

当然上述流程是最简单的一个过程,还没有涉及到命名空间、请求处理完毕之后要根据执

行结果跳转到不同的页面等一些复杂的问题,后面我会把我的学习心得贴出来。

注:上述request的分流流程是我根据struts1里面的机制推测的,在struts1里面这个过程由ActionServlet负责,它会调用RequestProcessor里面的一个方法对访问路径进行处理,这个在我博客里面的《Struts工作流程》中可以找到,至于这个FilterDispatcher,因为看不到源码只能推测一下了,^_^。

转载于:https://blog.51cto.com/2402766/569962

Struts2学习(二):第一个Action相关推荐

  1. Struts2学习---基本配置,action,动态方法调用,action接收参数

    首先我们先来直接配置,然后再来讲原理:  第一步:jar包的引入:  我们可以到struts2的官网上下载:  http://struts.apache.org/download.cgi#struts ...

  2. Struts2 学习笔记 — 第一个struts2项目

    创建struts2项目 勾选生成web.xml文件 配置项目 打开项目后,首先导入struts2所需的jar包,关于这个,我们可以在下载的struts包中struts-2.3.34/apps中找到st ...

  3. [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result...

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. Struts2学习总结一

    Struts2框架的struts.xml详解 Struts总结一 Struts的jar Struts2的简介 Struts2的工作原理 4.Struts2的优点 5.Struts2的第一个案例 5.1 ...

  5. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  6. 【Struts2学习笔记(1)】Struts2中Action名称的搜索顺序和多个Action共享一个视图--全局result配置...

    一.Action名称的搜索顺序 1.获得请求路径的URI,比如url是:http://server/struts2/path1/path2/path3/test.action 2.首先寻找namesp ...

  7. Struts2学习总结二

    Struts2框架学习 Struts2学习总结二 1.请求封装参数 1.1.动作类作为实体模型 1.1.1.创建UserAction类 1.1.2.创建struts.xml并编写 1.1.3.编写we ...

  8. Struts2学习笔记(五) Action(下)

    调用非execute方法 在前面有关Action的学习中,我们的Action中真正实现业务逻辑的只有execute方法,如果我们每个Action中都只有这么一个方法的话,那么当我们程序中需要的功能很多 ...

  9. P4学习笔记(二)一个简单P4交换机实现

    P4学习笔记(一)初始P4 P4学习笔记(二)一个简单P4交换机实现 文章目录 1. 架构模型 2.预定义模块详细描述 2.1 Arbiter 模块 2.2 Parser runtime 模块 2.3 ...

最新文章

  1. IO复用之epoll系列
  2. Flutter框架分析(五)-- 动画
  3. 基于centos6的mysql5.7.13主从部署(一)
  4. C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
  5. 慎用MySQL replace语句
  6. hdu-1114 Piggy-Bank
  7. 如何使用Spring设置安全的REST API
  8. [置顶] export命令-linux
  9. 使用 custom element 创建自定义元素
  10. RHEL下SendMail修改发邮箱地址
  11. nginx配置多个域名_Nginx配置多个网站/项目的简单方式
  12. 【laravel VS lumen】
  13. 狸窝音频剪辑软件_干货资源之精选音频剪辑软件工具
  14. scrapy爬取阳光政务投诉
  15. 安装老版本flash - 解决”正尝试安装的adobe flash player不是最新版本“的办法
  16. 第五届“强网”拟态防御国际精英挑战赛——线上预选赛火热开赛!
  17. 从大数据应用案例中理解大数据的应用价值
  18. 如何防止失眠——学习笔记
  19. 不做etl sql 怎么直接取_不管茄子怎么做,直接下锅是大错!多加1步,茄子更入味,不变色...
  20. 数学分析模型(一):数据的无量纲处理方法及示例(附完整代码)

热门文章

  1. (转)深入理解最强桌面地图控件GMAP.NET ---离线地图
  2. 伪造http请求救急
  3. IPv4地址何去何从 IPv6不向下兼容的尴尬
  4. Lcs客户端配置和测试
  5. 图片异步加载框架 Android-Universal-Image-Loader
  6. Android获取CPU信息(CPU名字和主频)
  7. linux ls -l 命令 详解
  8. [INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突。
  9. android 获取view在屏幕中的位置
  10. RedHat系列linux源码包软件的安装与卸载