Struts2技术
struts2自学完全文档
一.Struts2基础知识1. struts2的特点及配置1.1struts2与struts1的比较1)在软件设计上struts2没有struts1那样跟ServletApi和StrutsApi有着紧密的耦合,Struts2的应用可以不因爱ServletApi和StrutsApi.struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计public class OrderListAction ectends Action//struts依赖于java2)Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能3)Struts2提供了类型转换器,我们可以把特殊的请求参数转换成我们需要的类型,在struts1中,如果我们实现同样的功能,就必须向struts1的底层实现BeanUtil注册类型转换器4)Struts2提供了支持多种表现层技术,如JSp,freeMarker等5)Struts2的输入校验可以对指定方法进行校验,解决了Struts的长久之疼6)提供了全局范围,包范围和Action范围的国际化资源文件管理实现1.2搭建struts2的开发环境1)新建web项目2)导入必要的包3)写配置文件Struts2默认的配置文件为Struts.xml,该文件需要存放在WEB-INF/classes下,该文件的配置模板如下(在m yeclipse中放在src目录下就可以了)模板在D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开web-info/classes中的struts.x m l文件即可<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.3//EN""/dtds/struts-2.3.dtd"><struts></struts>4)在web.xm l中加入Struts2MVC框架启动配置在struts1.x中struts框架是通过Servlet启动的,在struts2中,struts框架式通过Filter 启动的,他在web.xm l中的配置如下:(D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开Web-Info\web.xm l即可)<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.Str utsPrepareAndExecuteFilter</filter-class><!—自从struts2.1.3以后,下面的FilterDispatcher已经标注为过时<filter-class>org.apache.struts2.dispatcher.ng.filter.FilterDispather</filter-class> --></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>在StrutsPrepareAndEXecuteFilter()方法中将会读取类路径下的默认文件struts.xml完成初始化操作。
STRUTS2.0框架技术详解
15.3.1 Struts2.0 标记列表(Tag List).................................................................... 21 15.3.2 常用 Struts2.0 标记的应用................................................................................ 24
15.2 Struts 2 框架技术概述............................................ห้องสมุดไป่ตู้..................................................................... 6
15.2.1 Struts 1 和 Struts 2 的对比............................................................................... 7 15.2.2 Struts1 的 MVC 实现............................................................................................... 8 15.2.3 Struts 2 的简单实现........................................................................................... 17
struts2的工作原理
struts2的工作原理
Struts2是一个基于Java的Web应用程序框架,其工作原理是
基于MVC(Model-View-Controller)设计模式。
它主要由以
下几个组件构成:
1. 客户端发起请求:用户在浏览器中输入URL地址或者点击
超链接等操作发起请求。
2. 前端控制器(Front Controller)处理请求:当用户发起请求时,前端控制器(通常是一个Servlet)接收到请求,并负责
处理该请求。
3. 配置文件解析:前端控制器会根据配置文件(通常是struts.xml)对请求进行解析,确定要执行的控制器动作和视图。
4. 控制器动作执行:前端控制器会根据配置文件中指定的控制器动作,调用相应的Action处理业务逻辑。
Action是一个
Java类,负责接收请求参数、调用服务层逻辑处理数据,并将处理结果封装进Action的属性中。
5. 视图生成:当控制器动作执行完成后,前端控制器会根据配置文件中指定的视图,调用相应的视图模板生成最终的
HTML响应。
6. 响应返回客户端:生成的HTML响应会被前端控制器发送
回客户端,显示在用户的浏览器中。
总结来说,Struts2的工作原理就是通过前端控制器来处理用
户请求,根据配置文件解析请求,并调用相应的Action处理
业务逻辑,最后生成HTML响应返回给客户端。
这种设计模
式的好处是将业务逻辑与界面分离,提高了代码的可维护性和可测试性。
Struts2技术详解
Struts2技术详解1, 当Action设置了某个属性后,Struts将这些属性封装一个叫做Struts.valueStack的属性里。
获取valueStack对象:ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");调用ValueStack 的vs.findValue("books")方法(books为Action中的属性);2, struts2的Action类是一个普通的POJO 类(通常包含一个无参的execute方法)从而很好的重用代码。
4,struts2通常直接使用Action来封装HTTP请求参数,所以Action中要定义与请求参数对应的属性,并且为该属性提供相应的getter和setter方法。
5,即使Action需要处理的请求name和pass两个HTTP请求参数,Action类也可以不包含name和pass属性,因为系统是通过对应的getter和setter方法来处理请求参数。
而不是通过属性来处理请求参数的。
所以Action类是否包含name和pass属性不重要,重要的是需要setter和getter方法。
6,Action类的属性,不仅可以封装请求参数,还可以用于封装处理结果,通过Struts2标签来输出对应的属性值。
如<s:Property value="tip">。
7,ActionContext类。
Struts2的Action并未直接与任何Servlet api耦合,从而更加方便测试该Action(可以通过脱离web容器测试Action)。
但是对于Web应用的控制器来说,不访问Servlet api 几乎是不能的。
例如跟踪HTTP session状态等。
访问的Servlet Api 就是HttpServeltRequest、HttpSession、ServletContext,这三个类分别jsp内置对象中的request、session、application。
struts2的发展极其优势
Struts 2目录Struts 2 概述Struts技术的发展概况Struts2体系结构Struts2和Struts1的对比WebWork和Struts2的对比Struts2 五种默认返回类型名编辑本段Struts 2 概述Struts 2是Struts的下一代产品。
是在struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。
编辑本段Struts技术的发展概况经过六年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠性都得到了广泛的证明。
市场占有率超过20%,拥有丰富的开发人群,几乎已经成为了事实上的工业标准。
但是随着时间的流逝,技术的进步,Struts1的局限性也越来越多地暴露出来,并且制约了Struts1的继续发展。
对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密,因而导致了一些严重的问题。
首先,Struts1支持的表现层技术单一。
由于Struts1出现的年代比较早,那个时候没有FreeMarker、Velocity等技术,因此它不可能与这些视图层的模版技术进行整合。
其次,Struts1与Servlet API 的严重耦合,使应用难于测试。
最后,Struts1代码严重依赖于Struts1 API,属于侵入性框架。
从目前的技术层面上看,出现了许多与Struts1竞争的视图层框架,比如JSF、Tapestry和Spring MVC等。
这些框架由于出现的年代比较近,应用了最新的设计理念,同时也从Struts1中吸取了经验,克服了很多不足。
struts2基本流程及原理
Struts2基本流程及原理1.Struts 2的基本流程Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。
在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。
2.核心控制器:FilterDispatcherFilterDispatcher是Struts 2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该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(面向切面编程)处理方式。
用户实现的Action类仅仅是Struts 2的Action代理的代理目标。
用户实现的业务控制器(Action)则包含了对用户请求的处理。
Structs2框架技术简单介绍
优点
• 3. 强大的拦截器Struts2的拦截器是一个Action级别 的AOP,Struts2中的许多特性都是通过拦截器来实 现的,例如异常处理,文件上传,验证等。拦截器 是可配置与重用的,可以将一些通用的功能如:登 录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web 项目中,就是使用Struts2的拦截器来完成了系统中 的权限验证功能。
第一步 创建index.jsp
<html><head> <title>第一个Struts简单示例</title> </head> <body> <form action="user/HelloAction" method="post"> 请输入你的大名:<input type="text" name="username" /> <br> <input type="submit" value="提交" /> </form></body></html>
Structs2工作流程
• 此外,如果struts.xml文件中还定义了被请 Action的一些拦截器,那么该Action实例被 调用前后,这些拦截器也会被先后执行。
Structs2工作流程
Structs2工作流程
• 第五步 Action对请求处理完毕以后将返回 一个逻辑视图,该逻辑视图将在struts.xml 文件相应的<result>元素中寻找相应的物理 视图,并返回给客户端 • <result name="success">/WEBINF/page/hello.jsp</result>
struts2入门教程一(环境搭建,基本案例实现)CSDN
Struts2入门初步需掌握1.struts2概述2.struts2环境搭建(第一个struts2的应用程序)3.struts.xml文件配置详解4.struts2请求的URL的搜索路径的顺序概述5.struts2工作原理概述6.struts2指定多个配置文件7.struts2动态方法调用8.使用通配符定义action一:简介Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
二:环境搭建搭建Struts2环境时,我们一般需要做以下几个步骤的工作:1.找到开发Struts2应用需要使用到的jar文件.下载官网:/download.cgi#struts221解压后:开始学习使用依赖的最基本的jar 包2:编写Struts2的配置文件解压其中一个案例在此目录下找到struts.xml 文件先拷贝到项目的src 下。
再对起进行修改。
删除剩余如下代码:[html]01.<?xml version ="1.0"encoding ="UTF-8" ?> 02.<!DOCTYPE struts PUBLIC 03."-//Apache Software Foundation//DTD StrutsConfiguration 2.3//EN" 04."/dtds/struts-2.3.dtd"> 05.06.<struts> 07.08. </struts>无法加载插件。
struts2 的工作原理
struts2 的工作原理Struts2是一个基于Java的Web应用框架,其核心原理是基于MVC(模型-视图-控制器)模式进行开发。
它的工作原理可以简要概括如下:1. 客户端通过浏览器发送请求至Web服务器,请求的URL映射到Struts2框架的前端控制器(Front Controller)。
2. 前端控制器负责接收请求并进行初步处理,它会根据Struts2配置文件中定义的拦截器(Interceptors)和映射表(Mapping)来确定如何处理请求。
3. 拦截器是Struts2框架中的一个重要组件,用于对请求进行预处理和后处理。
它可以用于验证用户身份、记录日志、数据验证等。
拦截器可以按照一定的顺序链式执行,每个拦截器可以对请求进行修改或决定是否继续执行下一个拦截器。
4. 映射表用于将请求映射到对应的Action(控制器)及其相关方法上。
Struts2框架会根据请求的URL、请求参数等信息进行匹配。
5. Action是Struts2框架中的控制器组件,负责接收请求、处理业务逻辑并生成响应。
在执行Action方法之前,Struts2框架会将请求参数绑定到Action对象的对应属性上。
6. Action执行后,会返回一个结果视图(View)路径或逻辑名。
Struts2框架会根据配置文件中的Result定义,将该结果视图转发或重定向给客户端。
7. 结果视图可以是一个JSP页面、一个HTML文件、一个JSON数据等。
客户端浏览器会接收到结果视图并进行展示。
总的来说,Struts2的工作原理是通过前端控制器接收请求,经过拦截器的预处理和后处理,根据映射表将请求转发给对应的Action进行处理,最后将处理结果返回给客户端浏览器展示。
这种基于MVC模式的设计能够有效地将业务逻辑与用户界面分离,提高了代码的可维护性和可重用性。
01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本
1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。
轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import它的包。
Struts2实现了MVC,满足了MVC设计思想。
在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。
作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。
这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。
Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。
重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。
1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。
它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。
1、M-Model 模型模型(Model)的职责是负责业务逻辑。
包含两层:业务数据和业务处理逻辑。
比如实体类、DAO、Service都属于模型层。
2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。
属于视图的组件是不包含业务逻辑和控制逻辑的JSP。
3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。
比如:在Servlet项目中的单一控制器ActionServlet。
struts2面试题
struts2面试题Struts2是一个基于Java开发的Web应用程序框架,被广泛应用于企业级Java应用开发中。
在面试中,面试官可能会提出一些关于Struts2的问题,以评估应聘者的技术水平。
下面是一些常见的Struts2面试题及其详细答案,希望对你在面试中有所帮助。
1. 什么是Struts2?Struts2是一个轻量级的、基于MVC模式的Web应用程序框架。
它采用Java Servlet API和JavaServer Pages (JSP)技术,并提供了一种简单易用的方式来开发可维护和可扩展的Web应用程序。
2. Struts2的主要特性是什么?Struts2的主要特性包括:- MVC架构:将应用程序分为模型、视图和控制器,使开发更容易管理和扩展。
- 拦截器:通过拦截器可以在请求处理的各个阶段添加自定义的逻辑。
- 标签库:提供了丰富的标签库,简化了页面开发。
- 表单验证:提供了灵活且强大的表单验证机制,可以验证用户输入的数据。
- 国际化支持:支持多语言和本地化。
- 配置简单:通过配置文件来管理应用程序的行为。
3. Struts2的工作原理是什么?Struts2的工作原理如下:1) 客户端发送HTTP请求到服务器。
2) 服务器将请求交给Struts2的过滤器(Filter)。
3) 过滤器通过配置文件找到对应的Action,并调用相应的方法。
4) Action处理请求,并返回一个结果页面的名称或一个结果对象。
5) 结果页面的名称通过配置文件进行映射,服务器将其发送给客户端。
4. 什么是Struts2中的Action类?Action类是Struts2框架中的核心组件,用于处理Web请求。
一个Action类对应一个业务功能,其包含了要执行的方法和数据。
它负责接收请求、处理业务逻辑、将结果返回给前端页面。
5. Struts2中的拦截器是什么?有哪些内置的拦截器?拦截器是Struts2中的组件,用于在请求处理的各个阶段添加自定义的逻辑。
struts2工作原理
struts2工作原理Struts2是一个基于MVC设计模式的开源Web应用框架,它的工作原理是通过一系列的组件和机制来实现对Web应用程序的控制和管理。
在深入了解Struts2工作原理之前,我们先来了解一下MVC设计模式。
MVC是Model-View-Controller的缩写,它是一种软件架构模式,用于将应用程序的逻辑层、数据层和表现层分离开来。
在MVC 模式中,Model代表应用程序的数据和业务逻辑,View代表用户界面,Controller负责处理用户的输入并作出相应的反应。
在Struts2中,请求首先由前端控制器DispatcherServlet接收,DispatcherServlet将请求分发给相应的Action。
Action是Struts2框架中的核心组件,它负责处理用户的请求,并调用相应的业务逻辑处理数据。
在处理完业务逻辑之后,Action将结果返回给DispatcherServlet,DispatcherServlet再将结果渲染到用户界面上。
在Struts2中,配置文件也扮演着非常重要的角色。
通过配置文件,我们可以将请求映射到相应的Action,配置拦截器来处理用户的请求,以及配置全局结果集来统一处理Action的返回结果。
所有这些配置都是通过XML文件或注解来实现的。
另外,拦截器也是Struts2框架中非常重要的组件之一。
拦截器可以在Action执行之前或之后进行一些预处理或后处理操作,比如日志记录、权限验证、异常处理等。
通过配置拦截器栈,我们可以对请求进行统一的处理,提高代码的复用性和可维护性。
除了以上提到的组件和机制,Struts2还提供了丰富的标签库和插件,用于简化开发工作。
标签库可以帮助开发人员快速构建用户界面,而插件则可以扩展框架的功能,满足不同项目的需求。
总的来说,Struts2框架的工作原理可以概括为,前端控制器接收用户请求,将请求分发给相应的Action,Action处理业务逻辑并返回结果,DispatcherServlet将结果渲染到用户界面上。
struts2框架的原理和应用
Struts2框架的原理和应用1. 什么是Struts2框架Struts2是一个基于Java EE的开源Web应用框架,是Struts框架的升级版。
它通过MVC设计模式实现了Web应用开发的分层,将业务逻辑、数据模型和用户界面分离,使得代码更加清晰、易于维护。
2. Struts2框架的原理Struts2框架的原理主要包括以下几个关键点:MVC设计模式Struts2采用了MVC(Model-View-Controller)设计模式,其中:•模型(Model):负责管理应用程序的数据和业务逻辑。
•视图(View):负责显示数据给用户。
•控制器(Controller):负责处理用户输入、调用模型和视图等。
核心组件Struts2框架包含以下核心组件:•拦截器(Interceptor):负责在请求前后进行统一处理,可以用来进行身份验证、日志记录等操作。
•动作(Action):负责处理用户请求,包括接收请求参数、调用业务逻辑方法等。
•结果(Result):负责生成并返回视图,可以是JSP、Freemarker、JSON等。
•值栈(ValueStack):用于存储Action处理过程中的数据,支持OGNL表达式读取和赋值操作。
•配置文件(struts.xml):用于配置拦截器、动作、结果等,实现URL与处理类之间的映射关系。
工作流程Struts2框架的工作流程如下:1.客户端发送请求到Struts2框架的前端控制器(例如:DispatcherFilter)。
2.前端控制器根据请求的URL找到对应的处理类(Action)。
3.前端控制器将请求参数、上下文信息等传递给Action,同时执行拦截器的前置处理逻辑。
4.Action处理用户请求,并根据业务逻辑生成相应的结果。
5.前端控制器将结果传递给结果组件,选择合适的视图进行渲染。
6.前端控制器将渲染后的视图返回给客户端。
3. Struts2框架的应用Struts2框架在Web应用开发中具有广泛的应用,以下是一些主要的应用场景:1. 构建Web应用程序Struts2框架提供了许多构建Web应用程序的工具和技术,包括表单验证、国际化、文件上传等功能。
struts2流程
struts2流程Struts2是一种基于Java的Web应用程序框架,它是在Servlet、JSP、JavaBean等技术的基础上开发的,目的是为了简化Web应用程序的开发和维护过程。
Struts2框架采用MVC(模型-视图-控制器)的架构模式,通过将用户请求分发给相应的控制器,然后根据控制器的指令进行处理,再将结果返回给用户进行展示。
下面我们将详细介绍Struts2的工作流程。
Struts2的工作流程可以分为以下几个步骤:1. 客户端发送请求:当用户通过浏览器访问某个URL地址时,客户端会生成一个HTTP请求,该请求会发送给服务器。
2. DispatcherServlet拦截请求:服务器接收到请求后,DispatcherServlet作为Struts2的核心控制器将拦截该请求。
3. 根据请求寻找相应的Action:DispatcherServlet会根据请求的URL地址和配置文件中的映射规则,找到匹配的Action类。
4. 创建Action实例:一旦找到了匹配的Action类,Struts2会创建该Action类的一个实例。
5. 封装请求参数:Struts2框架会自动将请求中的参数封装到Action实例中的属性中,以便在后续的处理中使用。
6. 调用Action方法:一旦请求参数被封装好,Struts2框架会调用对应Action类中的相应方法来处理该请求。
在Action方法中,可以进行一些业务逻辑的处理,并返回相应的结果。
7. 响应结果处理:Action方法的执行结果会被封装到一个Result对象中,该对象包含了结果的类型和数据。
Struts2框架会从配置文件中查找对应的结果视图,并将结果数据传递给视图进行展示。
8. 渲染视图:Struts2会将结果视图进行渲染,然后将渲染后的内容发送给客户端的浏览器。
9. 响应结果发送给客户端:服务器会将渲染后的内容作为HTTP响应发送给客户端的浏览器,浏览器接收后进行展示。
struts2的工作原理
struts2的工作原理Struts2是一个基于Java的开源Web应用程序框架,用于快速构建企业级Web应用程序。
它采用了模型-视图-控制器(MVC)架构模式,通过统一的控制器来处理用户的请求,并将结果返回给视图进行展示。
本文将介绍Struts2的工作原理,包括请求的处理流程、组件的作用以及如何配置和使用Struts2。
一、Struts2的请求处理流程1. 客户端发送HTTP请求到服务器。
2. 服务器接收到请求后,将请求交给Struts2的过滤器(StrutsPrepareAndExecuteFilter)进行处理。
3. 过滤器根据请求的URL找到对应的Action,并将请求参数封装到Action的属性中。
4. 过滤器调用Action的execute()方法进行业务逻辑处理。
5. Action执行完毕后,返回一个结果视图。
6. 过滤器根据结果视图的配置,将结果返回给客户端。
二、Struts2的组件作用1. Action:Action是Struts2框架的核心组件,用于处理用户的请求。
每个Action类对应一个业务功能,其中的方法对应不同的请求处理逻辑。
2. Interceptor:Interceptor是Struts2框架的拦截器,用于在Action执行前后进行一些额外的处理。
例如,可以在Interceptor中进行身份验证、日志记录等操作。
3. Result:Result是Struts2框架的结果视图,用于将Action的处理结果展示给用户。
可以配置不同的Result类型,如跳转到指定页面、返回JSON数据等。
4. ValueStack:ValueStack是Struts2框架的数据栈,用于存储Action中的属性。
在页面中可以通过表达式语言访问ValueStack 中的数据。
三、Struts2的配置和使用1. 配置文件:Struts2的配置文件是struts.xml,用于配置Action、Interceptor、Result等组件的相关属性。
第七章 MVC框架技术Struts2
本章要点
Struts2配置及应用程序原理 Action的设计方法与结果类型 服务器端的输入验证 Struts2国际化、标签库和OGNL表达式 拦截器、文件上传和下载
7.1 Struts2概述
Struts框架的历史
• Struts在经历了1.x的若干版本后,最终发展 到2.0版本,也就是我们常说的Struts2。它是 Struts和WebWork相互结合的产物,代表了 WEB框架的最新技术和规范。本书中Struts2 的内容以最新的Struts2.2.3版本为准。
7.3 输入验证
使用validate()方法
• 要进行输入验证,Action类要继承ActionSupport,并重写 validate()方法。 • 当请求Action的时候,请求中的参数会自动去填充Action的模型 中的同名属性,如果能够从字符串自动转换成相应的Java数据类 型,则转换成功,否则会抛出异常。如果类型转换成功,则填充 属性,并在调用业务方法前,执行validate()方法来判断所有输 入数据的合法性,例如长度是否够,是否是空值等。 • 输入验证可以针对不同的业务方法,例如,对登录进行输入验证, vaidate()方法可以命名成validateLogin()。如果同时有 validate()方法,执行的顺序是先调用validateLogin(),再调用 validate(),前面的方法验证没通过,后面的方法不再执行。
此外,还有SessionAware、ServletResponseAware、 ServletRequestAware、ParameterAware等接口。
多方法的Action
• 前面所定义的Action都是通过execute()方法处理请求。在实际 的应用中,如果为每个业务逻辑定义一个Action,虽然实现方便, 但是Action数量多,struts.xml中需要配置的内容也多,使系统 非常庞杂。实际上,可以用一个Action处理多个业务请求。 • 以YbUserAction为例,可以为每个操作定义一个方法,这些方法 的格式和execute()方法一样。
Struts 2
Struts 2Struts 2 概述Struts 2是Struts的下一代产品。
是在struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。
Struts2体系结构Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork 的设计核心,而不是Struts1的设计核心。
Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API分离。
图一是Struts2的体系结构简图。
Struts2框架的大概处理流程如下:浏览器发送一个请求。
核心控制器FilterDispatcher根据请求决定调用合适的Action。
WebWork的拦截器链自动对请求应用通用功能,如验证等。
回调Action 的execute方法,该execute方法根据请求的参数来执行一定的操作。
Action的execute方法处理结果信息将被输出到浏览器中,支持多种形式的视图。
Struts2和Struts1的对比通过上面对Struts2体系结构的了解,我们发现Struts2对Struts1进行了巨大的改进。
主要表现在如下几个方面:在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的POJO。
线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。
Struts2的Action是一个请求对应一个实例。
Struts2入门及配置(许业生)
Struts2入门及环境配置虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。
Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。
从某种程度上来讲,Struts2没有继承Struts 1的血统,而是继承WebWork的血统。
或者说,WebWork衍生出了Struts2,而不是Struts 1衍生了Struts2。
因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了Struts 1和WebWork两者的优势,因此,是一个非常值得期待的框架。
Apache Struts2是一个优雅的,可扩展的JAVA EE web框架。
框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。
Apache Struts 2即是之前大家所熟知的WebWork 2。
在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts 2Struts 2 英文官方网站:下面我们来用一个简单的实例来学习一下Struts2,大家都知道MyEclipse集成开发环境中对Struts1有了很好的支持,我们可以用MyEclipse就可以给项目添加Struts1支持,但是Struts2目前就没有什么好的工具可以直接给项目添加Struts2支持了,我们必须全部手动添加了,其实对与初学者我建议不要用工具进行生产,自己手动配置一下会让你对一个新技术有很好的理解。
先不多说了,下面我们开始吧!新建一个web项目,项目名称就叫Struts2,项目建好了,我们该给项目添加Struts2支持了吧,要引入很多jar包,这些jar包从哪里来呢!没关系,下面是目前最新版本Struts2.1.6官方下载地址:下载完毕后,我们将你下载的zip格式的文件解压,解压完了找到解压包里面的lib文件夹,里面包含了Struts2所有的jar文件。
struts2 工作原理
struts2 工作原理
Struts2是一个用于构建Java web应用程序的开源框架。
它的
工作原理可以简单概括为以下几个步骤:
1. 客户端发送请求:当用户在浏览器中访问一个Struts2应用
程序的URL时,客户端会发送一个HTTP请求到服务器。
2. DispatcherServlet接收请求:服务器上运行的Servlet容器
(如Tomcat)接收到HTTP请求后,会通过web.xml配置文
件将请求发送给Struts2的核心组件DispatcherServlet。
3. 动作(Action)处理:DispatcherServlet根据配置文件中的信息,确定请求对应的Action类,并创建该类的实例。
Action是一
个POJO(Plain Old Java Object)类,用于处理具体的业务逻辑。
4. 结果视图(View)解析:Action类中的方法执行完业务逻辑后,会返回一个结果视图。
Struts2的结果视图可以是JSP页面、HTML、JSON等格式。
DispatcherServlet根据配置文件中指定
的结果视图解析器,将结果视图转化为最终的响应内容。
5. 结果响应:DispatcherServlet将最终的响应内容发送给客户端,客户端浏览器会将响应内容渲染并呈现给用户。
在这个过程中,Struts2框架提供了一系列的核心组件来协助
处理请求和响应,包括拦截器(Interceptor)、值栈(ValueStack)、类型转换器(Type Converter)等。
这些组件
能够帮助开发者处理表单提交、数据验证、数据转换等常见的web开发任务,从而简化开发过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2技术在本教程中使用的工具和程序库的版本如下:●开发工具:MyEclipse6●Web服务器:Tomcat6●Struts版本:Struts2.0.11.1●JDK版本:JDK1.5.0_12●J2EE版本:Java EE5.0在本系列教程中Web工程的上下文路径都是struts2,如果在Web根目录有一个index.jsp文件,则访问路径如下:http://localhost:8080/struts2/index.jsp由于MyEclipse6目前并不支持Struts2,所以我们需要到去下载Struts2安装包。
要想正常使用Struts2,至少需要如下五个包(可能会因为Struts2的版本不同,包名略有差异,但包名的前半部是一样的)。
●struts2-core-2.0.11.1.jar●xwork-2.0.4.jar●commons-logging-1.0.4.jar●freemarker-2.3.8.jar●ognl-2.6.11.jar(将%TOMCAT_HONE%\common\endorsed\xml-apis.jar删除)Struts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式(当然,Struts2仍然是基于MVC模式的,也是动作驱动的,可能这是唯一没变的东西)。
Struts2实际上是在Webwork基础上构建起来的MVC框架。
我们从Struts2的源代码中可以看到,有很多都是直接使用的xwork(Webwork的核心技术)的包。
既然从技术上来说Struts2是全新的框架,那么就让我们来学习一下这个新的框架的使用方法。
如果大家使用过Struts1.x,应该对建立基于Struts1.x的Web程序的基本步骤非常清楚。
让我们先来回顾一下建立基于Struts1.x的Web程序的基本步骤。
1. 安装Struts。
由于Struts的入口点是ActionServlet,所以得在web.xml 中配置一下这个Servlet。
2. 编写Action类(一般从org.apache.struts.action.Action类继承)。
3. 编写ActionForm类(一般从org.apache.struts.action.ActionForm类继承),这一步不是必须的,如果要接收客户端提交的数据,需要执行这一步。
4. 在struts-config.xml文件中配置Action和ActionForm。
5. 如果要采集用户录入的数据,一般需要编写若干JSP页面,并通过这些JSP 页面中的form将数据提交给Action。
下面我们就按着编写struts1.x程序的这五步和struts2.x程序的编写过程一一对应,看看它们谁更“酷”。
下面我们来编写一个基于Struts2的Web程序。
这个程序的功能是让用户录入两个整数,并提交给一个Struts Action,并计算这两个数的代数和,如果代码和为非负数,则跳转到positive.jsp页面,否则跳转到negative.jsp页面。
【第1步】安装Struts2这一步对于Struts1.x和Struts2都是必须的,只是安装的方法不同。
Struts1的入口点是一个Servlet,而Struts2的入口点是一个过滤器(Filter)。
因此,Struts2要按过滤器的方式配置。
下面是在web.xml中配置Struts2的代码:<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>【第2步】编写Action类这一步和Struts1.x也必须进行。
只是Struts1.x中的动作类必须从Action类中继承,而Struts2.x的动作类需要从com.opensymphony.xwork2.ActionSupport类继承。
下面是计算两个整数代码和的Action类,代码如下:import com.opensymphony.xwork2.ActionSupport;public class FirstAction extends ActionSupport {private int operand1;private int operand2;public String execute() throws Exception {if (getSum() >= 0) // 如果代码数和是非负整数,跳到positive.jsp页面{return"positive";} else// 如果代码数和是负整数,跳到negative.jsp页面{return"negative";}}public int getOperand1() {return operand1;}public void setOperand1(int operand1) {System.out.println(operand1);this.operand1 = operand1;}public int getOperand2() {return operand2;}public void setOperand2(int operand2) {System.out.println(operand2);this.operand2 = operand2;}public int getSum() {return operand1 + operand2; // 计算两个整数的代码数和}}从上面的代码可以看出,动作类的一个特征就是要覆盖execute方法,只是Struts2的execute方法没有参数了,而Struts1.x的execute方法有四个参数。
而且execute方法的返回值也不同的。
Struts2只返回一个String,用于表述执行结果(就是一个标志)。
上面代码的其他部分将在下面讲解。
【第3步】编写ActionForm类在本例中当然需要使用ActionForm了。
在Struts1.x中,必须要单独建立一个ActionForm类(或是定义一个动作Form),而在Struts2中ActionForm和Action 已经二合一了。
从第二步的代码可以看出,后面的部分就是应该写在ActionForm 类中的内容。
所以在第2步,本例的ActionForm类已经编写完成(就是Action 类的后半部分)。
【第4步】配置Action类这一步struts1.x和struts2.x都是必须的,只是在struts1.x中的配置文件一般叫struts-config.xml(当然也可以是其他的文件名),而且一般放到WEB-INF 目录中。
而在struts2.x中的配置文件一般为struts.xml,放到WEB-INF"classes 目录中。
下面是在struts.xml中配置动作类的代码:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"><struts><package name="struts2" namespace="/mystruts"extends="struts-default"><action name="sum" class="action.FirstAction"><result name="positive">/positive.jsp</result><result name="negative">/negative.jsp</result></action></package></struts>在<struts>标签中可以有多个<package>,第一个<package>可以指定一个Servlet访问路径(不包括动作名),如“/mystruts”。
extends属性继承一个默认的配置文件“struts-default”,一般都继承于它,大家可以先不去管它。
<action>标签中的name属性表示动作名,class表示动作类名。
<result>标签的name实际上就是execute方法返回的字符串,如果返回的是“positive”,就跳转到positive.jsp页面,如果是“negative”,就跳转到negative.jsp页面。
在<struts>中可以有多个<package>,在<package>中可以有多个<action>。
我们可以用如下的URL来访问这个动作:http://localhost:8080/struts2/mystruts/sum.action注:Struts1.x的动作一般都以.do结尾,而Struts2是以.action结尾。
【第5步】编写用户录入接口(JSP页面)1. 主界面(sum.jsp)在Web根目录建立一个sum.jsp,代码如下:<%@ page language="java" import="java.util.*" pageEncoding="GBK" %> <%@ taglib prefix="s" uri="/struts-tags"%><html><head><title>输入操作数</title></head><body>求代数和<br/><s:form action="mystruts/sum.action" ><s:textfield name="operand1" label=" 操作数1"/><s:textfield name="operand2" label=" 操作数2" /><s:submit value="代数和" /></s:form></body></html>在sum.jsp中使用了Struts2带的tag。