文档库 最新最全的文档下载
当前位置:文档库 › STRUTS2

STRUTS2

STRUTS2
STRUTS2

Struts 笔试题

1.选择题:

1. struts的控制器组件有以下哪几个(BC)

a. AcionFrom

b.ActionServlet

c.Action d .ActionForward

2.Struts 有哪些主要配置文件(AB)

a. we

b.xml b. struts-config.xml

c.validation.xml

d.validator-rul

e.xml

3.Struts 有哪些常用标签库(ABC)

a. html标签库

b.bean标签库

c. logic标签库

d. c标签库

4.ActionForm中的validate()方法起作用,要配置Action中的哪个属性(D)

a. path

b. input

c. type

d.validate

5.ActionForm 中的name属性要与Action 中的哪个属性对应(D)

a.path

b.input

c.type

https://www.wendangku.net/doc/1a17815798.html,

6.ActionForm 的生命周期是在什么范围(BC)

a.page

b.request

c.session

d.application

7.在struts中一般用哪一个类解析 xml文件(D)

a. Action

b.ActionForWard

c.SwitchAction

d.Digester

8用于多模块转发的内部类是(A)

a.ForwardAction

b.IncludeAction

c.DispatchAction

d.SwitchAction

9.struts中的中文转换通常扩展RequestProcessor类中的哪个方法(A)

a. processPreprocess()

b.processPopulate()

c.processMapping()

d.processLocale()

10.ActionForm中的reset()方法在什么时候必须将其属性恢复为原值(C)

a. 在调用validate()方法的时候。

b. 在ActionForm的生命周期在request范围的时候。

c. 在ActionForm的生命周期在session范围的时候。

d. 在ActionForm的生命周期在application范围的时候。

11.MVC中的C 指的什么(B)

a.视图层

b.控制层

c.模型层

d.持久化层

12.Struts对国际化支持主要用到的元素是(A)

a.message-resources

b.data-source

c.ActionMessage

d.ActionMessages

13.标签中的bundle 属性对应哪个元素的key 值(B)

a.data-source

b.message-resources

c. action

d.from-beans

14.动态ActionForm 中的type属性必须是(B)

a.ActionForm

b.DynaActionForm

c.ActionMapping

d.ActionForward

15.动态ActionForm与Validator框架结合时type属性是(CD)

a.ActionForm

b.DynaActionForm

c.DynaValidatorForm

d.DynaValidatorActionForm

16.在jBuider用到Validator框架必须需要我们配置的是(D)

a.we

b.xml b.struts-config.xml

c.validator-rule.xml

d.validation.xml

17扩展RequestProcessor时必须要配置哪个元素(D)

a.data-source

b.message-resources c global-forwards d.controller

18.Form表单中的action属性值必须与action元素中的哪个属性对应(D)

a.input

https://www.wendangku.net/doc/1a17815798.html,

c.type

d.path

19.action元素的哪几个属性是相互排斥的(ABC)

a.type

b.forward c .include d.input

20业务对象分哪几种(ABD)

a. 实体业务对象

b. 过程业务对象

c.会话业务对象

d.事件业务对象

21.与表单紧密结合的是哪一类标签(B)

a.html基本标签

b.html表单标签

c.html文件上传标签

d.html显示消息标签

22.用于输出javaBean 的标签(B)

a.

b.

c.

d.

23.用于输出Resource Bundle 的正常消息的标签(B)

a.

b.

c.

d.

24.用于上传文件的标签(D)

a.

b.

c.

d.

25.用于循环遍历的标签(C)

a.

b.

c.

d.

26.用于比较运算的标标签(CD)

a.

b.

c.

d.

27.用于生成普通元素的标签(B)

a.

b.

c.

d.

28.用于生成隐藏字段的标签(C)

a. b c. d.

29.的 forward属性对应struts 的哪个元素(C)

a.message-resources

b.actionmapping

c.global-forward

d.data-sources

30.哪个标签与具有相同的功能(D)

a.

b. c d.

2.简答题:

1.简述MVC三层结构。

2.简述struts的基本工作流程。

3. Stuts上传文件的注意事项。

4.简要写出建立一个动态ActionForm的Struts配置(要求属性不5.能少于两个)。

3.上机题:

用struts实现一个留言板的增、删、改、查功能(要求必须有三层实现机制)。

答案:

一、1.bc2.ab3.abc4.d5.d6.bc7.d8.d9。a10。c11。b12。a13。b14。b15。cd16。d17。d18。d19。abc20。abd21。b22。b23。b24。d25。c26。cd27。b28。c29。c30。d

简述 Struts2 的工作流程:

①. 请求发送给 StrutsPrepareAndExecuteFilter

②. StrutsPrepareAndExecuteFilter 判定该请求是否是一个 Struts2

请求

③. 若该请求是一个 Struts2 请求,则

StrutsPrepareAndExecuteFilter 把请求的处理交给 ActionProxy

④. ActionProxy 创建一个 ActionInvocation 的实例,并进行初始化

⑤. ActionInvocation 实例在调用 Action 的过程前后,涉及到相关拦

截器(Intercepter)的调用。

⑥. Action 执行完毕,ActionInvocation 负责根据 struts.xml 中的配置找到对应的返回结果。调用结果的 execute 方法,渲染结果。

⑦. 执行各个拦截器 invocation.invoke() 之后的代码

⑧. 把结果发送到客户端

2. Struts2 拦截器和过滤器的区别:

①、过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器。

②、Struts2 拦截器只能对 Action 请求起作用,而过滤器则可以对几乎所有请求起作用。

③、拦截器可以访问 Action 上下文(ActionContext)、值栈里的对象(ValueStack),而过滤器不能.

④、在 Action 的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

3. 为什么要使用 Struts2 & Struts2 的优点:

①. 基于 MVC 架构,框架结构清晰。

②. 使用 OGNL: OGNL 可以快捷的访问值栈中的数据、调用值栈中对象的方法

③. 拦截器: Struts2 的拦截器是一个 Action 级别的 AOP, Struts2 中的许多特性都是通过拦截器来实现的, 例如异常处理,文件上传,验证等。拦截器是可配置与重用的

④. 多种表现层技术. 如:JSP、FreeMarker、Velocity 等

4. Struts2 如何访问 HttpServletRequest、HttpSession、ServletContext 三个域对象 ?

①. 与 Servlet API 解耦的访问方式

> 通过 ActionContext 访问域对象对应的 Map 对象

> 通过实现 Aware 接口使 Struts2 注入对应的 Map 对象

②. 与 Servlet API 耦合的访问方式

> 通过 ServletActionContext 直接获取 Servlet API 对象

> 通过实现 ServletXxxAware 接口的方式使 Struts2 注入对应的对象

5. Struts2 中的默认包 struts-default 有什么作用?

①. struts-default 包是 struts2 内置的,它定义了 struts2 内部的众多拦截器和 Result 类型,而 Struts2 很多核心的功能都是通过这些内置的拦截器实现,如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了 struts-default包才能使用struts2为我们提供的这些功能。

②.struts-default 包是在 struts-default.xml 中定义,

struts-default.xml 也是 Struts2 默认配置文件。Struts2 每次都会自动加载 struts-default.xml文件。

③. 通常每个包都应该继承 struts-default 包。

6. 说出 struts2 中至少 5 个的默认拦截器

exception;fileUpload;i18n;modelDriven;params;prepare;token;tokenSession;validation 等

7. 谈谈 ValueStack:

①. ValueStack 贯穿整个 Action 的生命周期,保存在 request 域中,所以 ValueStack 和 request 的生命周期一样. 当 Struts2 接受一个

请求时,会迅速创建 ActionContext,ValueStack,Action. 然后把Action 存放进 ValueStack,所以 Action 的实例变量可以被 OGNL 访问。请求来的时候,Action、ValueStack 的生命开始;请求结束,Action、ValueStack的生命结束

②. 值栈是多实例的,因为Action 是多例的(和 Servlet 不一样,Servelt 是单例的),而每个 Action 都有一个对应的值栈,Action 对象默认保存在栈顶;

③. ValueStack 本质上就是一个 ArrayList(查看源代码得到);

④. 使用 OGNL 访问值栈的内容时,不需要#号,而访问 request、session、application、attr 时,需要加#号;

⑤. Struts2 重写了 request 的 getAttribute 方法,所以可以使用 EL 直接访问值栈中的内容

8. ActionContext、ServletContext、pageContext的区别?

①. ActionContext Struts2 的 API:是当前的 Action 的上下文环境

②. ServletContext 和 PageContext 是 Servlet 的 API

9. Struts2 有哪几种结果类型 ?

参看 struts-default.xml 中的相关配置:dispatcher、chain、redirect 等.

10. 拦截器的生命周期与工作过程 ?

每个拦截器都是需要实现 Interceptor 接口

> init():在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化;

> intercept(ActionInvocation invocation):每拦截一个动作请求,该方法就会被调用一次;

> destroy:该方法将在拦截器被销毁之前被调用, 它在拦截器的生

命周期内也只被调用一次;

11. 如何在 Struts2 中使用 Ajax 功能 ?

①. JSON plugin

②. DOJO plugin

③. DWR plugin

④. 使用 Stream 结果类型.

一、用自己的话简要阐述struts2的执行流程。

Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。基本简要流程如下:1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被FilterDispatcher接收。3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。5、Action执行完毕,根据 struts.xml 中的配置找到对应的返回结果result,并跳转到相应页面。6、返回HTTP响应到客户端浏览器。

二、struts的工作原理:

1、初始化,读取struts-config.xml、web.xml等配置文件(所有配置文件的初始化)

2、发送HTTP请求,客户端发送以.do结尾的请求

3、填充FormBean(实例化、复位、填充数据、校验、保存)

4、将请求转发到Action(调用Action的execute()方法)

5、处理业务(可以调用后台类,返回ActionForward对象)

6、返回目标响应对象(从Action返回到ActionServlet)

7、转换Http请求到目标响应对象(查找响应,根据返回的Forward keyword)

8、Http响应,返回到Jsp页面

三、说下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框架中的处理大概分为以下几个步骤

1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求

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

基本简要流程如下:1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被FilterDispatcher接收。3、根据 struts.xml配置,找到需要调用的

Action类和方法,并通过IoC方式,将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。6、返回HTTP响应到客户端浏览器。

二、struts2标签分类:

1.表单UI标签

2.非表单UI标签

3.控制标签

4.数据标签

三、为什么使用struts2?

1.开源

2.mvc框架

3.纯pojo的Action

4.更好的标签特性

5.易测试

6.易扩展

1.Struts框架的整体运行流程

在web应用启动时就会加载初始化ActionServlet,ActionServlet从

struts-config.xml文件中读取配置信息,把它们存放到各种配置对象,例

如:Action的映射信息存放在ActionMapping对象中.

当ActionServlet接收到一个客户请求时,将执行如下流程.

1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路

径无效信息;

2.如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的

表单数据保存到ActionForm对象中;

3.根据配置信息决定是否需要表单验证.如果需要验证,就调用

ActionForm 的validate()方法;

4.如果ActionForm的validate()方法返回null或返回一个不包含

ActionMessage的ActuibErrors对象,就表示表单验证成功;

5.ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给

哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;

6.Action的execute()方法返回一个ActionForward对象,ActionServlet

再把客户请求转发给ActionForward对象指向的JSP组件;

7.ActionForward对象指向JSP组件生成动态网页,返回给客户

8.ActionServlet在Struts框架中的总体作用功能是什么

1.在web应用启动时ActionServlet从struts-config.xml文件中读

取配置信息,把它们存放到各种配置对象,例如:Action的映射信

息存放在ActionMapping对象中。

2.ActionServlet是整个struts 框架的骨干,也是主要的控制部件,

它能够处理客户request 并且决定由哪个Action 处理客户

request。它象一个Action工厂,创建基于客户request请求的

Action类的对象

9.Struts框架的后缀名一般为.do,后缀后能不能更改,如果能更改的话,

如何进行更改后缀名

可以更改,在web.xml中把

action

*.do

中的url-pattern值改成你想要的后缀名就可以了。

1.如何在Struts-config.xml中配置数据源以及获取数据源

Key 绑定在ServletContext上的DataSource实例的索引键,

若不设定则缺省为Action.DATA_SOURCE_KEY,如果在应

用程序中有多于一个的DataSource,则必须设置Key的

值。

DriverClassName 所用的JDBC驱动类(必须的)如:

com.microsoft.jdbc.sqlserver.SQLServerDriver

url 所用的JDBC的URL(必须的)如:

jdbc:microsoft:sqlserver://xg088:1433

MaxCount 同时打开的最大连结数,缺省值为2(可选的)

MinCount 同时打开的最小连结数,缺省值为1(可选的)

User 连结到数据库的用户名(必须的)

Password 连结到数据库的密码(必须的)

Description 关于DataSource的描述信息(可选的)

ReadOnly 如果设为true,则表示该连结是只读的,缺省为false。

(可选的)

LoginTimeout 创建连结的最大允许时间,以秒为单位。(可选的) AutoCommit 如果为true,则每次execute之后会强制回滚。缺省为

true。(可选的)

在action中只要继承了org.apache.struts.actions.Action及子类,即可通过getDataSource方法获得数据源,代码如下:

//多个数据源

DataSource datasource = this.getDataSource(httpServletRequest, ”key 值”);

//单个数据源

DataSource datasource = this.getDataSource(httpServletRequest);

1.Struts-config.xml文件action配置中的attribute属性和name属性有

什么区别

name:用来表示Actionform的名称,

attribute:表示ActionFrom的实例放到作用域中的名称.

1.Struts中的Action是不是线程安全的?如果不是有什么方式可以保证

Action的线程安全?如果是,说明原因

不是线程安全的。

在Struts的生命周期中,只会为每个Action类创建一个实例,所有的客户请求共享这个实例。因此,必须保证在多线程环境中,Action也能正常工作。因此在Action类中要谨慎使用实例变量。

如果在Action类中定义了实例变量,那么在Action实例的整个生命周期中,这个实例变量被所有请求的线程共享。因此不能在 Action类,特别是

execute方法中定义代表特定客户状态的实例变量。如果要采用实例变量,需要采用Java的线程同步机制。

1.Action的Execute方法有几个参数,这几个参数的具体作用是什么

一共有4个参数

ActionMapping mapping 获取映射

ActionForm form 获取表单

HttpServletRequest request 获得请求

HttpServletResponse response 获得响应

1.Action的Execute方法的返回值是什么类型,有几种方式可以返回此类

Action的Execute方法的返回值的类型是ActionForward,返回此类型的方法有三种:1、通过new一个ActionForward,传入它要去的页面的路径;

2、通过mapping.findForward()的方法,通过action配置中的forward属性来找到相应跳转的页面;

3、通过mapping.getInputForward()的方法,根据action配置中的input属性来查找。

1.ActionFrom中对于错误消息的存取是如何存取的,页面上面是如何显示

ActionFrom中存放的出错消息

ActionForm中的错误消息是通过ActionForm中的validate方法来进行验证的,validate()方法会传回 ActionErrors对象,ActionErrors可以储存ActionError的讯息,这时ActionServlet就不会继续进行接下来的工作,而是导回structs-config.xml所设定的位置,并forward至input属性所设定的位置。

页面上是通过struts提供的标签来显示出错消息的。

1.普通的Action对于消息的存取是如何实现的,页面上面是如何显示

Action中存放的消息

Action对于消息的存取是通过ActionMessages来实现的,ActionMessages以一个HashMap存储 ActionMessage.Map中的key是一个标识,其对应的value是一个List对象,所有的ActionMessage存储在List中. 也就是说key标识了一组ActionMessage.

页面上是通过struts的的标签来显示的。

1.普通的ActionForm和动态的ActionForm有什么区别,在动态的

ActionForm中如何设定一个日期类型的属性

1. 动态的ActionForm,由actionform继承而来,之所以有这个东西是因为,它特点是不需要FormBean,而是在 struts-config.xml中通过form-property来设置form的表单字段属性.优势是减少在大型开发过程中formbean的增加而显得程序臃肿,给维护和升级带来极大的不便.

2.需要注意的是: 在JSP或Action中访问动态ActionForm时与标准的ActionFrom有所不同,标准ActionForm为每个属性均提供了一对

getXXX()/setXXX()方法,通过调用getxxx()/setxxx()方法即可读取或设置ActionForm某个属性.而DynaActionForm则把所有的属性保存在一个Map类对象中,只能通过get()和put()来存取其属性值.

如,从动态表单实例中读取会员的注册信息:

String username=form.get(“username”).toString();

String password=form.get(“password’).toString();

String phone=form.get(“phone”).toString();

在动态的ActionForm中,要设置一个日期类型的属性,有两种方式:

1.直接将数据类型设置为java.sql.Date,但是在页面上必须输入yyyy-mm-dd

格式的日期才能行。

2.将类型设置为https://www.wendangku.net/doc/1a17815798.html,ng.String,不过后台需要转换。

1.动态ActionForm是以什么方式存取表单控件的值的。要使用动态

ActionForm取得一个控件的值是如何取得

动态ActionForm是通过在配置文件中设置相应的表单控件的名称的属性来实现表单控件值的存取。

取得动态ActionForm的控件的值的方法有两种,一是通过

request.getParameter()的方法来获得,二是使用动态的 ActionForm来获取值,只要调用相应的动态ActionForm的get()方法,如:testDynamicActionForm.get(“控件名称”)。

1.普通的Action与DispatchAction的区别是什么

普通Action通常只能完成一种业务操作.

DispatchAction可以处理多个业务请求,只不过再配置Action的时候需要设置parameter=”your_method”;

请求时这样写http://localhost:8080/test.do?your_method=add&id=1

其中add是继承DispatchAction的Action类的一个业务操作。

1.Struts框架中常用的有HTML/Bean/Logic标签,这些标签的主要功能是

什么

1) HTML Tags:该标签库包含的标签可以用来创建Struts输入表单。

2) Bean Tags:该标签库包含的标签可以用来创建bean、访问bean和访问bean 的属性。同时提供了依据cookies、headers和parameters的值创建相关bean 的能力。

3) Logic Tags:该标签库包含的标签可以用来进行逻辑判断、集合迭代和流程控制。

1.HTML标签中的name属性代表什么功能,为什么可以省略不写

当标签与JavaBean合作的时候,Name代表作用域中Bean的名称;当标签没有跟JavaBean合作,Name表示作用域中对象的名称。因为在配置文件中已经通过name这个属性将action和actionForm关联在一起了,所以可以不用写。

1.Struts标签中name和property两个属性的作用和区别

当标签与JavaBean合作的时候,Name代表作用域中Bean的名称; Property Bean中属性的值。

1.请简述J2EE平台体系中标签的体系结构

在标签体系中,最高的是JspTag,它是一个接口,内部没有任何的东西;接着是Tag和SimpleTag,他们都是接口,SimpleTag是简单的标签类,只能实现无body的标签,它的实现类是SimpleTagSupport。

Tag下面的接口是IterationTag;它的子接口是BodyTag;IterationTag的实现类有TagSupport,主要用来做无body的标签,BodyTagSupport继承自TagSupport并实现了BodyTag接口,主要实现有body标签。

1.请简述自定义标签的步骤

1、创建实现了Tag接口的标签处理程序类,创建相应的属性。

2、创建一个TLD描述文件来描述这个标签,在TLD文件中定义与标签处理程序Java类中定义的属性对应的属性。

3、在jsp页面中导入标签。

4、在jsp页面使用自定义标签。

1.如何在自定义标签中获取

ServletContext,HttpSession,HttpServletRequest这些JSP页面常见的对象

1、获取ServletContext对象:

this.pageContext.getServletContext();

2、获取HttpSession对象:

this.pageContext.getSession()

3、获取HttpServletRequest对象:

ServletRequest servletRequest = this.pageContext.getRequest();

HttpServletRequest request = (HttpServletRequest) servletRequest;

1.Servlet

2.4版本中新增加了一个标签为简单标签,要实现简单标签的话,

必须实现标签中的哪一个方法,该方法有没有返回值

doTag()方法,它没有返回值

1.Struts框架如何实现国际化的步骤

1、资源文件的编写

2、Jsp页面必须使用UTF-8编码机制

3、使用来输出资源文件中定义的资源显示信息。

4、本地页面语言的指定。

1.如何实现页面中HTML标签的初始值设置

在对应的ActionForm中设置相应属性的初始值,或者调用ActionForm中的相应属性的set方法来为其设置初始值。

1.Struts框架的综合运用开发过程中,一般会使用ActionForm和JavaBean,

这两个Bean能不能通用?如果不能的话请简述原因

无法通用,

1. ActionForm是表示表单对象,负责action和表单的数据传递,javabean是表示和数据库交互的对象。

2.从软件分层角度看,bean分开的话,一旦框架发生变化,无需进行大量代码重构。

1.如何操作Oracle表中CLOB和BLOB字段

1、先把自动提交设置成false;

2、先插入一个空的大对象empty_clob();

3、将这条记录锁住;

4、取出这条记录中的CLOB或BLOB的内容,用流的方式写入到数据库中,再关闭流;

5、提交。

Struts2框架工作原理及应用体会

2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342·

Struts2技术

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,所以我们需要到 https://www.wendangku.net/doc/1a17815798.html,去下载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学习笔记

struts1开发学习笔记 使用一个简单的例子记录struts1开发过程。 0、 描述 主要功能描述: index 界面上只有两个超链接,分别可以打开录入产品界面和显示产品列表界面。 newProduct.jsp 是录入的界面,searchProduct.jsp 是查询列表的界面。 ProductAction.java 是处理逻辑的action 简单描述流程图: 1、 构建环境 在Myeclipse 中,新建一个工程StrutsTest ,选择该工程,右键Myeclipse->add sruts capapibality ,弹出界面,选择struts1.2支持。如下图所示: 添加完struts 支持后,lib 目录下会增添struts 的jar 包、增添struts 的配置文件: /WEB-INF/struts-config.xml 、同时在web.xml 中增添了struts 的配置。 2、 代码编写

2)创建工具类Util.java,从数据库连接池中获得连接。需要两个步骤 第一步:在WebRoot/META-INF/下新建一个context文件,通过jndi方式配置数据源, 第二步:在util类中读取配置获得连接,util.java如下:

3)创建工具类EncodingFilter.java,自定义过滤器,并在web.xml中配置,参考web.xml 配置中内容。EncodingFilter.java的内容如下:

4)修改web.xml,指定首页为index.jsp。文件内容如下:最后定义了一个fileld 的过滤器,是用来过滤字符编码的,后面会提到。

Strurts2

阐述struts2的执行流程。 Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action 和用户实现的企业业务逻辑组件。 核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理 机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2 是WebWork的升级版本。 基本简要流程如下: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被FilterDispatcher接收。 3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。 4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到 相应页面。 6、返回HTTP响应到客户端浏览器。 工作原理 在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 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

Struts2学习笔记

Struts2项目的构建与配置 1.配置struts.xml (1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的struts.xml文件。 (2)主要的配置如下: /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标签使用

Struts2标签使用 (1): ---- 文本输入框 使用: (2): ----- 文本域输入框 使用: (3): ----- 密码输入框 使用: 前三个基本都是一样的。如果是要显示值的话可以这样:value = “实体Bean。Get***()”。 (4): ---- 单选按钮 使用:其中list 属性是必须要有的。 <1>:第一种方式:list = “#{‘male’:’男’,’female’:’女’}”

<2>:第二中方式:list = “#request/session.list”。 ---- 与action 结合起来了。 如果要默认选中的话后面加上value = “”.也可以通过javascript 的方式来默认选中。 (5): --- url连接 --- 超链接 这两个标签一般结合起来来使用。 使用: (6): --- 获取相应form的值 使用: <1>:

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框架的稳定性,为系统的稳定运行提供了保证。

struts2教程(完全版)

Yaio 4 一、准备工作及实例 4 1.解压struts- 2.1.6-all.zip 4 2.六个基本包 4 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 5 (5)其它配置文件 5 4.让MyEclipse提示xml信息 5 5.如何使用alt+/提示 5 6.实例 5 7.开启struts2自带的开发模式常量 7 8.vo传参模式 8 9.ModerDriven传参模式(不建议采用) 8 10.为什么要使用struts2代替struts1.x 9

二、struts.xml配置及例程 9 1.配置文件的优先级 9 2.配置形式 9 3.package配置相关 10 4.分工合作include:指定多个配置文件 12 5.tomcat认证访问 12 6.初识拦截器 13 7.Action中的method属性 15 8.使用ForwardAction实现页面屏蔽。 17 8.使用default-Action配置统一访问 17 小结Action 18 9.使用通配符 18 10.使用0配置:ZERO Annotation 19 11.Result配置详解 19 12.异常处理 24 三、在Action获取Scope对象 25 方式一、与Servlet解耦合的非IOC方式 25

方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28 四、OGNL与ValueStack(VS) 29 1.值栈入门 29 2.OGNL入门 31 3.普通方法访问 31 4.静态方法访问 31 5.默认类Math的访问 32 6.调用普通类的构造方法 32 7.集合对象初步 32 8.集合对象进阶 33 9.N语法top语法 34 10.获取Stack Context中的信息 35 11.总结$ # %的区别 35 12.总结OGNL[重点] 35 五、拦截器 36

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基础知识 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学习笔记

目录 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进行解析,然后把相应的数据绑定到要返回的对象上

Struts2中 struts.xml的Action配置详解

Struts2中struts.xml的Action配置详解 使用package可以将逻辑上相关的一组Action,Result,Interceptor等组件分为一组,Package 有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。 由于struts.xml文件是自上而下解析的,所以被继承的package要放在继承package的前边。Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。使用name space可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Men u和Help action,但是事项方式各有不同。Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。 “/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个pa ckage中查找。 “”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。 例如,有如下配置: CODE: greeting.jsp bar1.jsp

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面试题 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生 成动态的网页,返回给客户。

相关文档