文档库 最新最全的文档下载
当前位置:文档库 › struts2学习心得

struts2学习心得

struts2学习心得
struts2学习心得

一.

配置问题:

最新的struts2为GA版2.2.1

其中必须类库为https://www.wendangku.net/doc/7414377105.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.wendangku.net/doc/7414377105.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配置

student{1}_success.jsp

意思就是说凡是带url为/actions/Student,后缀无论是什么的都可以访问,但是method=“{1}”说明其方法为你之前*所代表的那个.当你返回success时就调用student{1}_success.jsp

比如:你访问http://……./actions/Student Add,那他就调用的方法是Add

成功之后(返回success)访问student Add_success.jsp

看第二个action配置

/{1}_{2}_success.jsp

这又是什么意思呢?

就是说凡是带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.wendangku.net/doc/7414377105.html,=aa&user.age=10解释一下,add?之前的和前面的一样,https://www.wendangku.net/doc/7414377105.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(如

下面所述)中的r的值。

Value stack栈中的值:

每一个动作在执行相应方法之前,都会创建一个value stack的对象。value stack 用来保存这个动作对象和其他对象。

可以使用el表达式和Struts2标签进行对值栈的访问:

使用Struts2标签,需要引入标签库:

<%@taglib prefix="s"uri="/struts-tags"%>

${https://www.wendangku.net/doc/7414377105.html,[0]}


Action中进行简单的数据校验:

package actions;

import com.opensymphony.xwork2.ActionSupport;

import https://www.wendangku.net/doc/7414377105.html,er;

public class UserAction extends ActionSupport {

private User user;

public User getUser() {

return user;

}

public void setUser(User user) {

https://www.wendangku.net/doc/7414377105.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表达式访问.

/hello.jsp value="true"表示是开发模式,当修改了配置时服务器会自动加载修改后的配置,不需要中期服务器,方便开发。 (3)namespace="/"与浏览器的访问地址有关,namespace的默认值为空。 (4)/hello.jsp action的name值与浏览器的访 问地址有关,当地址是“http://…/hello”时,浏览器就会返回result中的hello.jsp 的页面。 2.配置web.xml (1)配置web.xml也可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的web.xml文件 (2)主要配置如下: struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* 3.配置Struts2的jar包 (1)复制下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的参考项目的 WEB-INF\lib文件夹下的所有的jar包到我们自己项目的WEB-INF\lib文件夹下即可。 Struts.xml的配置 1.package的属性与配置 (1)package的使用说明:类似于Java程序里的package,主要用于区分同名的action。在真 正的项目开发中package通常来区分不同的模块。例如: (2)name属性:用于区分不同的package,此属性不能省略不写。 (3)extends属性:用于继承其他的package,继承了某个package就包含了某个package里 的所有配置,此属性可以省略不写,默认继承struts-default。 (4)namespace属性:表示浏览器访问的路径,此属性可以省略不写,默认为空,当此属性 为空时,该package里的action可以匹配浏览的任何请求的action。 (5)abstract属性:此属性的值为false表示此package非抽象的,若为true表示此package

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 数据库设计 相关的映射文件: 一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。 2.系统实现与测试 2.1 系统采用的关键技术 MVC 框架采用了Struts2框架,Struts2框架的易用性,极好的简化了系统的MVC 层的实现;本系统使用了Struts2的JSON 插件来完成Ajax 功能,除此之外本系统为了避免进行底层的Ajax 交互,还是用了一个简单Prototype.js 函数库,用以简化Ajax 编程。Struts2框架的稳定性,为系统的稳定运行提供了保证。

JavaEE课堂笔记f

1.Struts2在jsp页面中使用标签实现对集合的迭代,其中var属性表示要迭代的集合对象。标签实现下拉列表的功能,其中listKey属性表示其生成的HTML代码option 标签的value,listValue属性表示用作字面显示的值。标签会定义一个新的Bean,而scope属性指定将这个Bean放到相应的作用域。 2.MVC设计模式包括Model(模型)、View(视图)和Controller(控制器)三个层。Model 层一般是指Java Bean,View层一般是用jsp页面实现,Controller是控制跳转的,一般用Servlet 或相似功能的组件实现。而Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter过滤器。 3.Hibernate配置文件中包括了数据库连接信息、数据库方言、其他属性等信息,不包括数据库表和实体类的ORM信息。在众多属性中,show_sql属性可以设置是否在控制台显示最终生成的SQL语句。 4.Struts2全局国际化,在创建资源文件后需要在struts.xml配置文件中添加对这些资源文件基本名的引用。 5.Spring的面向方面编程可以让我们将程序中涉及的分散的公用问题集中解决。 6.Http协议是一种无状态的协议,它不能记录用户的状态。我们可以通过get和post方法发送数据,其中get方法对请求参数有长度的限制,而post方法没有。 7.j sp中的EL可以访问JavaBean中存储的数据,EL表达式包括requestScope、sessionScope、applicationScope、param、pageContext等隐式对象。在Struts2中,EL表达式可以直接访问Action Bean中属性的值。 8.HQL和SQL语法相似,但HQL是面向对象的,而SQL是面向关系型数据库的。HQL的关键字不区别大小写,而语句中的实体类名、对象名、属性名等都是区别大小写的,这一点和Java语言类似。 9.Servlet在加载后的生命周期分为实例化、初始化、服务和销毁四个过程。 10.JSP的标准动作能实现页面转发的功能。 11.Servlet中的PrintWriter对象可以输出信息,该类型的对象可以通过response.getWriter()方法取得。 12.DWR一个能帮助我们简化Ajax开发的开源框架,在使用时,需要在dwr.xml配置文件中为JavaScript脚本暴露相应的Java类。 13.在struts.xml配置文件中标签用于配置要转向的下一个目标页面。 14.Hibernate将JDBC作了轻量级封装,使得Java程序员可以随心所欲的使用面向对象的编程思想来操纵数据库,但其本质上还是使用JDBC去和数据库进行交互。 15.SSH是JavaEE开发的经典搭配,Spring框架可以对其他框架进行整合,持久化层更可以有多种选择,除了Hibernate外,像MyBatis这样的开源框架也很受欢迎。 16在软件设计上Struts2没有跟Servlet API或struts有着紧密的耦合,因此在Struts2中可以不必使用Servlet API所提供的类和接口,但如果要使用,也可以通过多种方式实现(ServletActionContext类或实现相应接口)。同时Struts2的Action类也不用必须继承或实现struts框架提供的任何类或接口。 17Servlet API中,HttpServletResponse接口的sendRedirect()方法可以将浏览器重定向到另一个URL。而HttpServletRequest接口的getSession()方法可以取得本次会话的HttpSession类型的对象,HttpServletRequest接口的getParameter()方法可以获取客户端请求参数的数据。18依赖注入(DI)是一种开发模式,可以解除或减轻各组件之间相互依赖,相互制约的关系。

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) 四、标签 (6) 五、Action (6) 六、路径问题的说明 (8) 七、Action的动态调用方法 (8) 八、Action通配符(wildcard)的配置 (9) 九、Action的属性接收参数 (10) 1、在Action添加成员属性接受参数 (10) 2、域模型(Domain Model) (10) 3、ModelDriven接收参数 (11) 十、Action属性接收参数中文问题 (12) 十一、简单数据验证 (12) 十二、访问Web元素 (14) 一、方法一:ActionContext方式 (15) 二、方式二:Ioc(控制反转)—推荐使用 (15) 三、方式三:获取原类型 (16) 四、方式四:获取原类型-控制反转 (17) 十三、Struts2配置文件模块化包含(include) (17) 十四、默认的Action (18) 十五、Action总结 (18) 02 Struts2-Result (19) 一、Result类型 (type) (19) 二、全局结果集(Globle Result) (20) 三、动态的结果集(dynamic result) (21) 四、带参数的结果集 (21) 五、Result总结 (22) 六、项目经理: (22) 03 OGNL表达式语言 (23) 04 Struts2-Tags (28) Struts2标签目录 (28) 一、property标签 (28) 二、set标签 (29) 三、bean标签 (29) 四、标签-少使用 (29) 五、If elseif else (30) 六、Iterator标签 (31) 七、Theme (31) 05设计约定(编码规定) (32) 06 项目开发顺序 (32) 07 声明式异常处理 (33) 08 国际化 (35)

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):显示信息 3):逻辑标签 struts-config.xml

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:采用标签查看值栈结构图:

相关文档