Struts2 基本流程
来源:互联网 发布:都有哪些网络sf游戏 编辑:程序博客网 时间:2024/05/28 20:18
首先我们来看struts2 在web.xml配置文件里配置的信息,这是我们使用struts2要做的第一步工作
文件中我们配置了一个过滤器,处理的类是org.apache.struts2.dispatcher.FilterDispatcher,从url-pattern可以看出,此应用程序的所有请求都会经过该过滤器
接下来我们需要一个请求页面和两个分别表示成功和失败的页面
index.jsp,welcome.jsp,error.jsp
index.jsp代码如下,welcome.jsp和error.jsp由于只需要显示成功或失败的文字
这里就不在列出代码了
然后我们需要处理action的类HelloAction
这个类只是个简单java类,没有继承任何类和实现任何接口
最后我们配置struts.xml
流程说明:
当我们运行程序在index.jsp页面中提交表单后,(实际上就是让页面跳转带着表单参数到相应的URL路径)表单里的action是Login.action,当我们提交表单实际就是将URL跳转到
http://127.0.0.1:8888/Struts2Study/Login.action这个路径上去
(http://127.0.0.1:8888/Struts2Study 这个为你的项目根路径)
--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(面向切面编程)处理方式。下图显示了这种处理模型。
文件中我们配置了一个过滤器,处理的类是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>
这个类只是个简单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;
- }
- }
- <?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属性进行比对,然后进行相应的跳转。
--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(面向切面编程)处理方式。下图显示了这种处理模型。
- Struts2的基本流程
- struts2的基本流程
- Struts2 的基本流程
- Struts2 基本流程
- Struts2的基本流程
- Struts2执行基本流程
- struts2的基本流程 [原理]
- 初涉Struts2---基本控制流程
- Struts2体系结构与基本流程
- Struts2的基本流程分析
- struts2请求基本简要流程
- Struts2的基本开发流程
- struts2执行的基本流程
- Struts2体系结构与基本流程
- servlet,struts2,springmvc基本流程
- struts2 基本流程与配置
- struts2基本流程与配置
- Struts2 struts2基本流程与配置
- WebService大讲堂之Axis2(6):跨服务会话(Session)管理
- C字符串详解
- JDBC学习之路(六)--基于Properties配置文件的工厂生产模式的低耦合实现
- Java基本数据类型
- 0927
- Struts2 基本流程
- Linux 网络栈剖析
- TinyOS-2.0在windows下的开发环境安装与配置
- 1003
- c++ 多线程编程常用的几个函数
- 1004
- WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService
- Linux 内核剖析
- 欧拉定理