struts2
struts2

—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件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="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
struts2

1.strust2框架来历简介:WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架。
(同时也是一个成熟的基于Web的MVC框架)MVC:Model View Controller,model是模型,view是视图,controller是控制器,是一种框架模式。
随着WebWork框架的发展,衍生出了strust2框架,因此strust2框架是WebWork的升级,而不是一个全新的框架,因此稳点性、性能等方面都有很好的保证,而且也同时吸收了struts1框架和WebWork俩者的优点.所以strust2框架也是一个基于Web的MVC框架注意:strust2框架并不是struts1框架的延续或者升级,俩者有着很大的不同2.web项目中的三层架构(和MVC是俩个完全不同的架构)1.表示层(Struts2框架就是工作在这个地方)2.业务逻辑层(service层,处理业务逻辑,比如判断用户名是否存在、密码是否正确、权限是否拥有、账号是否被冻结、账号是否异常、用户积分是否到达操作要求等等,多为一些执行某一个操作条件的判断)3.数据访问层(dao层,专门处理和数据库进行交换的事情,jdbc/hibernate就在这里使用)在项目中,这些不同的分层的表现形式,其实就是在我们自己建的不同的package 中写上各自分层中所使用的java类.比如在项目中我们建了三个package,三个package中java类的作用分别为表示层的代码、业务逻辑层代码、数据访问层代码。
注意:可以理解为,MVC架构是这里说描述的三层架构的一部分,即:三层架构中的表示层可以使用mvc架构的框架来实现,例如使用struts2框架.3.使用struts2框架的好处(为什么要使用struts2框架)减少编程人员代码的编写,使代码更加简洁明了,缩短开发时间,增加开发效率.4.struts2框架引入到web项目中首先使用Eclipse/MyEclipse中建一个web项目.1.把struts2相关jar包引入到项目中。
Struts2的介绍及总结

Struts2在WebWork基础上发展起来的,可扩展的JAVA EE web框架。
框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。
Action类:Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。
Struts2提供一个ActionSupport基类去实现常用的接口。
Action接口不是必须的,任何有execute标识的POJO 对象都可以用作Struts2的Action对象。
线程模式:Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。
Servlet依赖:Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。
如果需要,Struts2 Action仍然可以访问初始的request和response。
但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
可测试性:Struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
Action属性能够通过web页面上的taglibs访问。
表达式语言:Struts 2 使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
Struts2不仅支持JSTL,Struts2 还可使用OGNL进行类型转换。
提供基本和常用对象的转换器。
校验:Struts2支持通过validate方法和XWork校验框架来进行校验。
XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。
struts2框架特征

struts2框架特征Struts2框架特征Struts2是一种流行的Java Web应用程序开发框架,其特征使其成为许多开发者的首选。
本文将介绍Struts2框架的特征,包括MVC 架构、强大的标签库、拦截器、数据验证、国际化支持以及灵活的配置等。
一、MVC架构Struts2采用了MVC(Model-View-Controller)架构,将应用程序的业务逻辑、数据模型和用户界面分离。
这种架构使开发者能够更好地组织代码、提高代码的可维护性,并能够更容易地进行代码重用和测试。
在Struts2中,Model代表数据模型,可以是POJO(Plain Old Java Object)或者是与数据库交互的实体类;View代表用户界面,通常是JSP页面;Controller则负责处理用户请求、调用业务逻辑,并将处理结果返回给用户。
二、强大的标签库Struts2提供了丰富的标签库,使开发者能够更轻松地构建用户界面。
这些标签库包括表单标签、数据展示标签、控制流标签等,可以大大简化页面开发的工作量。
例如,开发者可以使用Struts2的表单标签库来生成表单,并自动处理表单的数据绑定、验证和错误提示。
这样,开发者无需手动编写大量的HTML和JavaScript代码,能够更快速地完成表单开发。
三、拦截器Struts2的拦截器是其核心特性之一,可用于在请求到达Controller之前和之后执行一些通用的处理逻辑,如日志记录、权限验证、异常处理等。
开发者可以通过配置拦截器栈,将多个拦截器按照特定的顺序组合起来,实现复杂的请求处理流程。
拦截器的使用使得开发者能够将通用的处理逻辑从业务逻辑中分离出来,提高了代码的可维护性和重用性。
同时,Struts2还提供了许多内置的拦截器,如参数封装拦截器、文件上传拦截器等,方便开发者处理不同类型的请求。
四、数据验证在Web应用程序中,数据验证是一项重要的任务。
Struts2提供了强大的数据验证机制,开发者可以通过简单的配置实现对表单数据的验证。
Struts2知识点总结

Struts2基础知识Struts2概述1.Struts2框架应用javaee三层结构中的web层框架。
2.Struts2框架在struts1和webwork基础之上发展的全新框架。
3.Struts2所解决的问题:在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。
图解:4.现在比较稳定的Struts2版本struts-2.3.24-all.zip5.web层常见框架1.struts2.springMVCStruts2框架入门1.导入jar包1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring包,是不能使用的,导入会导致程序不能运行。
2.到app目录里面复制案例的jar包是最好的方法。
2.创建action3.配置action类的访问路径1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的,位置必须在src下面,名称为struts.xml 。
2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即可。
3.action的配置*注意访问路径:http://域名/端口号/项目名/action名.action注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。
4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴即可。
Struts2执行过程图解:Struts2配置1.是一种常量标签2.修改Struts2的默认常量值1.常用方式在struts.xml中进行配置。
2.其它两种方式1.在src下面创建struts.properties文件并修改。
2.在web.xml文件中进行修改。
3.Struts2最常用的常量struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。
Struts2笔记(一)可使用全局页面。
1、配置方法:在package标签下配置2、注意:该标签只能在一个package标签中使用,如果有多个标签,需要重新定义。
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常见面试题Introduction:Struts2是一种用于开发Java Web应用程序的开源Web应用框架。
在软件工程领域,Struts2常常是面试中的热门话题。
本文将介绍一些常见的Struts2面试题,并提供详细解答和示例。
Question 1: 什么是Struts2框架?它的主要特点是什么?Struts2是一个基于MVC设计模式的Web应用框架。
它通过集成多个核心组件(如拦截器、过滤器、表单验证等)提供了一套丰富的功能,用于简化开发和管理Java Web应用程序。
Struts2的主要特点包括:1. 松耦合:Struts2使用基于配置的方式来管理组件之间的依赖关系,降低了模块之间的耦合。
2. 灵活性:开发人员可以根据自己的需求进行扩展和定制,以适应不同的项目需求。
3. 可测试性:Struts2的组件松耦合特点使得单元测试变得容易,并且可以方便地模拟用户请求进行测试。
Question 2: Struts2的核心组件有哪些?Struts2的核心组件包括:1. Action:处理用户请求的核心组件,负责接收请求并执行相应的业务逻辑。
2. Interceptor:用于对请求进行预处理和后处理的拦截器组件。
3. Result:负责生成响应结果,可以是页面视图或其他格式的数据(如JSON、XML等)。
4. FilterDispatcher:负责将请求分发给合适的Action处理。
5. ValueStack:用于存储Action处理的结果数据,支持OGNL表达式以便于数据的访问和操作。
Question 3: 如何定义一个Struts2的Action?在Struts2中,可以通过以下几种方式来定义一个Action:1. 实现Action接口:通过实现Action接口,并提供相应的业务方法来处理请求。
2. 继承ActionSupport类:ActionSupport是一个提供了一些方便方法的抽象类,可以直接继承并实现自己的业务逻辑。
struts2

struts2.Struts2课件1Mvc与servlet1.1 Servlet的优点1、是mvc的基础,其他的框架⽐如struts1,struts2,webwork都是从servlet基础上发展过来的。
所以掌握servlet是掌握mvc的关键。
2、Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。
3、程序员可以对servlet进⾏封装。
Struts2就是从servlet中封装以后得到的结果。
4、市场上任何⼀个mvc的框架都是servlet发展过来的,所以要想学好struts2这个框架,了解servlet的运⾏机制很关键。
1.2 Servlet的缺点1、每写⼀个servlet在web.xml中都要做相应的配置。
如果有多很servlet,会导致web.xml内容过于繁多。
2、这样的结构不利于分组开发。
3、在servlet中,doGet⽅法和doPost⽅法有HttpServletRequest和HttpServletResponse参数。
这两个参数与容器相关,如果想在servlet中作单元测试,则必须初始化这两个参数。
4、如果⼀个servlet中有很多个⽅法,则必须采⽤传递参数的形式,分解到每⼀个⽅法中。
2重构servlet针对servlet以上的特点,我们可以对servlet进⾏重构,使其开发起来更简单。
更容易,更适合团队协作。
重构的⽬标:1、只写⼀个serlvet或者过滤器,我们这⾥选择过滤器。
2、不⽤再写任何的servlet,这样在web.xml中写的代码就很少了。
3、原来需要写serlvet,现在改写action。
4、在action中把HttpServletRequest参数和HttpServletResponse参数传递过去。
5、在过滤器中通过java的反射机制调⽤action。
6、详细过程参照cn.itcast.action包中的内容3Struts2介绍1、struts2是apache组织发明的开源框架。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struts2框架是经验总框架提供一些通用的实现类介绍strutsstruts--struts2(WebWork)流行:JSF框架:--servlet2MVC:(struts是MVC标准)v-jsp 作用:只做数据显示c-servlet(action) (1)接受jsp请求(2)调用JavaBean (3)分发页面m-JA V ABean(业务0,数据(hibernate ibatis))(1)处理业务逻辑(业务层) (2)数据处理(数据层)struts2 HelloWorld准备struts2开发类库struts2.1.8.1 apps:学习案例docs:struts2官方提供文档src:struts2 源代码1、创建一个JA V AProject项目2、添加struts2开发基本类库包(a)struts2上传类库:commons-fileupload-1.2.1.jar commons-io-1.3.2.jar(b)struts2标签库(还支持JSTL标签):freemarker-2.3.15.jar(c)使用更强大的Ognl表达式语言:还支持:EL ognl-2.7.3.jar(d)struts2核心类库:struts2-core-2.1.8.1.jar(e)web work核心库:xwork-core-2.1.6.jar3、添加struts2配置文件默认:struts.xml(1)在src下创建一个struts.xml(2)引入dtd文件,在struts2-core-2.1.8.1.jar中找到struts-default.xml中复制出来<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN""/dtds/struts-2.1.7.dtd">4、创建jsp文件form_name.jsp welcome.jsp5、web project 与struts2集成struts2与web project 集成采用过滤器(filter)(1)在web.xml配置struts2集成web project filter<filter><filter-name>struts</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class></filter><filter-mapping><filter-name>struts</filter-name><url-pattern>/*</url-pattern></filter-mapping>注意:struts: *.do struts2:*.aciton 企开:/*(2)创建一个HelloAction类方法要求:1、方法名必须是execute 2、无参数列表3、返回值String 4、修饰符:public public String execute(){return null;}(3)在struts.xml文件中引入:dtd文件(4)在MyEclipse中有struts配置文件提示(a)把struts2-core-2.1.8.1.jar解压(b)找到struts-2.1.7.dtd文件(c)在myeclipse中引入dtd(5) 页面信息传送Action<input name="username">在action中提供username set|get方法(6) package:pagekage:可以有0~N extends:集成低层struts2框架注意:一般只有一个packagenamespace:作用区分不同package中,有相同action name 默认:namespace="/"action:action可以配置多个name:action名字,用户请求Action路径class:类的全路径result:result:可以有多个(分发页面配置)name:result的名字,名字与action 中return "值"相等type:分发类型,默认是:type="dispatcher"<result>jsp页面的路径</result>安全路径WEB-INF是安全路径,不能直接访问。
开发建议把页面放在web-inf下mainActon--->MainAction.java--> /WEB-INF/jsp/form_name.jsp开发项目1、创建数据库、表、并录入数据2、编写实体类com.tarena.entity.*JavaBean规范:(1)实现implements Serializable(2)提供无参构造方法(3)私有属性//要有注释(4)公有set、get方法3、编写DBConection4、完成查询com.tarena.dao.*5、分页:已知:一页显示条数: pageSize当前页数:pageNo求:每页显示信息select * from t_project limit 5,5;0:开始条数(从0开始,但不包括0)5:每页显示数开始条数:第一页:0---- pageSize第二页:2*5-1*5=5*(2-1)=pageSize*(pageNO-1)每页显示条数:pageSize//用户访问方便原来:http://127.0.0.1:8080/struts_lesson1.1.3/mainAction目前:http://127.0.0.1:8080/struts_lesson1.1.3response.sendRedirect("mainAction");index.jsp--->MainAction.java-->form_name.jsp解决分页中pageNo=0问题<c:choose><c:when test="${pageNo>1}"><a href="projectAction?pageNo=${pageNo-1}">上一页</a></c:when><c:otherwise>上一页</c:otherwise></c:choose>解决分页中pageNo>countPage(最大页数)1、问题:获取最大页数获取总记录数、每页显示行数2、获取总记录数select count(*) from t_project;3、显示<c:choose><c:when test="${pageNo<countPage}"><a href="projectAction?pageNo=${pageNo+1}"> 下一页</a></c:when><c:otherwise>下一页</c:otherwise></c:choose>使用javascript解决分页:注意:企业中比较常用(1)js文件<script type="text/javascript">function subPage(pageNo){alert(pageNo);document.pageForm.elements['pageNo'].value=pageNo;document.pageForm.submit();}</script>(2)<form name="pageForm">//提供隐藏域<input name="pageNo" type="hidden"></form>注意:name="pageForm"与document.pageForm相同(3)调用:<a href="javascript:subPage(${pageNo-1})"></a>JA V A Bean广义:一切java类都是JavaBean (封装数据,封装业务)狭义:封装数据的java类(set get)一般说JavaBean指的是狭义上的java类(封装数据)它不是一个标准,但是一个企业规范规范: (1).实现implements Serializable (2).必须显示提供无参构造方法(3).提供私有属性,公有get set方法属性名字规范:属性名字不建议使用private String a;public String getUsername() {return a;}public void setUsername(String username) {this.a = username;}必须:方法名字setXXXX getXXX一般建议:setXxx中Xxx=属性名字getXxx中Xxx=属性名字struts2:struts2支持更强大表达式语言(ognl、EL)struts2和servlet容器完全解耦ognl: 对象图导航语言EL表达式作用:可以获取(pageContext,request,session,application)作用域中对象的属性值pageContext:当前页面request:一次请求session:一次会话application:整个应用服务器EL局限性:只能做输出和简单运算ognl优势:EL功能它都具备ognl语言可以直接调用方法和静态方法ognl可以定义集合ognl可以实现sql的where条件过滤ognl使用:(1)添加struts2开发基本类库(2)通过ognl引擎中获取属性值Object obj=Ognl.getValue("属性名",对象);junit(.net nunit)完成单元测试工具junit4.4+spring Test 2.5.6(1)添加junit-4.4.jar类库(2)使用注解完成测试(junit4.x以上版本支持注解)@ Test 定义测试方法@Ignore 忽略测试方法,不在参与测试@Before 是在所有测试方法之前最先执行案例:@Beforepublic void setUp(){//setUp沿用junit4.x以前命名原则完成对象实例化和赋初始值}注意:规范类名:普通名字+Test方法名: test+普通方法名字public void test+普通方法名字(){}(3)断言:那一个预计值与实际值比对Assert.assertEquals(预计值,实际值);(4) 静态导包(a) import static 包名.类名.方法名(b)方法名();Ognl语言(1)常用类型int String(2)数组根据下标0(3)list 根据下标0(4)Map(a)"map属性.key" (c)"map属性[’key‘] "(b)"map属性[\"key\"] " 注意:转义:"\" \"key\"(5)ognl运算+ ,-,*,/等运算(6)ognl调用方法"name.toUpperCase()" 属性.方法()(7)调用静态方法"@ng.Math@pow(id,2)" "@包名@方法名()"(8)创建List {1,2,3,4,5,6,7}(9)创建一个Map #{'1':'hello','2':'world'}注意:List { } Map #{ }(10) 扩展(了解) 获取属性.属性emps[0].salary(11)投影(了解) 把一个集合或者数组,重新组成一个新的集合和数组emps.{salary}(12)选择(SQL where )emps.{^#this.salary>4000}.{ename}?:获取全部符合条件信息* $ :最后一个符合条件信息* ^:第一个符合条件信息Ognl组成Ognl引擎:根据发送字符串获取信息Root:一般存贮对象Context:全局的对象(request,session)--HashMap//注意:root区获取: "属性"//context区获取:#key注意:用户创建context区,系统就不在提供Struts2 OgnlCompound:把root区重新封装成一个栈,可以放置多个对象通过属性查找对象,从栈顶开始查找,找到后把信息发送给请求,销毁对象context: 公共信息Ognl引擎: 在struts2中把Compound、context、Ognl引擎统称为\值栈(valueStrack)了解valueStrack(1)valueStrack什么时候创建当用户请求,就创建valueStrack(2)action什么时候压入到compound valueStrack创建后,把请求action压入到compound中(3)属性查找compound 先从栈顶查找,找不到在向下找,找到返回,并销毁action对象如何使用struts标签:1、导入标签库<%@ taglib uri="/struts-tags" prefix="s" %>2、使用标签一般:struts2标签与ognl结合使用<s:debug/>查看值栈信息<s:property value="属性名"/>显示值Ognl在项目中使用结合struts2标签:(1)迭代标签iterator<s:iterator value=""> </s:iterator> value="集合属性名"(2)s:property 显示属性值<s:property value="" /> value:属性名字(3)s:date显示日期<s:date name="" format="" /> name:属性名format:日期格式(4)条件判断标签<s:if test=""><s:if> test:判断条件(boolean) <s:if></s:if> <s:else></s:else>(5)s:form <s:form action="projectAction" theme="simple">method:默认post theme="simple":不使用struts2提供模板action:提供绝对路径namespace="":设置工作空间注意:namespace="/" 使用<s:form/>提供一个绝对路径struts2对象创建模式:struts2多例:每个用户访问都会创建一个新实例,这样可以保证多用户并发访问,线程安全struts1单例:多个用户访问只创建一个实例struts2完成登陆1、创建表2、连接数据DBConnection.java db.properties 添加mysql-connector-java-5.1.16-bin.jar3、创建实体类User.java4、完成DAO5、Junit测试DAO6、创建login.jsp7、创建UserAction.java 8、完成登陆<s:textfield name="ername" theme="simple"/><s:password name="user.password" theme="simple"/>name:属性名字(属性对象.属性) 好处:可以自动回写注意:action中实体对象实例化(1)用户请求action,向实体对象填充属性值action容器自动完成对实体对象实例化。