Struts2学习笔记
一、struts2的工作原理
 
 
上图为struts整体结构。
1.客户端初始化一个指向servlet的请求;
2.请求通过一系列过滤器(其中的ActionContextCleanUp为可选过滤器,对struts与其他框架集成有帮助),到达StrutsPrepareAndExecuteFilter过滤器;
3.StrutsPrepareAndExecuteFilter询问ActionMapper是否调用某个action;
4.AcitonMapper决定调用某个action,Filter将请求的处理交给ActionProxy;
5.ActionProxy通过Configuration Manager询问框架的配置文件找到需要的Action类;
6.ActionProxy创建一个ActionInvocation实例;
7.ActionInvocation实例使用命名模式来调用,在调用Action的前后,涉及到相关拦截器(Intercepter)的调用;
8.一旦Action调用完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果,返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
struts与mvc模型
控制:XML文件Struts-config.xml,与之相关联的是Controller,它可以称作为Struts神经中枢。
视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。表现逻辑和程序逻辑。
模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。
流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。
核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。
二、struts2的实现流程
1.包含jar包到项目lib目录
2.配置web项目的web.xml文件,添加struts2滤器:
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepaerAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
3.创建action类,继承ActionSupport类:
public class HelloWorldAction extends ActionSupport{
//默认执行execute()方法
public String execute(){}
4.创建struts2的核心配置文件struts.xml并配置action:
<struts>
<include file="struts-users.xml"></include> //通过include标签实现多个配置文件的组件式包含。
<package name="default" namespace="/" extends="struts-default"> //配置文件中可有多个package,但名称必须唯一。
<intercepters> //定义拦截器。。。
<intercepter name="timer" class="com.kay.Timer"></intercepter>
</intercpters>
<global-results> //全局结果集
<result name="input">/error.jsp</result>
</global-results>
<action name="helloworld" class="com.action.HelloWorldAction"> //每个包可以定义多个action,name为其访问路径,有命名空间需添加命名空间前缀
<result>/result.jsp</result> //结果集,无name与type为默认结果
</action>
<param name="url">http://www.sina.com</param> //参数
</package>
<constant name="struts.i18n.reload" value="true"></constant> //常量值,参考struts.propertise
</struts>
补充:调用动态方法:
第一种-同一action下的不同方法可通过配置同一package下的不同action标签实现,指向同一class,通过method属性区别(name不能相同)。
第二种-通过通配符实现:
<action name="helloworld_*" name="{1}" class....>
<result name = "add">/{1}.jsp</result> //通过...helloworld_add.action实现
或:<action name="*_*" name="{2}" class="com.action.{1}Action">
<resutl name="add">/{2}.jsp</result> //通过HelloWorld_add.action实现
5.接收参数
-使用Action的属性接收参数:
直接在继承ActionSupport的Action中添加参数同名字段,并添加getter和setter,可通过字段直接调用参数;简单,但参数数量多时不宜使用;
-使用DomainModel接收:
创建对象类封装参数,通过action中添加对象字段实现调用,参数传递页面须将参数名称改为对象.参数(user.password)以传递到指定对象。
-使用ModelDriven接收:
为Action添加ModelDriven接口,同时将封装参数的对象类,并在Action类中添加getModel方法(返回对象user);调用时须先对对象类进行实例化 (DomainModel不需要实例化),同时参数传递页面的参数名称不需添加对象前缀。
当参数为复杂对象时,第三种方法可直接通过数组的下标,对象的“."字段调用进行传递。。。
Struts2学习笔记的更多相关文章
- Struts2学习笔记⑧
		
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
 - Struts2学习笔记①
		
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
 - Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
		
Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...
 - Struts2 学习笔记(概述)
		
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
 - struts2学习笔记 ⑤
		
拦截器初探 昨天临睡觉之前看了看拦截器,也在昨天的学习笔记里面胡诌诌了几句,今天就来好好的会会拦截器这个东西.实际上拦截器是一种模块实现的机制<起码我是这么体会的>(至于说书里面说体现了A ...
 - [struts2学习笔记] 第二节 使用Maven搞定管理和构造Struts 2 Web应用程序的七个步骤
		
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40303897 官方文档:http://struts.apache.org/releas ...
 - struts2学习笔记之二:基本环境搭建
		
学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6 首先建立一个web项目,并 ...
 - 【Struts2学习笔记-4】包含其他配置文件
		
包含其他配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLI ...
 - 【Struts2学习笔记-3】常量配置
		
Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量 ...
 - struts2学习笔记(4)——数据类型转换
		
回过头来看昨天的那个例子. 在昨天的例子中,只转换了一个Point类,如果想转换多个Point类怎么办呢?在昨天的例子上面做一个小的修改. 首先在input.jsp页面中修改几个输入框. <s: ...
 
随机推荐
- Bootstrap<基础十一>字体图标(Glyphicons)
			
字体图标(Glyphicons),并通过一些实例了解它的使用.Bootstrap 捆绑了 200 多种字体格式的字形. 获取字体图标 我们已经在 环境安装 章节下载了 Bootstrap 3.x 版本 ...
 - BSS段 data段 text段 堆heap 和 栈stack
			
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数 ...
 - http_load
			
wget http://acme.com/software/http_load/http_load-12mar2006.tar.gz
 - Scala编程--函数式对象
			
本章的重点在于定义函数式对象,也就是说,没有任何可变状态的对象的类.作为运行的例子,我们将创造若干把分数作为不可变对象建模的类的变体.在这过程中,我们会展示给你Scala面向对象编程的更多方面:类参数 ...
 - 设计模式之observer and visitor
			
很长时间一直对observer(观察者)与visitor(访问者)有些分不清晰. 今天有时间进行一下梳理: 1.observer模式 这基本就是一个通知模式,当被观察者发生改变时,通知所有监听此变化的 ...
 - linux密码的更改
			
找到UTF-8,在后面空格后输入init=/bin/sh 然后CHRL+X启动 进入到这个界面,输入mount -o remount,rw / 再输入touch / .autorelabel ,然后 ...
 - python的各种编辑器-PyScripter、pycharm 、atom、vscode、Sublime Text等等
			
RT,本文主要列举python的各种编辑器-PyScripter.pycharm .atom.vscode.Sublime Text等等. PyScripter 开源 免费 windows only ...
 - windows 下用eclipse搭建java、python开发环境
			
本人只针对小白!本文只针对小白!本文只针对小白! 最近闲来无事,加上之前虽没有做过eclipse上java.python的开发工作,但一直想尝试一下.于是边查找资料边试验,花了一天时间在自己的机器上用 ...
 - ionic2 图片上传
			
参考URL:https://github.com/dsgriffin/Ionic-2-File-Transfer-Example
 - ionic cordova 热更新(引用自www.zyyapp.com/post/116.html)
			
上篇文章cordova 把html打包成安卓应用 http://www.zyyapp.com/post/115.html cordova 热更新是一个大坑,我看了一天一夜才明白.网上的教程都没说到重点 ...