学习Struts(2.3)

1.struts2.3核心jar包(若首次接触,可暂时略过不看)

大家可以到http://struts.apache.org/download.cgi#struts2014下载struts-2.x.x-all.zip,目前最新版为2.3.16.3。下载完后

解压文件,开发struts2应用需要依赖的jar文件在解压目录的lib文件夹下。不同的应用需要的JAR包是不同的。下面给出了开发

Struts 2程序最少需要的JAR。

struts2-core-2.x.x.jar :Struts 2框架的核心类库

xwork-2.x.x.jar :XWork类库,Struts 2在其上构建,由于Struts2是由xwork的延伸 有些类依然关联着 xwork的类

ognl-3.0.x.jar :对象图导航语言(Object Graph Navigation Language),支持ognl表达式,struts2框架通过其读写对象的属性

freemarker-2.3.x.jar : FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,Struts 2的UI标签的模板使用

FreeMarker编写

commons-logging-1.1.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。

commons-fileupload-1.3.1.jar 文件上传组件,2.1.6版本后必须加入此文件

如要整合其他框架,则需要添加相应的xxx-plugin.jar如:

整合spring需要将这个jar包导入]。struts2-spring-plugin.jar ---struts2的spring插件

顺便介绍下相关名词--------

1. jakarta:jakarta是apache组织下的一套Java解决方案的开源软件的名称,它包括了很多子项目。Tomcat,ant,struts等等也是

apache下的开源项目。同时也是jakarta的关联项目。

2.OGNL:OGNL是一种功能强大的表达式语言(Expression Language,简称为EL),webwork2和现在的Struts2.x中使用OGNL取代原

来的EL来做界面数据绑定

3.xwork:XWork是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机

(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Navigation Language),

IoC(Inversion of Control倒置控制)容器等。

4.command模式:命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction

)模式。命令模式把一个请求或者操作封装到一个对象中。)

开发struts2项目时,不要一股脑把struts2框架lib下的所有jar复制到自己的项目中,要是在整合其他框架。那样使得项目显得非

常之臃肿。而且根本没有什么用的加进去。起不了什么作用。

2.搭建Struts2环境

工具:MyEclipse9   用自带的Tomcat

搭建Struts2环境有以下几个步骤:

1) 找到开发Struts2应用需使用到的jar文件。

通过MyEclipse创建web工程,并通过MyEclipse加入struts2核心jar包(此处实际上就添加了一个core包)。

2) 编写Struts2的配置文件struts.xml。

用MyEclipse加入struts2的jar包时,自动创建了struts.xml配置文件。

3) 在web.xml文件中加入struts2的MVC框架启动配置

用MyEclipse加入struts2的jar包时,自动在web.xml中加入了启动struts2的配置,即struts框架是通过Filter启动的,

web.xml中配置的StrutsPrepareAndExecuteFilter类的init()方法将会读取struts.xml配置文件完成初始化工作。

注意:struts2通过过滤器来执行分发功能。

4) 验证环境搭建是否成功:

启动创建的工程,如果没有报错,就成功了,

3.入门程序:第一个struts2.3实例--Hello Struts

目录结构:

1) 创建action类

package cn.ac.siat.helloaction;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {
	private String message;

	//struts2的默认执行方法
	public String execute(){
		System.out.println("execute()...");
		message = "Hello Struts!";
		return "success";
	}

	// get set  method
	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
}

2) 在struts.xml中配置action类

<struts>
<package name="siat" namespace="/" extends="struts-default">
	<action name="helloAction" class="cn.ac.siat.helloaction.HelloAction" method="execute">
		<result name="success">/index.jsp</result>
	</action>
</package>
</struts>    

3) index.jsp程序

  <body>
  	${message}<br><!--可以指定访问action里的数据-->
  </body>

4) 浏览器访问

http://lzc:8080/Struts2Test1/helloAction.action

4.可能会遇到的错误

No result defined for action cn.ac.siat.helloaction.HelloAction and result Hello Struts!

solution:

String 里面有5个static 常量分别是:

ERROR  INPUT LOGIN NONE SUCCESS

例如 如果在excute 中返回的是 ruturn SUCCESS;

也就相当于返回的是return "success"字符串

就必须在struts.xml中写上对应的"success"

<result name="success">/x.jsp</result>

当然EORROR 对应的就是"error";字符串

当然INPUT 对应的就是"input";字符串

当然LOGIN 对应的就是"login";字符串

当然NONE 对应的就是"none";字符串

要不你就换一换把return SUCCESS换成return "success";试一试

一定要确定你在excute返回的字符串在  struts.xml中有定义

还有一个要提醒你的就是:

在validate中验证有错误的话且没有指定return 字符串的话,

struts2默认就返回的是 return INPUT 也就是return "input"

注:在package里面增加 namespace="/" 告诉系统是从根本录寻找,如http://lzc:8080/Struts2Test1/helloAction.action

如果namespace="/user" 则访问时需要在项目名和action之间加上此路径如http://lzc:8080/Struts2Test1/user/helloAction.action

5.Struts.xml配置中的包介绍

<struts>

<package name="siat" namespace="/test" extends="struts-default">

<action name="helloAction" class="cn.ac.siat.helloaction.HelloAction" method="execute">

<result name="success">/index.jsp</result>

</action>

</package>

</struts>

在struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action。在实

际应用中,我们应该把一组业务功能相关的Action放在同一个包下。

配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,他不对应java的类包,如果其他包要继承该包,必须通过

该属性进行引用。包的namespace属性用于定义该包的命名空间,命名空间作为访问该包下的Action的路径的一部分,如访问上面例

子的Action,访问路径为:/test/helloAction.action。 namespace属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“”(空字符串)。

通常每个包都应该继承struts-default包, 因为Struts2很多核心的功能都是拦截器来实现。如:从请求中把请求参数封装到

action、文件上传和数据验证等等都是通过拦截器实现的。 struts-default定义了这些拦截器和Result类型。可以这么说:当包继

承了struts-default才能使用struts2提供的核心功能。 struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义。 struts-default.xml也是Struts2默认配置文件。 Struts2每次都会自动加载 struts-default.xml文件。

注意:包还可以通过abstract=“true”定义为抽象包,抽象包中不能包含action。

6.Action(转)

Action名称的搜索顺序

1.获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action

2.首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在这个package中寻找名字为test的action,如

果不存在这个package则转步骤3;

3.寻找namespace为/path1/path2的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这

个package,则转步骤4;

4.寻找namespace为/path1的package,如果存在这个package,则在这个package中寻找名字为test的action,如果仍然不存在这个

package,就去默认的namaspace的package下面去找名字为test的action(默认的命名空间为空字符串"" ),如果还是找不到,页

面提示找不到action。

Action配置中的各项默认值

<package name="itcast" namespace="/test" extends="struts-default">

<action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" >

<result name="success">/WEB-INF/page/hello.jsp</result>

</action>

</package>

1>如果没有为action指定class,默认是ActionSupport。

2>如果没有为action指定method,默认执行action中的execute() 方法。

3>如果没有指定result的name属性,默认值为success。

Action中result的各种转发类型

<action name="helloworld" class="cn.itcast.action.HelloWorldAction">

<result name="success">/WEB-INF/page/hello.jsp</result>

</action>

result配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有: dispatcher(默认值)、 redirect 、

redirectAction 、 plainText。

下面是redirectAction 结果类型的例子,如果重定向的action中同一个包下:

<result type="redirectAction">helloworld</result>

如果重定向的action在别的命名空间下:

<result type="redirectAction">

<param name="actionName">helloworld</param>

<param name="namespace">/test</param>

</result>

plaintext:显示原始文件内容,例如:当我们需要原样显示jsp文件源代码 的时候,我们可以使用此类型。

<result name="source" type="plainText ">

<param name="location">/xxx.jsp</param>

<param name="charSet">UTF-8</param><!-- 指定读取文件的编码 -->

</result>

在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。如下:

<result type="redirect">view.jsp?id=${id}</result>

多个Action共享一个视图--全局result配置

当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图。struts1中提供了全局forward,struts2中也提供了

相似功能:

<package ....>

<global-results>

<result name="message">/message.jsp</result>

</global-results>

</package>

为Action的属性注入值

Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属

性必须提供setter方法。

public class HelloWorldAction{

private String savePath;

public String getSavePath() {

return savePath;

}

public void setSavePath(String savePath) {

this.savePath = savePath;

}

......

}

<package name="itcast" namespace="/test" extends="struts-default">

<action name="helloworld" class="cn.itcast.action.HelloWorldAction" >

<param name="savePath">/images</param>

<result name="success">/WEB-INF/page/hello.jsp</result>

</action>

</package>

上面通过<param>节点为action的savePath属性注入“/images”

时间: 2024-10-21 07:57:44

学习Struts(2.3)的相关文章

如何学习struts并写第一个程序HelloWorld

在编写这个程序前,我觉得盲目地去跟着视频来敲代码或者看完视频后就去练习并不是个好办法.我的做法是:一.去把Struts框架的原理搞清楚,也可以去struts的官方网站 http://struts.apache.org 查阅,它的原理图如下: 简单介绍一下这个原理图的大致意思: (1).客户端发送请求后提交到一系列的过滤器,主要有三层,并且有一定顺序,先是ActionContextCleanUp过滤器,然后再到其他过滤器(SiteMesh等),再到FilterDispatcher过滤器. (2).

一脸懵逼学习Struts数据校验,数据回显,模型驱动,防止表单重复提交。

1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xml配置的方式进行表单数据的校验. (3)代码方式验证Action中所有的方法:代码方式验证Action中指定的方法:xml方式验证Action中所有的方法:xml方式验证Action中指定的方法: 2:代码方式验证Action中所有的方法(自己记得导jar包和我配置web.xml文件,自己脑补吧):

javaweb学习-struts配置详解

-package : 定义一个包 *包作用:管理 action,一个业务模块一个包 -name:包的名字,包名不能重复 -extends:当前包继承哪一个包 -abstract:表示当前包为抽象包,抽象包中不能有action abstract = true 只有当前的包被其他包继承时才有用! <package name = "basePackage" extends="struts-default" abstract="true">&

Struts学习傻瓜式入门篇

或许有人觉得struts不容易学,似乎里面的一些概念让未接触过的人迷惑,MVC1.MVC2.模式……我写这篇文章是想让从来没有接触过struts的人,能有个简单的入门指引,当然,系统地学习struts是必要的,里面有很多让人心醉的东东,那是后话了. 该案例包括首页,用户登陆.网站向导页面.就这么简单,没有深奥的struts概念,主要靠动手,然后用心体会. WEB Server用tomcat4.到http://jakarta.apache.org下载struts1.1,把zip文 件释放到c:\s

Struts入门学习(一)

刚开始学习框架的时候感觉很简单,都是用到javaEE的相关框架,自己就想研究源码,但是学了很久之后毫无头绪,所以还是扎扎实实学好Struts毕竟框架做起来要比自己写javaEE要简单,下面我们就来一步步的学习Struts吧, 首先学习的第一步就是添加jar包 可以去http://pan.baidu.com/s/1c0fHb8W这里下载,包括了jar包和配置文件将jar包导入项目的lib目录下,配置文件导入src下即可 第二部就是修改配置文件 首先在web.xml中添加  下面的代码这里就不过多解

j2ee学习路线

目前JAVA主要分三个方向:J2EE(java 2 enterprise edition,也就是JAVA的企业级标准,目前应用最多也最广泛,技术相对成熟).J2ME(java 2 micro editon,java在微型系统上的应用,像手机.PDA.电视机机顶盒一类,国家3G标准一旦实施,J2ME将会应用的更加广泛). J2SE(Java 2 Standard Edition标准版,主要用于个人用户) 如果有人想学J2EE的话,推荐一下学习进阶步骤: ①先学基本的JAVA语法,推荐<Thinki

Java学习路线&amp;怎么学习Java

1 概述 学过一段时间的同学一定会觉得Java学习最头疼的不是语法结构的繁杂,而是Java本身体系结构的庞大.以至于自己不知道接下去该学什么,或者什么样的知识才会对后续的学习有帮助.本节内容将让大家对Java学习的路线有个宏观的把握.在与市场接轨的前提下,我们会推荐给各位同学相关学习的方向和技术,以及学习到何种程度才能适应基本的工作. 好多同学可能会有如下的疑问: l  我已经学完JDBC了,那样参加工作够用了吗? l  Java SE学到什么样的程度算是OK了呢? l  东西好多啊,我改怎么学

目前见到的最傻瓜全面的STRUTS入门教程^_^

目前见到的最傻瓜全面的STRUTS入门教程^_^ 一  Jakarta Struts学习之新手上路 Web 应用开发早期曾经是那么的“简单”,那个时候还只是纯HTML页面和浏览器特效而已.由于还涉及不到动态数据操作和商业应用,也就省去了很多麻烦.但是这 样的“简单”只是过眼云烟,如今我们不得不为复杂的基于Web的商业应用开发采用诸多技术. 本文将介绍如何利用Struts进行应用开发的前台整合的开发过程.Struts是一个为开发基于模型(Model)-视图(View)-控制器 (Controlle

Spring+mybatis+struts框架整合的配置具体解释

学了非常久的spring+mybatis+struts.一直都是单个的用他们,或者是两两组合用过,今天总算整合到一起了,配置起来有点麻烦.可是配置完一次之后.就轻松多了,那么框架整合配置具体解释例如以下. 1.导入对应的jar包 由于我们建造的是maven的web项目,全部我们在pom.xml中须要导入这些包. pom.xml 具体凝视 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q