struts2学习心得
一.
配置问题:
最新的struts2为GA版2.2.1
其中必须类库为https://www.360docs.net/doc/7614377105.html,mons-fileupload-1.2.1.jar
2. commons-io-1.
3.2.jar
3. freemarker-2.3.16.jar
4. javassist-3.7.ga.jar
5. ognl-3.0.jar
6. struts2-core-2.2.1.jar
7. xwork-core-2.2.1.jar
之前的版本使用ognl时不需要javassist这个类库现在这个版本则需要。。
二.
EL表达式(JSP EL)
目的是为了使JSP写起来更加简单。
A、语法结构
${expression}
B、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${user.My-Name}应当改为${user["My-Name"] }
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:${https://www.360docs.net/doc/7614377105.html,er[data]}中data 是一个变量
C、变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
D、特别强调:
1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。例如:即使现有的pageContext 属性包含某些其他值,${pageContext} 也返回PageContext 对象。
2、注意<%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE 表示不禁止.JSP2.0中默认的启用EL语言。
3、在web中用EL表达式时${name}其意思是调用其getName方法,而不是name这个属性
例如:
public class HelloWordAction{
private String msg;
public String getMessage{
return msg;
}
}
在jsp中使用${message} 就是返回msg的值。经实验证明了的
三.
Struts2是在webwork2的基础上发展而来的。和struts1一样也是mvc框架。但是虽然他们名字一样但是原理差异很大。Struts2之所以会产生是因为有以下几个优点:
1.在软件设计方面struts2没有像struts1那样和servlet API和struts API那样紧密的耦合。
Struts2可以不依赖它们。Struts2属于无侵入式设计。而struts1属于侵入式设计。
Public class HelloWordAction extends Action{
Public ActionForward execute(ActionMapping mapping ActionForm form HttpRequest request HttpResponse response)throws Exception{
。。。。
}
}
而struts2则不需要,只需自己定义就好。
2.Struts2不需要注意线程同步的问题,而struts1则面临这个问题,因为struts1对action 创建的时候只创建一次,当多个用户同时访问这个action时,则必须出现这个同步的问题。而对struts2来说,需要action时都要重新new出一个对象。
四.
Namespace决定了action的访问路径,默认为“”,可以接受所有路径的action。Namespace 后面可以加/也可以加/xx或者/xx/yy,则action的访问的路径就相对于/index.action,/xx/index.action或者/xx/yy/index.action
Package顾名思义为“包”可以把你的action包裹进来,然后在里面定义自己的action
可以定义N个包,但是包和包之间的名字不能重复,包里面的action可以和别的包的重复。3.
Action的几个属性:
1.Name:
2.Method:默认为自动的Actionsupport 里面有个方法execute()方法返回suceess字符串。所以result的默认值为success。但是注意:并不是一定要执行execute()方法,而是根据Method方法指定的来说,也可以在地址中动态指定(动态方法调用DMI(动向指标或趋向指标))推荐使用
(开发action一般继承Actionsupport重写execute()方法。。。(企业开发只用这种)
当然还有其他两个方法自己写个execute()方法,或者继承Action接口重写execute()方法)
3.Class:自己开发写的action路径。
五.
路径问题:一般用绝对路径
因为struts2的路径问题是根据action的路径而不是jsp路径来确定的
六.
通配符(WildCard)*
一定要遵守“约定优于配置”的原则:就是说什么东西你必须符合一定的标准,在这个基础上在进行优化配置。。。。。
看第一个action配置 意思就是说凡是带url为/actions/Student,后缀无论是什么的都可以访问,但是method=“{1}”说明其方法为你之前*所代表的那个.当你返回success时就调用student{1}_success.jsp 比如:你访问http://……./actions/Student Add,那他就调用的方法是Add 成功之后(返回success)访问student Add_success.jsp 看第二个action配置 这又是什么意思呢? 就是说凡是带url为/actions/*_*的,无论两个*星号代表什么都可以访问,但是method=“{2}”说明其访问的方法为第一个*所代表的那个类中的第二个*所代表的方法 比如:你访问http://....../actions/Student_Add,,那他就调用Student Action中的Add方法 成功之后就访问Student_Add_success.jsp 这就是通配符的具体意思 七. Action参数的传递方式: 1.直接在地址栏上传递(url) http://localhost:8080/project-name/namespace/action-name!add?name=a&age=10 就是给action中的两个属性name和age 分别传值a和10 2.用DomainModel方式传递 1.当需要的参数过多时,创建一个域模型DomainModel也就是(javabean) 注意的是:这个DomainModel要有不含参数(参数为空)的构造方法,而且想让他自己new出对象的会必须要传参数值 比如 http://localhost:8080/project-name/namespace/action-name!add?https://www.360docs.net/doc/7614377105.html,=aa&user.age=10解释一下,add?之前的和前面的一样,https://www.360docs.net/doc/7614377105.html,和user.age是指把数据传给user这个对象的name和age属性 因为在action中我们不定义属性而是直接定义一个User类型的对象 Private User user;并有getUser()方法和setUser()方法 而这个User就是我们说的DomainModel,他定义了两个属性name和age并有getter和setter方法,方便我们送值和取值。(相当于一个javabean) 2.当传入的值的个数和DomainModel的属性个数不一致的情况下,再用DTO(Data Transfer Object(数据传输对象)) 举个例子说明一下: 如果用户注册的时候肯定有用户名,密码和验证密码。但是你定义一个User的时候只 能有两个属性username和password,那这种情况下怎么办呢?我传的第三个值传给谁呢?所以要再建一个DTO(其实也是一个java类)UserDTO Private String username; Private String password;Private String confirmPassword; 生成getter和setter方法,然后通过这个再定义User的DomainModel Private String username; Private String password;写出getter方法和setter方法 注意:要写一个带UserDTO参数的User构造方法, Public User(UserDTO userDTO){}目的是为了把得到的UserDTO属性传给User对象! 接受参数的时候注意,一定要把得到的值放到User对象里,即调用setter方法 User.setName(userDTO.getName()); 用url传参数时要传给userDTO 3.用ModelDriven方式传递参数 ModelDriven是一个接口(不大常用)。 八. 配置struts2的属性有三种方法: 1.写一个struts2。Properties文件来管理属性。一般放在项目的WEBINF/classes下。 采用的key-value对。每个key就是struts2的属性,每个value就是这个struts2的属性值。 2.在struts2的配置文件struts.xml配置常量 在里面加入 Name为属性,value为属性值 3.在web.xml文件中配置filter时也可以配置属性 上述文件的加载顺序为:struts.xml struts.properties web.xml 意思就是说如果重复的属性则按最后那个文件配置的算起。 九. Action的总结: 1.实现action的方法有三种,一般继承Actionsupport类 2.DMI动态方法调用 3.通配符配置 4.接受参数的方法,一般用属性或者DomainModel来接受 5.简单参数的验证addFilterError a)一般不使用struts2的UI标签 6.访问web元素 a)Map类型 1.LoC 2.依赖struts2 b) 1.LoC 2.依赖struts2 7.包含文件配置 8.默认action处理 十. 1.常用的四种类型 A)dispatcher(默认) B)redirect C)chain D)redirectAction 2.全局结果集 A)global-results|extends 3.动态结果(了解) A)在action中保存一个属性,存储具体的结果location 下面所述)中的r的值。 Value stack栈中的值: 每一个动作在执行相应方法之前,都会创建一个value stack的对象。value stack 用来保存这个动作对象和其他对象。 可以使用el表达式和Struts2标签进行对值栈的访问: 使用Struts2标签,需要引入标签库: <%@taglib prefix="s"uri="/struts-tags"%>
${https://www.360docs.net/doc/7614377105.html,[0]}
Action中进行简单的数据校验:
package actions;
import com.opensymphony.xwork2.ActionSupport;
import https://www.360docs.net/doc/7614377105.html,er;
public class UserAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
https://www.360docs.net/doc/7614377105.html,er = user;
}
public String add(){
System.out.println("name="+user.getName());
System.out.println("admin".equals(user.getName()));
if("admin".equals(user.getName())){
return SUCCESS;
}else{
this.addFieldError("name", "该用户不存在!");//添加一个属性错误.
return"error";
}
}
}
提交地址:
点击Debug链接.下面的图片中灰色背景的将显示出来, 还有很多. 抓图没办法全部抓下来.
可以发现,在值栈中,都是以Map形式存储的值,actionErrors存储的是action的错
误.fieldErrors存储的属性错误.errors包含这两者.
看下面的Stack Context.顾名思义,栈的上下文环境.
访问的时候,通过#key来访问.如下:假设reques中有名为obj属性的值.使用OGNL表达式访问.
strusts2课堂总结
一、 1、struts2 struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性 2、struts2和struts1的区别 struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。 struts2的action是原型,安全的,struts2的action是单例,非安全 3、步骤: 1、导入包 2、在web.xml文件中,加入struts2的核心拦截器 3、在src下放入struts2的xml struts.xml 4、url http://localhost:8080/Struts2_01_HelloWorld/demo/hello.action 二、 1、默认值 2、转发和重定向的区别 转发:url显示的依然是上一个的url,共享上一次的请求 重定向:url显示的是下一个的url,不共享 3、url http://localhost:8080/Struts2_02_Default/demo/hello.action 4、路径 http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action 1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action 2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action 3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action 3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action 三、 11、自定义action
Struts2+Hibernate开发笔记
Struts2 + Hibernate开发笔记(一) 由于开发任务紧张,因为这里的开发笔记,仅用于记录遇到的几个struts2和hibernate结合开发的现象.不对其做分析. 1. 在使用struts2时,页面和action之间的传值 这是struts2和struts1最大的区别. Struts2中,action和jsp页面之间的信息交互,是通过action中定义的成员变量来实现的. 例如,我在一个名为EstateAction的类中有如下定义 public class CityAction extends BaseAction { private MthCity mthCity ; private String cityName; private Long cityId private int couter; public String loadCity() throws DataAccessException, BaseException{ counter ++; return "city"; } } 然后,这里上面的类中的成员类MthCity的定义如下 public class MthCity implements java.io.Serializable { private Long cityId private String cityName; public MthCity() { public Long getCityId() { return this.cityId; } public void setCityId(Long cityId) { this.cityId = cityId; public String getCityName() { return this.cityName; } public void setCityName(String cityName) { this.cityName = cityName; } } 这是一个Hibatenate使用的数据对象POJO类. 有了这两个类后,我们来看看Struts2的Action和JSP页面之间是如何交互的 一. JSP -> Action Jsp页面 以下是一个jsp页面submit.jsp.这个页面只有一个功能,就是向struts提交申请 <%@ page language="java" contentType="text/html; charset=gbk"%> <%@ include file="/common/taglibs.jsp"%>
struts2 实验报告
1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程
1.3 数据库设计 相关的映射文件:
JavaEE课堂笔记f
1.Struts2在jsp页面中使用
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学习笔记
目录 01 Struts2-Action (5) 一、Struts作用: (5) 二、搭建Struts2的运行环境: (5) 三、Namespace (6) 四、
java 问题汇总(总结,重点)
在用到spring框架中时,场景如下 post 请求过去,对象接收不到参数的值(解决办法:考虑到在参数上加个@RequestBody 注解即可,有些没加的是框架帮忙处理了后默认接收的是json串) http://localhost:8080/xxxxxxxxxxx-xxxxxxx-api/xxxxxx/xxxxx/xxxxxxxxx/sugges t/add.sgt ================================================== ==================================== mapper.xml->@Repository{存储数据层}->@Service{业务层}->@Controller{展示层} (spring注解可以理解为这样的线性,任其项目结构怎么变这样的线性结构是不会变的,万变不 离其宗) @Repository @Service @Controller均是注册在spring上下文中 @Autowired 在spring上下文中找bean @Qualifier 配合@Autowired使用当找到多个同一类型的bean,则会抛异常,此时可以使用@Qualifier("beanName"),明确指定bean的名称进行注入 @RequestMapping 配置连接 @Required 注册在sett方法上,检查有没有被调用 @RequestParam 绑定参数 @RequestBody读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上
MyEclipse开发Struts2过程
MyEclipse开发Struts2过程 Struts2是Struts1.x的升级换代产品,但是并没有继承Struts1.x的思想和操作模式,而是一个完全不同的实现方式,所以即使学会了Struts1.x还是得从头学习Struts2,但是当你学会了Struts2后会发现这个产品对编程及配置有了很大的简化,使得程序员将更多的精力集中到业务逻辑编程方面,下面就在MyEclipse8.5M1平台下如何开发基于Struts2的Web应用系统的MVC模式中的VC部分作以简要的描述,M部分还是可以采用其他框架实现,例如Spring+Hibernate等。 (一)创建基于Struts2的Web项目 从MyEclipse的菜单中一次选择File\New\Web Project,在弹窗中填写该项目的名称信息,并且选择J2EE的版本,如图:
(二)添加Struts2支持 将鼠标定位到Package Explorer视窗的该项目名称上,单击右键,在弹出的菜单上依次选择MyEclipse\Add Struts Capabilities,在弹窗中选择Struts的版本为Struts2.x,单击“Next”按钮进入下一个窗口,选择要加入的支持类库,库的选择视项目需求而定,可以在后续开发过程中陆续加入,这里只选择Struts2 Core Libraries。完成这些操作后发现系统在src目录下添加了一个配置文件struts.xml,这个文件就是Struts2的核心配置文件,后续的操作都在此文件中进行。 (三)编写JSP页面代码 这里注意尽量使用Struts2的标签来编写JSP代码,所以要在页面代码开始部分引入标签库,即添加该行代码<%@ taglib prefix="html" uri="/struts-tags"%>,MyEclipse8.5M1目前还不支持基于Struts2的JSP模板,所以在新建JSP页面代码的时候,先选择基于Struts1.x模板,然后再手动修改,也就是把该页面代码中
Struts2知识点总结
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面试题(自己总结)
Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,
包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。
Struts2_day03笔记
Struts2_day03 前一天内容 1 在action获取表单提交数据 (1)使用ActionContext类获取 (2)使用ServletActionContext类获取 (3)接口注入 2 结果配置 (1)全局结果页面和局部结果页面 (2)result标签type属性 - type属性值: -- 默认值是dispatcher做转发 -- redirect做重定向 -- chain转发到action -- redirectAction重定向到action 3 struts2提供获取表单数据方式 (1)属性封装 (2)模型驱动封装 (3)表达式封装 4 struts2获取数据封装到集合中 5 使用模型驱动和属性封装注意问题: (1)不能同时使用对同一个表单进行数据操作 6 表达式封装和模型驱动比较 (1)相同点:可以把数据封装到实体类对象里面 (2)不同的:表达式封装可以封装到多个实体类对象里面今天内容 1 ognl概述 2 ognl入门案例 3 什么是值栈 (1)servlet和action区别
(2)值栈存储位置 - 每个action对象里面有一个值栈对象 - 值栈对象里面有action引用 4 如何获取值栈对象 5 值栈内部结构 (1)root:list集合 (2)context:map集合 6 向值栈放数据 (1)s:debug标签 (2)向值栈放字符串 (3)向值栈放对象 (4)向值栈放list集合 - set方法 - push方法 - 定义变量,get方法 7 从值栈获取数据 (1)从值栈获取字符串 (2)从值栈获取对象 (3)从值栈获取list集合 - s:iterator标签使用 8 EL表达式获取值栈数据 (1)增强request里面getAttribute方法 9 ognl表达式#、%使用 OGNL概述 1 之前web阶段,学习过EL表达式,EL表达式在jsp中获取域对象里面的值 2 OGNL是一种表达式,这个表达式功能更加强大, (1)在struts2里面操作值栈数据 (2)一般把ognl在struts2操作:和struts2标签一起使用操作值栈 3 OGNL不是struts2的一部分,单独的项目,经常和struts2一起使用 (1)使用ognl时候首先导入jar包,struts2提供jar包
Struts1学习笔记总结
Struts1 (1) Struts1和Servlet的关系 (1) 创建第一个Struts1项目 (1) 例子1: (3) 总结重点:struts1的工作流程(基于MVC模式的) (7) 一.普通的Servlet的工作流程 (7) 二.Structs1的工作流程(和上面的对比记忆) (8) Struts标签 (9) Bean标签 (9) html标签 (10) logic标签(逻辑标记) (12) i18n(国际化) (13) Struts1 Struts1和Servlet的关系 Jsp+Servlet+Javabean ActionForm和VO的区别: 一样的内容,不一样的作用 ActionForm只接收前台表单传来的数据 VO是conga后台提取的数据向前台传递 创建第一个Struts1项目 新建一个web项目,选择1.4即可 右键----MyEclipse----Add Struts Capacity
---------------Struts控制文件的路径 TLD(标签) 1) 2)
struts2_day03笔记
Struts2 框架第三天 今天重点内容安排: 第一天:struts2 开发流程、访问Action,Action方法调用,结果集类型 第二天:获取请求参数,请求数据校验机制,拦截器 1、V alueStack 值栈的存储原理和相关操作 2、Ognl 表达式语言语法 3、struts2 页面控制标签 4、struts2 form表单相关标签 重点难点:值栈和Ognl 1.值栈和Ognl表达式 1.1.什么是Ognl Ognl 对象导航图语言Object Graphic Navigation Language,类似EL,比EL ${}语法要强大很多,Struts2框架使用OGNL作为默认的表达式语言必须要引入struts标签库 EL Expression Language 表达式语言,用来获取JSP页面四个域范围数据 pageContext、request、session、application )
Ognl 主要用法: 1、访问OGNL上下文值栈对象获取数据(最重要) 2、操作集合对象(结合struts2 标签库使用)---- 生成checkbox 、生成select 1.2.什么是值栈ValueStack接口! 值栈ValueStack 实际上是一个接口,struts2 Ognl使用都是基于值栈完成的 Struts2 内部提供OgnlValueStack的接口实现类,实现了值栈接口! 前端控制器每一次请求都会创建一个值栈对象源码:
一次请求对应一个值栈对象值栈生命周期= request 生命周期的!! 值栈是struts2 一个数据结构,贯穿整个Action实例生命周期(request生命周期),一次请求对应一个Action实例,一个Action实例对应一个值栈实例 值栈保存了Action 和其它常用web对象的引用,通过值栈,间接操作这些对象!1.3.值栈的存储结构 1:采用标签