文档库 最新最全的文档下载
当前位置:文档库 › Struts2总结

Struts2总结

Struts2总结
Struts2总结

第一章MiniStruts 的制作

不使用Servlet,也不使用request.getParameter()获取参数;是用户能够直接访问Dao中的查询方法?

1、可以使用filter过滤器,用来拦截用户的表单提交(请求的路径、请求的参数)。

2、根据路径分析出,应该调用哪个类的哪个方法。

3、根据请求的参数,动态的将参数的值,设置到类的属性中去。

4、执行完成之后,需要跳转的页面(创建xml配置文件,配置用户跳转的路径信息)。

一、s truts的实现步骤

手动导入:

1.创建Web项目。

2.导入Strutrs的几个必须包(7个jar)。

3.在src目录下,创建struts.xml配置文件(名字和路径都不能改)。

4.在web.xml配置文件中,添加Struts的支持(配置一个filter过滤器)。

自动导入(Myeclipse8.0以上的版本):

第二章深入Struts

Struts2运行原理:

请求--- >自定义过滤器----> filterdispatcher ------> ActionProxy(代理,读取struts.xml的配置文件)---->ActionInvocation(action的调用者,调用具体的Action;在调用之前经过一系列的拦截器)——>执行完Action之后,跳转到对应的页面。

注意:struts中的所有编码处理都是i18n拦截器处理,所有的表单数据处理都是在系统默认拦截器中获取。

Struts.xml配置文件详解:

动态方法调用:

注意:1. 在配置的时候,不用指定具体的方法(不用写method=“XXX”);

2. 在请求action的路径指定需要执行的方法名即可。(格式:action名!方法名.action)使用通配符进行模糊匹配:

Struts2对返回结果页面进行配置:

全局结果配置:

第三章Struts2的拦截器

1.什么是拦截器?

在用户访问Action之前和之后执行相应的操作,称为拦截器。

例如:将表单中的数据自动转换到Action的属性,使用的就是一个拦截器。

2.拦截器与过滤器(filter)异同?

a)过滤器是根据用户的地址进行过滤,可以过滤任意路径(包括jsp、html、action等等)。

b)拦截器只能用来过滤action,不依赖于访问的路径。

3.实现自定义拦截器步骤

使用拦截器注意事项:

1.在action中使用了自定义拦截器,系统默认的defaultStack拦截器链会失效;必须

使用引入。

2.在引入多个拦截器的时候,推荐使用拦截器链的方式简化拦截器的使用。

第四章Struts2的类型转换器

1.Struts2中类型转换分为两种:

a)手动(自定义)转换器

b)自动转换器

2.手动(自定义)转换器(针对特殊属性)

a)在action的类中,必须继承ActionSupport类。

b)定义转换器的类,继承DefaultTypeConvert,重写convertValue()方法。

c)创建配置文件(注意:1.文件名必须是:Action的类名-conversion.properties ; 2. 必须将

配置文件存放在Action所在的包中。)

3.自动转换器(常用的方式)

第五章Struts2的输入验证

一.验证分类:

1.服务器端验证(Java代码来完成验证(Struts的内置验证框架,可以完成服务器端验证))。

2.客户端验证(js验证——在客户端执行,执行的时候依赖与客户度(手动js验证,jquery

验证框架进行验证))

二.Struts的内置验证框架:

Struts2中验证有两种方式:

1.手动验证。

2.配置验证框架,自动验证。

三.内置验证框架使用步骤:

1. 需要验证的Action必须继承自ActionSupport类。

2. 创建验证配置文件。

要求:a) 配置文件必须和action在同一目录。

b) 文件名的格式必须是:Action类名-validation.xml(验证Action中的所有方法)

Action类名-访问Action的名字-validation.xml(只会验证

Action中指定的方法)

3. 查看内置验证器:xwork-XXXXX.jar目录中(找到default.xml配置文件)

特别需要注意:注意哦!

1. 使用了验证器之后,如果验证失败;必须配置表示验证失败之后,跳转的页面。

2. 如果jsp页面中使用了,Struts的标签;那么必须让这个jsp页面必须经过struts的核心过滤器,进行过滤;否则页面不能正常解析struts的标签。

3.基本数据类型,不能使用Struts的内置验证,建议使用包装类。

四.手动验证步骤:

1. 继承ActionSupport,重写validate()方法。

在执行Action中具体的方法之前,会先执行validate()方法;如果有错误,则返回input 指定的页面。(有错误:super.addFiledError())

手动验证总结:

1.可以在实体中的setXxx()方法进行控制。

2.在validate()方法中进行验证。

第六章Struts2的标签库

Action配置中一定要设置input返回页面

添加验证只要创建验证的xml文件

1.创建xml文件名

验证Action中全部方法

在Action同包下,创建:Action类名-validation.xml

如:ValidateAction创建ValidateAction-validation.xml

验证Action中单个方法

注意事项

注意:

1.要验证的方法不能叫input.

2.这样配置在form表单中要在中action写好名称,

不能写action="validate_",然后

这样会找不到对应的配置文件,跳过验证.

3.如果验证出错,返回input页面时,那些存在ValueStack中的值会丢失,可以将Action实现Preparable接口,

然后prepare()方法里初始化添加页面需要的值.

4.如果使用Preparable接口,必须在action配置中添加

name="paramsPrepareParamsStack"/>.

这样prepare()才能得到form提交的参数.

2.创建xml内容

1.0.2//EN"

"https://www.wendangku.net/doc/853113963.html,/xwork/xwork-validator-1.0.2.dtd">

true

Please enter a mail

Invalid MAIL

Struts内建验证程序(type的值)

required

保证字段的值不是空值null.空字符串不是空值null.

Please enter a user name

requiredstring

保证字段不是空值null,也不是空白(empty).

param:trim(boolean) ->true->去除前后空格

true

Please enter a user name

false

Please enter a password

int

验证字段值是否可以转换为一个整数.

param: min(int);max(int)

1999

2010

year:1999-2010

date

验证给定日期字段的值是否在一个给定的范围内.

param:max(date);min(date)

1999-01-01

2010-01-01

birthday:1999-2010

email

给定的String值是否是一个电子邮件地址

Invalid email

url

给定的String值是否是一个合法的URL(要有前缀)

Invalid URL

expression,fieldexpression

验证给定字段是否满足一个OGNL表达式.

区别:expression 不是一个字段验证程序,失败时将生成一个动作错误.(JSP中调用才显示出错信息)

fieldexpression 是一个字段验证程序,失败时将抛出一个字段错误.(对字段验证) param:expression(String)OGNL表达式

expression:

public class ExpressionTestAction{

//属性生成get,set

private int min;

private int max;

}

max > min

Maximum temperature must be greater than Minimum temperature

fieldexpression:

public class FieldExpressionTestAction{

//属性生成get,set

private int min;

private int max;

}

max > min

Maximum temperature must be greater than Minimum temperature

visitor

把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用)

//UserBean

public class UserBean{

//属性get,set

private String name;

private int age;

}

//UserBean-validation.xml(和UserBean放在同一个包中)

用户名必须

18

99

Age must be between 18and99

//Action的validation.xml

用户:

如果另一个Action对UserBean使用另一个标准的验证,可以创建新的验证文件

//UserBean-specific-validation.xml

30

50

Age must be between 30and50

//另一个Action的validation.xml

specific

用户1:

conversion

检查对某个属性进行类型转换是否会导致一个转换错误

An age must be an integer.

stringlength

验证一个非空的字段值是不是足够的长度

param:minLength(int);maxLength(int);trim(boolean)

6

14

length:6-14

regex

给定的值是否与一个给定的正则表达式匹配

param:expression(String)正则表达式;caseSensitive(boolean)是否区别大小写,默认为true;trim(boolean)是否去除前后空格

Invalid phone number or invalid format

3.在action中验证

利用Validateable接口实现验证,实现void validate()方法.

ActionSupport类已经实现了这个接口

//继承ActionSupport

public class User extends ActionSupport{

//属性get,set

private String userName;

private String password;

private static List userNames =new ArrayList();

static{

userNames.add("harry");

userNames.add("sally");

}

//验证方法

public void validate(){

if(userNames.contains(userName)){

//添加出错信息

addFieldError("userName","'"+userName +"' has been taken.");

}

}

//验证方法

public void validateXxx(){

if(userNames.contains(userName)){

//添加出错信息

addFieldError("userName","'"+userName +"' has been taken.");

}

}

}

第七章国际化、文件上传与下载

一.国际化

Jsp国际化

1.创建资源文件。命名格式:资源文件名_语言_国家(区域).properties

2.使用fmt格式化标签,绑定资源文件名。

3.使用fmt格式标签,读取资源文件的内容。

Struts国际化

1.创建资源文件。命名格式:资源文件名_语言_国家(区域).properties

2.在struts.xml中配置资源文件的名字。

3.在jsp页面使用Struts的标签,读取资源文件的内容。

动态语言切换

方式一:

1.在struts.xml文件中配置

{1}.jsp

2.链接到指定页面格式:jsp文件名?request_locale=语言_国家

3.需要在web.xml中配置过滤所有的请求。/*

方式二:

1.创建语言切换的Action。

2.创建Locale对象(表示当前使用的语言)

3.将Locale对象,存放在session中。

4.让当前的配置立即生效。

示例:

二、上传下载

上传:

1.在form标签中添加“enctype=multipart/form-data”属性,表示复杂文件类型。

2.在Action中,定义属性,用来接收上传的文件(属性必须定义3个:文件的内容、文件

的名字、文件的类型)。

3.通过文件的读写,将文件保存。

下载

1、创建一个类继承自ActionSupport

2、在类中定义一个字段存放文件的名字、定义一个方法(方法名必须以get开头)用

于输出

3、在配置文件中配置

配置文件中可配置的参数有:

contentType:指定被下载文件的文件类型

inputName:指定被下载文件的入口输入流

contentDispostion:指定下载文件的文件的文件名和文件是打开还是保存默认为打

开(若指定为attachment会提示保存)

bufferSize:指定下载文件时的缓冲大小

第八章JFreeChart生成在struts2中生成报表的步骤:

1、在项目中导入两个必须的包:

2、创建一个类,在类中写实现代码

3、在struts.xml配置文件中配置访问action进行访问

第九章Log4j的使用

Log4j的使用步骤:

1、在项目中导入Log4jXX.jar的包

2、在src目录下创建log4j.properites的配置文件

3、配置

#log4j.rootLogger=输出级别(all

#设置输出具体的位置

#log4j.appender.别名=ConsoleAppender(控制台)\FileAppender(文件中)

#DailyRollingFileAppender(每日一个文件)\SMTPAppender (发送邮件)\BPSJDBCAppender(数据库中)

#设置输出级别

#log4j.appender.别名.Threshold=可选值(all

#设置输出文件的格式

#log4j.appender.别名.layout=PatternLayout(普通文本格式)、HTMLLayout(HTML 格式)

#设置日志的具体内容(使用特殊符号代替,详细见书:p174)

#https://www.wendangku.net/doc/853113963.html,yout.ConversionPattern=%F %L %d等等

##################################################################### ##########################################

#log4j.rootLogger=ALL,console,file,ROLLING_FILE,A1,MAIL,DATABASE

#

####################

## Console Appender

####################

#log4j.appender.console=org.apache.log4j.ConsoleAppender

##log4j.appender.console.Threshold=error

#log4j.appender.console.Target=System.out

#https://www.wendangku.net/doc/853113963.html,yout=org.apache.log4j.PatternLayout

#https://www.wendangku.net/doc/853113963.html,yout.ConversionPattern=%F %L %d - %c -%-4r [%t] %-5p %c %x - %m%n

#

####################

## File Appender

####################

#log4j.appender.file=org.apache.log4j.FileAppender

#log4j.appender.file.Threshold=error

#log4j.appender.file.File=E:file.html

#log4j.appender.file.Append=true

#https://www.wendangku.net/doc/853113963.html,yout=org.apache.log4j.HTMLLayout

#https://www.wendangku.net/doc/853113963.html,yout.ConversionPattern=%d - %c -%-4r

[%t] %-5p %c %x - %m%n

#

#########################

## Rolling File (日志文件能够自动备份)

#########################

#log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

##log4j.appender.ROLLING_FILE.Threshold=DEBUG

#log4j.appender.ROLLING_FILE.File=E\:\\a\\rolling.html

#log4j.appender.ROLLING_FILE.Append=true

#log4j.appender.ROLLING_FILE.MaxFileSize=10KB

##备份文件个数

#log4j.appender.ROLLING_FILE.MaxBackupIndex=1

#log4j.appender.ROLLING_https://www.wendangku.net/doc/853113963.html,yout=org.apache.log4j.HTMLLayout

#log4j.appender.ROLLING_https://www.wendangku.net/doc/853113963.html,yout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#

#########################

## DailyRollingFile 每日产生一个日志文件

########################

#log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender

#log4j.appender.A1.File=E\:\\a\\SampleMessages.html

#log4j.appender.A1.DatePattern=yyyyMMdd-HH'.html'

#https://www.wendangku.net/doc/853113963.html,yout=org.apache.log4j.HTMLLayout

#

#########################

## SMTP Appender(需要用户名和密码,还要有【javax.mail】jar包)

########################

#log4j.appender.MAIL=https://www.wendangku.net/doc/853113963.html,.SMTPAppender

### 错误级别

#log4j.appender.MAIL.Threshold=info

## 缓存文件大小,日志达到5K时发送Email

#log4j.appender.MAIL.BufferSize=5

#log4j.appender.MAIL.From=test@https://www.wendangku.net/doc/853113963.html,

#log4j.appender.MAIL.SMTPHost=127.0.0.1

#log4j.appender.MAIL.SMTPUsername=test

#log4j.appender.MAIL.SMTPPassword=admin123654

### 邮件主题

#log4j.appender.MAIL.Subject=Log4j_Error_log

#log4j.appender.MAIL.To=admin@https://www.wendangku.net/doc/853113963.html,

#https://www.wendangku.net/doc/853113963.html,yout=MyPattern

#https://www.wendangku.net/doc/853113963.html,yout.ConversionPattern=[ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#

#########################

## JDBC Appender (需要jdbc驱动)(注意,系统默认没有处理单引号问题)

########################

#log4j.appender.DATABASE=BPSJDBCAppender

#log4j.appender.DATABASE.Threshold=all

#log4j.appender.DATABASE.URL=jdbc:sqlserver://localhost:1433;database Name=testdb

#log4j.appender.DATABASE.driver=com.microsoft.sqlserver.jdbc.SQLServe rDriver

#https://www.wendangku.net/doc/853113963.html,er=sa

#log4j.appender.DATABASE.password=123456

#log4j.appender.DATABASE.sql=INSERT INTO error_msg VALUES ('%d - %c -%-4r [%t] %-5p %c %x - %m%n')

#https://www.wendangku.net/doc/853113963.html,yout=org.apache.log4j.PatternLayout

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·

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

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 实验报告

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的介绍及总结

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校验子属性。

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知识点总结

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

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的拦截器总结

Struts2 中的拦截器和servelt 中的过滤器是非常的相似的。如果学过过滤器的话,肯定能够感觉的到,尽管有些微的不同。可是struts2的拦截器到底如何使用呢,为什么会有这些配置呢?接下来一一来看。 过滤器和拦截器是非常相似的,过滤器public interface Filter 接口里面有三个方法: ?init(FilterConfig filterConfig), ?destroy(), ?doFilter(ServletRequest request, ServletResponse response, FilterChain chain), 这里面的doFilter() 方法是最重要的,在struts2 中String intercept(ActionInvocation invocation)就相当于此方法。 如何完成一个拦截器呢?在struts2 中要实现一个接口这个接口是什么呢?在哪呢?,是否在哪听说过?是webwork 是我们以前听的最多的关于拦截器的框架,struts2 用了其中一个核心的东西,这个东西在是什么呢?是xwork 。恩,有了它才可以拦截,好了我们在哪找呢?在com.opensymphony.xwork2.interceptor 中找,里面有个Interceptor 这是个接口,里面也有三个方法,有init,destroy 和intercept 三个方法,而在struts2 里面的所有的拦截器都继承这个接口!

为了看这些是怎么实现的,加入了一些打印! 将上面的配置整合起来就是:

这样就可以让Aciton 被拦截了,到此,好了,可以运行程序了: 输出结果是:启动服务器init 被打出 运行后提交action 输出intercept 这个就是初步的一个拦截器。 ======= 在此可能出现一个问题,是什么呢?如果就我们做的注册程序而言,可以想一下,有数据转换,有数据校验,以前当转换和校验不符合的时候,点击提交,会提示相关错误信息,然而,此时当转换和校验依然不符合要求时,点击提交,却不会提示错误信息,为什么呢? ==== 当然你答对了,这些功能都包含在struts2的默认拦截器中,这里没执行是被添加的拦截器myinterceptor取代了。 为了查明原因可以查看一下struts2-core-2.xx.jar中的struts-default.xml 这个文件 这里定义的很多的东西,和我们的程序相关的非常紧密 首先这里有个 ... 和struts.xml 里面的 ...有什么关系呢?很明显可以猜到struts.xml 继承的就是struts-default.xml中的包struts-default。 这个里面还看到标签,这个是定义拦截器栈的,仔细看可以发现里面有个validation 如此可以猜想,validation 也是定义的一个拦截器,猜想当注册信息出错后没有提示信息呢?肯定是相关的验证功能没有执行,以前的执行了,现在没执行,

STRUTS2实验报告

1. 系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于struts2、spring、 hibernate三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用 户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按 钮来重复注册多个用户。 系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名 不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果 系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重 新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登 录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生 成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符 串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程 1.3 数据库设计 相关的映射文件: <hibernate-mappingpackage= <classname=user table=user_table> <id name=idcolumn=user_id> <generatorclass=identity</id> nique=true/> <propertyname==user_passnot-null=true length=50/> <propertyname=emaillength=100/> </class> <propertyname=usercolumn=</hibernate-mapping> 一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关 系。 2.系统实现与测试 2.1 系统采用的关键技术 mvc框架采用了struts2框架,struts2框架的易用性,极好的简化了系统的mvc层的实 现;本系统使用了struts2的json插件来完成ajax功能,除此之外本系统为了避免进行底 层的ajax交互,还是用了一个简单prototype.js函数库,用以简化ajax编程。struts2框 架的稳定性,为系统的稳定运行提供了保证。 spring容器作为系统的ioc容器,将系统中所有组件都放在spring容器中进行管理, 并且充分利用了spring ioc容器的功能,采用依赖注入来管理系统中各组件的依赖关系,避 免了各组件之间的硬编码耦合,提高了系统的可扩展性。 借助hibernate orm框架实现系统的持久化,通过hibernate的框架帮助,允许上层程 序采用面向对象的方式编程,二hibernate负责把面向对象的持久化操作转换成jdbc操作, 但hibernate的底层操作对开发者完全透明,从而让用户从具体的jdbc访问中释放出来,无 需理会底层的jdbc数据库访问,而是以面向对象的方式进行持久化操作。 2.2 关键程序流程

struts2学习心得

一. 配置问题: 最新的struts2为GA版2.2.1 其中必须类库为https://www.wendangku.net/doc/853113963.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/853113963.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这个属性 例如:

Struts2总结

第一章MiniStruts 的制作 不使用Servlet,也不使用request.getParameter()获取参数;是用户能够直接访问Dao中的查询方法? 1、可以使用filter过滤器,用来拦截用户的表单提交(请求的路径、请求的参数)。 2、根据路径分析出,应该调用哪个类的哪个方法。 3、根据请求的参数,动态的将参数的值,设置到类的属性中去。 4、执行完成之后,需要跳转的页面(创建xml配置文件,配置用户跳转的路径信息)。 一、s truts的实现步骤 手动导入: 1.创建Web项目。 2.导入Strutrs的几个必须包(7个jar)。 3.在src目录下,创建struts.xml配置文件(名字和路径都不能改)。 4.在web.xml配置文件中,添加Struts的支持(配置一个filter过滤器)。 自动导入(Myeclipse8.0以上的版本): 第二章深入Struts Struts2运行原理: 请求--- >自定义过滤器----> filterdispatcher ------> ActionProxy(代理,读取struts.xml的配置文件)---->ActionInvocation(action的调用者,调用具体的Action;在调用之前经过一系列的拦截器)——>执行完Action之后,跳转到对应的页面。 注意:struts中的所有编码处理都是i18n拦截器处理,所有的表单数据处理都是在系统默认拦截器中获取。 Struts.xml配置文件详解:

动态方法调用: 注意:1. 在配置的时候,不用指定具体的方法(不用写method=“XXX”); 2. 在请求action的路径指定需要执行的方法名即可。(格式:action名!方法名.action)使用通配符进行模糊匹配: Struts2对返回结果页面进行配置:

struts2复习总结计划题.docx

Struts2 复习题 1.以下属于 struts2 的控制器组件是: 2.以下属于 struts2 的体系结构的是: ( 多选 ) 控制器组件配置文件 3.以下属于 struts2 配置文件中的配置元素是: ( 多选 ) A. B. C. D. 4.关于 struts1 和 struts2 对比的说法正确的是: 要求 Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类 中的 Action不是线程安全的,而struts2中的Action是线程安全的 和 struts2 中都使用 ActionForm 对象封装用户的请求数据 使用 OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于 ValueStack 说法正确的是: ( 多选 ) A. 每个 Action 对象实例拥有一个 ValueStack 对象 B. 每个 Action对象实例拥有多个ValueStack对象 中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 会在请求开始时被创建,请求结束时消亡 6. 关于 struts2配置文件说法正确的是: A. 必须在 WEB-INF/classes目录下 B. 名字必须为 C.配置 Action时,必须配置包信息 D. 使用 元素配置转发 7.在 struts2 配置中用()元素来配置常量 : A. B. C. D. 8.关于 struts2 包的说法正确的是:框 架使用包来管理常量 框架定义包时必须指定 name属性 框架中配置包时,必须继承自struts-default包,否则会报错 框架中使用包来管理Action 9. struts2 中获取Servlet API 的方法正确的是: ( 多选 ) A. 使用 ActionContext对象以解耦合的方法访问Servlet API B. 使用 ServletActionContext对象以解耦合的方式访问Servlet API C.使用 ActionContext对象以耦合的方式访问Servlet API D.使用 ServletActionContext对象以耦合的方式访问Servlet API 10.struts2 动态调用的格式为: ? ! 11.如果要实现 struts2 的数据校验功能 A. 普通 Action类可以实现 B. 继承自 Action接口可以实现 C.继承自 ActionSupport类可以实现 D.继承自 ActionValidate类可以实现

struts2课程知识点总结-01

struts2课程知识点总结 by wanggc 1.action a) struts2环境配置 包括5个基本jar包,web.xml中配置过滤器、struts.xml文件配置、 编写action b) 得到表单数据(接受参数) 两种方法:1、get set 方法2、对象 c) 动态方法配置 action中定义方法名称,strust.xml文件action中配置如: method=”add” d) action通配符的配置 * 与{ } 或*_* e) 默认action的配置 f) session等jsp内置对象的应用 两种方法1、普通 2 、map g) 简单数据验证 应用addFieldError() (了解) 2.result Result四种返回类型: 1、dispatcher 2、redirect 3、chain 4、redirectAction

/r1.jsp /r2.jsp r1 r2

Struts2开发总结

Struts2项目开发总结 (注:Struts2版本:Struts2.1.6,数据库:Oracle9i) 所须架包: commons-logging-1.0.4.jar、commons-fileupload-1.2.1.jar 、freemarker-2.3.13.jar ognl-2.6.11.jar、struts2-core-2.1.6.jar 、xwork-2.1.2.jar 1、若在前台页面使用orgl表达式: 必须定义:<%@ page isELIgnored = "false" %> 使用:${requestScope.count}来获取session中的值 2、在jsp页面中显示action中的数据,不需要点击链接到action再返回页面中显示数据 第一步,写一个action类 第二步:配置struts.xml文件,如: /sort1.jsp /error.jsp 第三步:在sort1.jsp中遍历action方法为sort5list的结果集: "> 第四步:在index.jsp中调用action为sort5list的方法 3、Struts2超链接传参方式: 第一种: "> 第二种: Newsquerynew 最新文章 第三种: 直接使用即可 注意:Struts2超链接标签中的href属性是必选参数,否则在项目整合中可能会出现不明的标签异常。 4、使用Struts2标签循环遍历结果集: ">

相关文档