Struts2知识点总结

合集下载

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍

Struts2学习之二--Struts2标签介绍热12已有 14625 次阅读 2009-07-12 18:53[顶]3G移动--Android开发工程师全能班(转) Struts2学习之二--Struts2标签介绍在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。

如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。

我的E-MAIL:Max.M.Yuan@。

在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。

分类将标志库按功能分成HTML、Tiles、Logic和Bean等几部分严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志表达式语言(expression languages)不支持嵌入语言(EL)OGNL、JSTL、Groovy和Velcity以上表格,纯属个人总结,如有所不足或错误,请不吝指正好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。

1.非UI标志o if、elseif和else描述:执行基本的条件流转。

参数:名称必需默认类型描述备注test 是Boolean 决定标志里内容是否显示的表达式else标志没有这个参数id 否Object/String 用来标识元素的id。

在UI和表单中为HTML的id属性例子:<%@ page contentType="text/html; charset=UTF-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Condition Flow</title></head><body><h3>Condition Flow</h3><!--这里有点小技巧:本来可以用#[0]来获得,请求中name的值。

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自学完全文档

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完成初始化操作。

Struts1与struts2的区别总结

Struts1与struts2的区别总结

Struts1与struts2的区别总结1,背景:Struts2并不是struts1的升级版,两者没有太大的关系,struts2是继承了webwork的机制,吸收了struts2和webwork的有优势。

Struts2是基于WebWork的一个全新框架. Struts2主要改进是取代了Struts1的Servlet和Action. Struts2的核心框架是当作一个filter来实现其功能的,而Struts1是ActionServlet.然后在Action上,Struts1都少不了要传递Request等参数,还要继承Action父类,而Struts2只要实现了一个public String execute()就可以了,这样Action就可以实现脱离Servlet 测试. Struts2还提供了拦截器(Interceptot)等Struts1所没有的技术.2,Action类Struts1要求action继承一个抽象基类,而struts2既可以继承类又可以实现action对应的接口,即接口编程,可以实现多个接口,使得可选和订制服务成为可能。

3,线程模式Struts1中的action是单例模式,会涉及到线程安全问题,因为仅有一个action来处理所有的请求,而struts2则是非单例模式,每个请求对应一个action,这样就不用考虑线程安全的问题(而且,servlet容器会给每个请求产生可丢弃的对象,这样就不会导致性能和垃圾回收问题)。

4,可测性Struts1中的action有个主要的问题是execute方法暴露了servlet API,这使得测试等需要依赖servlet容器。

一个第三方扩展--struts TestCase--提供了一套struts模拟对象来进行测试;而struts2 中的action可以通过初始化和设置属性(例如action当中直接用get和set方法),调用方法来测试,“依赖式注入”注入也使得测试更容易5,servlet依赖Struts1中的action依赖于servlet API,因为当一个action被调用时,HttpServletRequest和HttpServletResponse对象会被传递给execute方法(请求和响应的对象需要依赖于execute方法,即servlet API);而struts2中的action则不需要依赖于servlet容器,允许action脱离容器单独被测试(例如:struts2中获取请求的对象可以用ServletActionContext.getRequest())。

struts2框架特征

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提供了强大的数据验证机制,开发者可以通过简单的配置实现对表单数据的验证。

Struts知识点

Struts知识点

Struts笔记1.Hibernate和struts整合 (2)2.ResultType (2)3.OGNL (3)4.拦截器 (4)5.Action和result (5)6.i18n国际化 (7)7.Struts标签 (8)8.类型转换类的三种配置形式: (9)9.struts2中方法验证的三种形式 (10)10.MVC思想及其优势 (11)1.Hibernate和struts整合1.Hibernate的作用是针对数据表的操作,对JDBC进行封装。

一张表就是一个对象,存进表的数据就是一个一个的对象。

2.核心配置文件Hibernate.cfg.xml3.struts2 他是比较标准的MVC模式:分别只带的是模型视图控制器hibernate和struts在一起写一个增删查改的操作1.创建工程2.导入hibernate Jar包Struts Jar包3.核心配置文件Hibernate.cfg.xml的核心文件和数据库连接上4.创建POJO 创建POJO.hbm.xml 映射到核心的配置文件中5.通过创建一个创表的类把表创建出来6.创建客户端的JSP页面7.配置web.xml 创建Action 创建struts.xml8.在Tomcate上发布在运行2.ResultType如果一个或者多个action 中有同样的结果,可以配置全局结果集,减少重复代码3.OGNL访问Action值栈中的普通属性:<s:property value="dog"/><br>获取值栈中对象的属性:<s:property value="dog.people.pname"/><br>调用对象中的普通方法:<s:property value="dog.people.getMsg()"/><br>访问action中的方法:<s:property value="show()"/><br>访问action中的静态方法:<s:propertyvalue="@com.softeem.action.ActionDemo@getMsg()"/><br/>Math类的中方法:<s:property value="@@max(6,7)"/><br>访问普通类中的构造器:<s:property value="new com.softeem.pojo.People()"/><hr/><br>访问list集合长度:<s:property value="list.size()"/><br>访问list集合中对象的属性:<s:property value="list.get(0)"/>|<s:propertyvalue="list.{pname}[0]"/><br>访问set集合:<s:iterator value="set" var="dog"><s:property value="#dog.dname"/></s:iterator><br>访问map集合:<s:property value="map"/><br>获取map集合中所有的键:<s:property value="map.keys"/><br>获取map集合中所有的值:<s:property value="map.values"/><br>访问map集合中指定对象:<s:property value="map.get('来福')"/>|<s:propertyvalue="map[\"来福\"].dcolor"/><br><hr><br>获取值栈中的普通属性:<s:property value="dog"/><br>获取值栈中对象的属性:<s:property value=""/><br>调用对象中的普通方法:<s:property value="dog.p.getMsg()"/><br>访问action中的方法:<s:property value="show()"/><br>访问action中的静态方法:<s:property value="@com.softeem.action.OgnlAction@getMsg()"/><br/>Math类的中方法:<s:property value="@@max(6,7)"/><br>访问普通类中的构造器:<s:property value="new com.softeem.action.People()"/><hr/><br>访问list集合:<s:property value="list.size()"/><br>访问list集合中对象的属性:<s:property value="list.get(0)"/>|<s:property value="list.{name}[0]"/><br>访问set集合:<s:iterator value="set" var="dog"><s:property value="#"/></s:iterator><br>访问map集合:<s:property value="map"/><br>获取map集合中所有的键:<s:property value="map.keys"/><br>获取map集合中所有的值:<s:property value="map.values"/><br>访问map集合中指定对象:<s:property value="map.get('小黑')"/>|<s:property value="map[\"小黑\"].color"/><br><hr><br>投影(过滤):<br>取出age>18所有对象<s:property value="list.{?#this.age>18}"/><br>取出所有age>18的对象的第一个<s:property value="list.{^#this.age>18}"/><br>取出所有age>18的对象的最后一个<s:property value="list.{$#this.age>18}"/><br>取出所有名字为'来福'的狗<s:property value="list.{?#=='来福'}"/><br>取出值栈中的对象:<s:property value="[0]"/><s:debug></s:debug>4.拦截器自定义一个拦截器<interceptors><interceptorname="proInterceptor"class="com.softeem.intercepter.ProInterceptor" ></interceptor>配置拦截器栈<interceptor-stack name="myStack"><interceptor-ref name="proInterceptor"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors>拦截器和过滤器的区别:①过滤器在首次请求的时候就会执行,拦截器在任意时候都可以执行②过滤器对所有的请求(servlet/jsp)都会过滤,拦截器可以精确的拦截任何一个action<action name="testAction" class="com.softeem.action.TestAction"><result>/main.jsp</result>引入指定拦截器:配置其他拦截器之前,需要引入struts2提供的默认拦截器defaultStack,否则当前拦截器会将默认拦截器覆盖<interceptor-ref name="defaultStack"></interceptor-ref>自定义拦截器:使用自定义拦截器,需要现在当前包中配置拦截器<interceptor-ref name="myInterceptor"></interceptor-ref></action>创建拦截器的步骤:1:创建一个类实现Interceptor接口,实现三个方法(destory、init、intercept) 2:在struts.xml中进行配置,声明当前过滤器声明拦截器:当一个拦截器声明之后,可以被多个action使用<interceptors><interceptorname="interceptor01"class="com.softeem.type.intercept ors.MyInterceptor"></interceptor><interceptorname="interceptor02"class="com.softeem.type.intercept ors.MySecondInterceptor"></interceptor>我们可以将多个拦截器定义成一个“拦截器组”,可以通过引用这个拦截器组从而达到引用这个组中所有的拦截器的目的<interceptor-stack name="stack1"><interceptor-ref name="interceptor01"></interceptor-ref><interceptor-ref name="interceptor02"></interceptor-ref></interceptor-stack>我们同样可以将多个拦截器和已经存在“拦截器组”放在一起生成一个新的“拦截器组”<interceptor-stack name="stack2"><interceptor-ref name="stack1"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><action name="user" class="erAction"> <result name="index">/index.jsp</result>如果当前action没有手动的引用其他的拦截器,则默认引用了Struts2的defaultStack 拦截器一旦我们手动引用了拦截器,则defaultStack拦截器组就不被自动引用,我们需要手动引用拦截器的执行顺序和被引用的顺序一致<interceptor-ref name="stack2"></interceptor-ref></action>5.Action和result1,Struts2配置文件中的模块包含将另外一个xml配置文件作为struts.xml文件的一部分引入到struts.xml<include file="name.xml"/>意义在于项目开发时的并行开发(版本控制工具同步管理)2,struts2的默认Action:当用户访问的页面不存在的时候跳转到默认action页面访问index.actionstruts.xml配置文件<default-action-ref name="index"></default-action-ref><action name="index"><result>/error.jsp</result></action>3,Action总结:action类三种方式DMI动态调用方法!通配符配置*-*jsp页面值传递到action中的接收三种方式简单的参数验证访问web元素包含文件配置默认action处理4,struts.xml中的result的类型配置<result type=""></result>默认类型dispatcher,运用服务器跳转(视图页面)5,全局的result配置(GlobalResult)package标签下<global-results><result name=""></result></global-results>思考:如果一个package要使用另一个package中的result?6,结果集:result的类型(主要两种)全局结果集动态结果传递参数7,struts2的动态结果集在配置文件中:<result name="">${attrName}</result>$可以在配置文件中从action中取值在action添加attrName属性,并赋值8,带参数的结果集在rusult中使用$取到action中的值传递到action跳转的页面<result type="redirect">/xxx.jsp?abc=${attrName}</result>6.i18n国际化国际化的解释ResourceBandle实例Struts实例native2ascii 源文件名目标文件名properties级别问题action:文件名要和Action的类名一致package:名字必须是package_..._....propertiesapplication:名字可以随意,但是需要配置struts.custom.i18n.resoutces 处理资源文件中的参数 login.message=welcome:{0}<s:text value="login.message"><param value="username"></param></s:text>国际化语言动态切换request_locale=en_US/zh_CN<a href="language?request_locale=en_US">EN</a><a href="language?request_locale=zh_CN">CN</a>---------------------------------------------------------1,i18n的原理:根据参数不同的值,根据相同的key在不同的文件中取到不同的value2,实例运行3,properties文件的级别action级别:配置文件的前缀名必须和类名保持一致,只在访问这一个action的时候加载package级别:配置文件的前缀名必须是package,在访问当前包下面的action都会加载application:配置文件的前缀名没有要求,需要在struts.xml中进行配置,在服务器启动时加载4,使用国际化步骤:①创建全局的properties资源文件(注意命名)②在struts.xml中加载properties资源文件③在页面使7.Struts标签1,struts标签分为:通用标签控制标签UI标签(展现)2,通用标签:propertyproperty标签中的value属性默认是一个object<s:propertyvalue="username"/>表示根据在值栈中根据username取到一个对象显示property取值为字符串<s:property value="'哈哈'"/>表示直接显示一个"哈哈"字符串,直接显示的字符串要加上单引号property的默认值:<s:property value="admin" default="管理员"/>如果根据admin在值栈中取值没有取到,则显示默认值property设定HTML:<s:property value="'<hr/>'" escape="true"/> 如果没有加上escape="true",表示直接显示字符串set在request或者ActionContext中存入信息:<s:set var="user" value="Obj"/> 默认存放在request和ActionContext中,value值为对象从request中取值:<s:property value="#er"/>从ActionContext中取值:<s:property value="#user"/>默认取值空间为ActionContext范围的设置:<s:set name="key" value="password" scope="page"/>beanbean 定义bean,使用param来设定新的属性值<s:bean name="er" var="user1"><s:param name="username" value="'张三'"></s:param></s:bean>var表示新创建的对象的名字,如果没有var属性就不能在Context stack中找到s:param给新创建的对象属性赋值,注意valueinclude(解决中文问题很麻烦)包含静态文件:<s:include value="/test.jsp"></s:include>用%包含文件:<s:set var="incPage" value="'/test.jsp''}"/><s:include value="incPage"></s:include><s:include value="#incPage"></s:include><s:include value="%{#incPage}"></s:include>paramdebug3,控制标签:if elseif elseiteratorsubset(截取集合的一部分)4,UI标签:theme(主题)struts.xml中控制theme,默认为xhtml,可以设置为simple/css_htm/ajax <constant name="struts.ui.theme" value="css_htm"/>5,$#%的区别$用于i18n和struts的配置文件中#用于取ActionContext的值%将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用8.类型转换类的三种配置形式:actin级别:配置文件的名字:action-conversion.properties内部配置:ation对应的属性名=转换类的路径配置文件的存放位置:和action位置相同说明:当用户访问这个action中这个属性的时候才调用类型转换类pojo级别:配置文件的名字:pojo-conversion.properties配置文件的存放位置:和pojo的位置相同内部配置:pojo对应的属性名=类型转换类的路径说明:当用户访问任何action,只要提交了这个pojo中的这个属性的时候就会调用类型转换类src级别:配置文件的名字:xwork-conversion.properties配置文件的存放位置:直接存放在src下内部配置:属性类型(+包名)=类型转换类的路径说明:用户访问任何action,只要提交了对应类型的属性的时候就会调用类型转换类当我们转换类继承的是StrutsTypeConverter,需要重写两个方法:convertFromString(在用户向action提交数据的时候调用)convertToString,将指定类型的数据转换成String类型(在action向页面跳转的时候调用)struts2数据校验分为手工验证和自动验证手工验证:指的是在对应的action里面通过validate方法对这个action里面的属性进行校验validate方法是重写,它是在ValidateAble接口中定义的所以我们这个action要实现ValidateAble接口才能完成校验但是ActionSupport已经实现了ValidateAble接口,所以我们创建的action只要继承了ActionSupport,就可以重写validate自动验证:使用xwork里面提供的验证,通过配置文件对action的属性进行验证9.struts2中方法验证的三种形式1,采用注解annotation形式:在不需要验证的方法前加上@SkipValidation2,正对每一个需要验证的方法单独生成一个配置文件,例如在UserAction中有两个方法add()和delete()并且我们假设只对add()方法进行校验,配置如下:-----------------struts.xml------------------------------------- <!-- 需要对add()方法单独添加一个配置,并且要以这个action标签的那么属性“user_add”作为alias添加一个验证配置文件,如下: --><action name="user_add" class="erAction" method="add"><result>/success.jsp</result><result name="input">/index.jsp</result></action><!-- 配置这个action主要是为了让其他的请求能进入其他的方法 --><action name="user_*" class="erAction" method="{1}"><result>/success.jsp</result><result name="input">/index.jsp</result></action>---------------------------------------------------------------- 新创建一个validation.xml配置文件,命名为【UserAction-user_add-valication.xml】3,采用拦截器形式(验证框架的配置文件UserAction-validation.xml):即,给默认拦截器配置拦截参数,配置如下:<action name="user_*" class="erAction" method="{1}"><result>/success.jsp</result><result name="input">/index.jsp</result><interceptor-ref name="defaultStack"><param name="validation.excludeMethods">*</param><param name="validation.includeMethods">delete</param> </interceptor-ref></action>在<param name="validation.includeMethods"></param>标签里面写出需要验证的方法名字如果有多个方法,方法名以“,”隔开,例如要验证add和delete方法:<param name="validation.includeMethods">add,delete</param> 10.MVC思想及其优势MVC并不是Java语言所特有的设计思想,也并不是Web应用所特有的思想,它是所有面向对象程序设计语言都应该遵守的规范。

Struts2配置详解2 配置Action

Struts2配置详解2 配置Action

配置ActionStruts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。

该方法如下:public String execute() throws ExceptionStruts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:public String xxx()在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。

开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。

1.Action映射:action映射是Struts2框架中的基本”工作单元”,action映射就是将一个请求URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。

action元素的完整属性表例如:<action name="user" class="erAction"><result name="success">/user.jsp</result></action>2. 使用method属性在配置action时,我们可以通过action元素的method属性来指定action调用的方法,所指定的方法,必须遵循与execute方法相同的格式。

struts2

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Struts2基础知识
Struts2概述
1.Struts2框架应用javaee三层结构中的web层框架。

2.Struts2框架在struts1和webwork基础之上发展的全新框架。

3.Struts2所解决的问题:
在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。

图解:
4.现在比较稳定的Struts2版本
struts-2.3.24-all.zip
5.web层常见框架
1.struts
2.springMVC
Struts2框架入门
1.导入jar包
1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring
包,是不能使用的,导入会导致程序不能运行。

2.到app目录里面复制案例的jar包是最好的方法。

2.创建action
3.配置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标签中使用,如果有多个标签,
需要重新定义。

3、局部结果页面:指的就是在action标签里配置
1、配置方法:
在action标签下配置
2、注意:如果既配置了全局,又配置了局部,会以局部为准,全局不起
作用。

4、type属性
1、使用ActionContext类。

1、主要使用的方法:
因为该方法是对象方法,所以需要一个ActionContext对象来调用,而创建ActionContext对象可以使用该类的一个静态方法来创建
2、使用ServletActionContext类。

1、主要使用的方法:
3、使用接口注入方法(一般不用)。

Struts2笔记(二)
可使用全局页面。

1、配置方法:
在package标签下配置
2、注意:该标签只能在一个package标签中使用,如果有多个标签,
需要重新定义。

3、局部结果页面:指的就是在action标签里配置
1、配置方法:
在action标签下配置
2、注意:如果既配置了全局,又配置了局部,会以局部为准,全局不起
作用。

4、type属性
1、使用ActionContext类。

1、主要使用的方法:
因为该方法是对象方法,所以需要一个ActionContext对象来调用,而创建ActionContext对象可以使用该类的一个静态方法来创建
1、主要使用的方法:
3、使用接口注入方法(一般不用)。

Struts2笔记(三)
1、在lib文件夹中加入Ognl的jar包。

2、在jsp页面中引入Struts2标签库。

3、使用标签<s:property>,并给属性value设置值,比如求一个字符串
的长度案例。

3、获取值栈步骤:
1、获取ActionContext对象
2、调用ActionContext的静态方法getValueStack()
4、值栈的内部结构
1、第一部分 root,结构是list集合,底层继承自ArrayList集合。

2、第二部分 context,结构是Map集合,底层实现了Map接口。

Struts2笔记(四)
1、#号:使用#号获取context里面的数据。

使用时格式是#context的key名称.域对象名称,如#request.req。

2、%号:可以在Struts2标签中使用OGNL表达式。

1、概述:拦截器就是Struts2框架中封装的功能的容器。

在Struts2框架中有很多的功能,所有就有很多的拦截器,并不是每次都执行所有的拦截器,它只会执行一些默认的拦截器。

2、默认拦截器的位置
3、拦截器的执行时间
在action对象创建之后,action的方法执行之前。

4、拦截器的原理(两个原理)
1、AOP思想:即面向切面编程,当在基本的功能上扩展其它功能时,不
通过改源代码来实现扩展功能的方式。

2、责任链模式
1、概述:属于java设计模式中的一种,和过滤链原理相似。

2、过滤链:一个请求可以有多个过滤器进行过滤,只有每个过滤器
执行放行操作,该请求才能到下一个过滤器。

3、AOP原理和责任链模式如何应用到拦截器中
1、在action中并没有执行拦截器的方法,而是用配置文件实现的,
这种方法就是使用的AOP思想。

2、在执行拦截器的过程中,只有每个拦截器执行放行操作后,才能
进入到下一个拦截器,这种方法就是责任链模式。

1、拦截器的结构
继承类
在接口内的三个抽象方法
2、自定义拦截器方法
2、通过配置文件的方式让拦截器和action产生关系
1、在要拦截的action标签所在的package标签里声明拦截器
2、在具体的action标签里面使用声明的拦截器
3、Struts2里面执行很多默认的拦截器,但是如果在action里面配
置了自定义拦截器,默认的拦截器就不会执行了,所以要解决。

即把默认的拦截器再配置一次
注意:这样配置拦截器,对action里面的所有方法都会进行拦截。

3、配置拦截器对某些方法不进行拦截。

相关文档
最新文档