Struts2学习(二):第一个Action
前面我们已经把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>
- HelloWorld.java
- package tutorial;
- import com.opensymphony.xwork2.ActionSupport;
- public class HelloWorld extends ActionSupport {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String execute(){
- name="Hello "+name+"!";
- //System.out.println(name);
- return SUCCESS;
- }
- }
这几个文件之间的流程如下图所示:
首先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相关推荐
- Struts2学习---基本配置,action,动态方法调用,action接收参数
首先我们先来直接配置,然后再来讲原理: 第一步:jar包的引入: 我们可以到struts2的官网上下载: http://struts.apache.org/download.cgi#struts ...
- Struts2 学习笔记 — 第一个struts2项目
创建struts2项目 勾选生成web.xml文件 配置项目 打开项目后,首先导入struts2所需的jar包,关于这个,我们可以在下载的struts包中struts-2.3.34/apps中找到st ...
- [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result...
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Struts2学习总结一
Struts2框架的struts.xml详解 Struts总结一 Struts的jar Struts2的简介 Struts2的工作原理 4.Struts2的优点 5.Struts2的第一个案例 5.1 ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- 【Struts2学习笔记(1)】Struts2中Action名称的搜索顺序和多个Action共享一个视图--全局result配置...
一.Action名称的搜索顺序 1.获得请求路径的URI,比如url是:http://server/struts2/path1/path2/path3/test.action 2.首先寻找namesp ...
- Struts2学习总结二
Struts2框架学习 Struts2学习总结二 1.请求封装参数 1.1.动作类作为实体模型 1.1.1.创建UserAction类 1.1.2.创建struts.xml并编写 1.1.3.编写we ...
- Struts2学习笔记(五) Action(下)
调用非execute方法 在前面有关Action的学习中,我们的Action中真正实现业务逻辑的只有execute方法,如果我们每个Action中都只有这么一个方法的话,那么当我们程序中需要的功能很多 ...
- P4学习笔记(二)一个简单P4交换机实现
P4学习笔记(一)初始P4 P4学习笔记(二)一个简单P4交换机实现 文章目录 1. 架构模型 2.预定义模块详细描述 2.1 Arbiter 模块 2.2 Parser runtime 模块 2.3 ...
最新文章
- IO复用之epoll系列
- Flutter框架分析(五)-- 动画
- 基于centos6的mysql5.7.13主从部署(一)
- C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
- 慎用MySQL replace语句
- hdu-1114 Piggy-Bank
- 如何使用Spring设置安全的REST API
- [置顶] export命令-linux
- 使用 custom element 创建自定义元素
- RHEL下SendMail修改发邮箱地址
- nginx配置多个域名_Nginx配置多个网站/项目的简单方式
- 【laravel VS lumen】
- 狸窝音频剪辑软件_干货资源之精选音频剪辑软件工具
- scrapy爬取阳光政务投诉
- 安装老版本flash - 解决”正尝试安装的adobe flash player不是最新版本“的办法
- 第五届“强网”拟态防御国际精英挑战赛——线上预选赛火热开赛!
- 从大数据应用案例中理解大数据的应用价值
- 如何防止失眠——学习笔记
- 不做etl sql 怎么直接取_不管茄子怎么做,直接下锅是大错!多加1步,茄子更入味,不变色...
- 数学分析模型(一):数据的无量纲处理方法及示例(附完整代码)