Struts2框架实战一

  1 struts2 概述

Struts2 是一种基于 MVC 模式的轻量级 Web 框架,它自问世以来,就受到了广大 Web 开发者的关注,并广泛应用于各种企业系统的开发中。目前掌握 Struts2 框架几乎成为 Web 开发者的必备技能之一。接下来将针对 Struts2 的特点、安装以及执行流程等内容进行详细的讲解。  
在介绍 Struts2 之前,先来认识一下 Struts1。Struts1 是最早的基于 MVC 模式的轻量级 Web 框架,它能够合理的划分代码结构,并包含验证框架、国际化框架等多种实用工具框架。但是随着技术的进步,Struts1 的局限性也越来越多的暴露出来。为了符合更加灵活、高效的开发需求,Struts2 框架应运而生。 
Struts2 是 Struts1 的下一代产品,是在 Struts1 和 WebWork 技术的基础上进行合并后的全新框架(WebWork 是由 OpenSymphony 组织开发的,致力于组件化和代码重用的 J2EE Web 框架,它也是一个 MVC 框架)。虽然 Struts2 的名字与 Struts1 相似,但其设计思想却有很大不同。实质上,Struts2 是以 WebWork 为核心的,它采用拦截器的机制来处理用户的请求。这样的设计也使得业务逻辑控制器能够与 ServletAPI 完全脱离开,所以 Struts2 可以理解为 WebWork 的更新产品。 
Struts2 拥有优良的设计和功能,其优势具体如下: 
	项目开源,使用及拓展方便,天生优势。 
	提供 Exception 处理机制。 
	Result 方式的页面导航,通过 Result 标签很方便的实现重定向和页面跳转。 
	通过简单、集中的配置来调度业务类,使得配置和修改都非常容易。 
	提供简单、统一的表达式语言来访问所有可供访问的数据。 
	提供标准、强大的验证框架和国际化框架。 
	提供强大的、可以有效减少页面代码的标签。 
	提供良好的 Ajax 支持。 
	拥有简单的插件,只需放入相应的 JAR 包,任何人都可以扩展 Struts2 框架,比如自定义拦截器、自定义结果类型、自定义标签等,为 Struts2 定制需要的功能,不需要什么特殊配置,并且可以发布给其他人使用。 
	拥有智能的默认设置,不需要另外进行繁琐的设置。使用默认设置就可以完成大多数项目程序开发所需要的功能。 
上面列举的就是 Struts2 的一系列技术优势,只需对它们简单了解即可,在学习了后面的知识后,会慢慢对这些技术优势有更好的理解和体会。

  

2.1   Struts2 环境搭建

 

2.1.1 下载 struts2 开发包

 

 

2.1.2 struts2 开发包目录介绍

 

 

Struts2 的文件夹结构 
从图中可以看出,展示的是解压后的 Struts2.3.24 的目录结构,为了让大家对每个目录的内容和作用有一定的了解,接下来针对这些目录进行简单介绍,具体如下: 
	apps:该文件夹存用于存放官方提供的 Struts2 示例程序,这些程序可以作为学习者的学习资料,可为学习者提供很好的参照。各示例均为 war 文件,可以通过 zip 方式进行解压。 
	docs:该文件夹用于存放官方提供的 Struts2 文档,包括 Struts2 的快速入门、Struts2 的文档,以及 API 文档等内容。 
	lib:该文件夹用于存放 Struts2 的核心类库,以及 Struts2 的第三方插件类库。 
	src:该文件夹用于存放该版本 Struts2 框架对应的源代码。 
有了 Struts2 的开发环境,接下来我们可以进行 Struts2 的开发了。 

  

 

3、开发入门

 

3.1 开发包介绍

 

 

 

3.2 开发环境

 

1)创建web工程导入jar包

 

 

 

2)配置Struts2的核心控制器

Struts2的核心控制器:是一个过滤器

在web.xml中配置

 

 

 

 

3)配置Struts2的核心配置文件

位置:src【类的根目录下】

名称:struts.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
导入约束:dtd约束 
去核心包下找:struts2-core-2.3.24.jar/struts-2.3.dtd
在上面文件的第三十行
-->
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts></struts>

  

4)启动tomcat不报错的话,环境就搭建成功了

 

 

 

3.3 开发入门

在页面有一个请求,我们使用一个类来接收请求,在控制输出一句话,并且响应之后跳转到一个成功页面。

1)index.jsp

在这个页面中,有一个url

 

 

 

2)编写HelloAction类

在struts2中把接收请求的类叫动作类

 

3)在struts.xml中配置动作类

<?xml version="1.0" encoding="UTF-8"?>

<!-- 导入约束: 
 约束的位置:在struts2的核心jar包中    struts2-core-2.3.24.jar中包含一个名称为
 :struts-2.3.dtd的约束文件  在上面文件的第三十行
--> 
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

	
<struts>

	<!-- 常量配置:开发者模式-->
	<constant name="struts.devMode" value="true"></constant>
		<!-- 开启动态方法调用 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	
	  <!--
	package标签解释
		作用:以面向对象的思想配置文件
			  一个包继承了父包,能够把父包的所有配置都继承下来
	     属性:
	     name:包的名称,名称随便写,但是不能重复
	     extends:继承那个包,名字固定不能随便写
	     abstract:定义的抽象包,定义抽象包,写一个true即可,没有action的标签
	           才能定义为抽象包
	     
		  namespace:名称空间,以面向对象的思想管理url
		  		举例:
		  			namespace="/n1"
		  			action的name="hello"
		  			访问url:/n1/hello.action
		  	细节:1)名称空间的/不能少,框架定好的
		  		 2) 默认的名称空间:“” 
	  -->
	<package name="p1" extends="struts-default" >
	
		<!-- 
		action:配置动作名称与动作类与动作方法的之间的关系
		属性
			name:动作名称,名称可以随意写,但是不能重复,他是url地址的一部分
			class:对应的动作类,默认值:com.opensymphony.xwork2.ActionSupport
			method:对应的动作方法,默认值是execute
			
		动作类的三种编写方式:
			1)第一种:无侵入式编写【一般不用】
			2)第二种:实现Action接口【一般少用】
			3)第三种:继承ActionSupport类【常用】
		 -->	
		<action name="hello" class="com.itheima.web.action.HelloAction" method="sayHello">
			<result name="yes" type="dispatcher">/success.jsp</result>
		</action>
	
	</package>
	
	<!-- action的三种调用方式:入口看inde.jsp -->
	
	
	<package name="user" extends="struts-default"   >
		<!-- 第一种完全匹配 -->
		
		<!-- <action name="addUser" class="com.itheima.web.action.UserAction" method="addUser" >
			<result name="yes" type="dispatcher">success.jsp</result>
		</action>
		
		<action name="deleteUser" class="com.itheima.web.action.UserAction" method="deleteUser">
			<result name="yes" type="dispatcher">success.jsp</result>
		</action>
		
		<action name="updateUser" class="com.itheima.web.action.UserAction" method="updateUser">
			<result name="yes" type="dispatcher">success.jsp</result>
		</action>
		
		<action name="findUser" class="com.itheima.web.action.UserAction" method="findUser">
			<result name="yes" type="dispatcher">success.jsp</result>
		</action> -->
		
		<!-- 第二种:通配的方式:【项目中使用的比较多】 -->
		<!-- 
			一个*号:用*匹配动作名称,在method属性中使用{1} 获取对应的字符
		 -->
		<!-- <action name="*" class="com.itheima.web.action.UserAction" method="{1}">
			<result name="yes" type="dispatcher">success.jsp</result>
		</action> -->
		
		<!-- 
			多个*号:
				使用*号来匹配动作名称,*_*,获取第一个字符串{1},获取第二个字符串{2}
		 -->
		<action name="*_*" class="com.itheima.web.action.UserAction" method="{1}{2}">
			<result name="yes" type="dispatcher" >success.jsp</result>
		</action>
		
		<!-- 
		第三种 :动态方法调用:【一般不用】
		1)开启动态方法调用的支持配置一个常量
	struts.enable.DynamicMethodInvocation = true
		2)访问规则是:
			动作名称!动作方法.action
		-->
		<action name="user" class="com.itheima.web.action.UserAction" >
			<result name="yes" type="dispatcher" >success.jsp</result>
		</action>
	</package>

</struts>

  

4)编写一个响应的succ.jsp页面  

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>入门成功</title>
  </head>
  <body>
    成功入门
  </body>
</html>

5)测试即可

 

3.4   Struts2 的执行过程

执行时序:

 

  

 

 

内部执行流程:

 

 

第2章 struts2 的配置文件详解

通过上图,我们知道了学习 struts2 框架,配置文件的重要性。那么在 struts2 中给我们提供了 6 个配置文件。他们的加载时机是 tomcat 启动服务一加载我们的应用时,就加载 struts2 的配置文件。

他们的加载顺序入下图:

顺序 	配置文件名 	                           所在位置 	                                               说明 
1 	default.properties 	struts2-core-2.3.15.3.jar\org\a pache\struts2 	                            不能修改 
2 	struts-default.xml 	struts2-core-2.3.15.3.jar 	                                            不能修改 
3 	strtuts-plugin.xml 	在 struts2 提供的插件 jar 包中 	                                            不能修改 
4 	struts.xml 	                  我们的应用中 	                                                    我们修改的:推荐 
5 	struts.properties 	          我们的应用中 	                                                    我们修改的 
6 	web.xml 	                  我们的应用中 	                                                    我们修改的,可以给过滤器配置参数 

  

配置文件的注意事项  

 

1、Struts2 提供了两种配置的方式。一种是 key=value 的方式,即使用.properties 文件。另一种是 xml 文件配置。我们推荐使用 xml 文件(它能描述层级关系)。

当多个配置文件中,有相同的参数,后加载的会把前面的值给覆盖了。

 

 

 struts2 中的常用常量

 

常量定义在了 default.properties 配置文件中,体现形式都是 key=value。所有的 struts2 应用都会用到这些常量。

                常用的:

 

 

 

 

 

 

 

         struts.xml 中的标签详解

truts.xml 中的标签详解 
3.2.1 constant 标签 
3.2.1.1 作用: 
 	 用于修改 struts2 中的常量 
3.2.1.2 属性: 
 	 	name:指定常量的 key  	 	value:指定常量的值 
3.2.2 package 标签 
3.2.2.1 作用: 
  在 struts2 的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。 
3.2.2.2 属性: 
 	 	name:包的名称。必须写。且必须唯一。 
  extends:一般情况下需要继承 struts-default 包,但不是必须的。不过如果不继承的话,将无法使用 struts2 提供的核心功能。
struts-default.xml 中定义着 struts-default 这个包。而 struts-default.xml 是在我们的 struts.xml 加载之前加载。 abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包。 namespace:名称空间。它的作用是把访问的 URL 按照模块化来管理。 名称空间的写法:
必须以/开头
后面可以是字母和数组的组合,也可只有字母。
如果有数字的话,数字不能作为/后面的第一个字符。 当我们指定了名称空间之后,访问的 URL 就变成了:名称空间+action 标签的 name 属性取值
例如:/n1/hello.action
/customer/addCustomer.action
/customer/editCustomer.action
/linkman/findAllLinkMan.action
/linkman/removeLinkMan.action

  

 action 标签

 

 

作用: 
 建立动作名称和动作类以及动作方法的对应关系。 
3.2.3.2 属性: 
name:指定的动作名称。和页面中 url 后面保持一种。注意此处不能后缀。动作名称必须唯一。  	 	
class:指定的是动作类的全限定类名。 method:指定的是动作方法名称

  

 

posted @ 2018-03-14 21:30  不是超人也会飞  阅读(189)  评论(0)    收藏  举报