⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第一章:struts2入门.txt

📁 struts2.0入门介绍
💻 TXT
📖 第 1 页 / 共 2 页
字号:
一. 下载
   http://struts.apache.org/download.cgi
二. 介绍
   Apache Struts 2是一个优秀的,可扩展的企业级Java WEB应用程序框架.
   是基于webwork2的框架,是WebWork和Struts社区二者的合并
   功能:
     1) 框架中包括了标签库。标签与框架的验证和国际化特性相交互,来确保输入的正确和输出范围.标签库可以用在JSP,FreeMarker,或Velocity.当然,其它的标签库,JSTL,和AJAX也可以使用,可选的同Struts标签.JSF组件也支持.
三. 新特性
  比struts1.x与webwork2.x
  1) Action不同,吸取webwork的action的特定,不需要继承任何接口
  2) 线程模式不同,struts1.x的action是单例的,2.0是一个请求一个实例,没有线程安全问题,但web容器保证不会产生性能问题和过多的垃圾对象
  3) servlet容器依赖,action对request和response进行了封装,可以不依赖这些对象,但有需要,仍可访问它们。
  4) 可测试性,提供了StrutsTestCase,可以很方便的模拟一些对象,进行单元测试
  5) 简化了actionform,不需要继承任何父类
  6) 表达式语言,struts1整合了jstl,2.0使用Ognl
  7) 校验不同,1.x用validatorForm+配置文件,2.x用xwork框架,XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
  8) Struts1 支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。Struts2 支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
四、环境要求
  servlet2.4+jsp2.0+jdk5.0
五、开发工具
  目前J2EE开发工具主要分为Eclipse和NetBeans两大阵营,Eclipse的最高版本为3.3,NetBeans 的最高版本为6.0.MyEclipse 是一个功能强大且框架支持非常广泛的WEB 开发插件,该产品是收费项目。目前MyEclipse 的最高版本为6.0,即便如此,尚不支持Struts2.0,我们只能手工配置Struts2.0 的开发环境。
六、库文件
  从网站上下载的Struts2 包含了二三十个库文件,但大多数是可选的,有些库是插件,用于和其他框架的整合。
  读者可自行下载struts2-blank-2.1.0.war 压缩包,展开后是一个非常简单的项目,从WEB-INF/lib 目录中可以看到5个库文件,解释如下:
	包名				说明
	commons-logging-1.0.4.jar	日志管理
	freemarker-2.3.8.jar		表现层框架,定义了struts2的可视组件主题(theme)
	ognl-2.6.11.jar			OGNL表达式语言,struts2 支持该EL
	struts2-core-2.0.10.jar		struts2 的核心库
	xwork-2.0.4.jar			webwork的核心库,自然需要它的支持

七. struts常用包与类分析
  ,基本上每一个Struts2 类都访问了WebWork提供的功能,从而也可以看出Struts2 与WebWork千丝万缕的联系。但无论如何,Struts2 的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2 只是在WebWork的基础上做了适当的简化、加强和封装,并少量保留Struts1.x 中的习惯。
  1. 常用包
    org.apache.struts2.components 
      该包封装视图组件,Struts2 在视图组件上有了很大加强,不仅增加了组件的属性个数,更新增了几个非常有用的组件,如updownselect、doubleselect、datetimepicker、token、tree等。另外,Struts2 可视化视图组件开始支持主题(theme),缺省情况下,使用自带的缺省主题,如果要自定义页面效果,需要将组件的theme属性设置为simple。
    org.apache.struts2.config 
      该包定义与配置相关的接口和类。实际上,工程中的xml 和properties 文件的读取和解析都是由WebWork 完成的,Struts 只做了少量的工作。
    org.apache.struts2.dispatcher 
      Struts2 的核心包,最重要的类都放在该包中。
    org.apache.struts2.impl 
      该包只定义了3 个类, 他们是StrutsActionProxy 、StrutsActionProxyFactory、StrutsObjectFactory,这三个类都是对xwork的扩展。
    org.apache.struts2.interceptor : 定义内置的截拦器。
    org.apache.struts2.util : 实用包
    org.apache.struts2.validators : 只定义了一个类:DWRValidator。
    org.apache.struts2.views : 提供freemarker、jsp、velocity等不同类型的页面呈现。

  2. 常用的类
    org.apache.struts2.dispatcher.Dispatcher 
      该类有两个作用:
	1)、初始化
	2)、调用指定的Action的execute()方法。
    org.apache.struts2.dispatcher.FilterDispatcher 
      这是一个过滤器,有四个作用:
	1)、执行Action
	2)、清理ActionContext,避免内存泄漏
	3)、处理静态内容(Serving static content)
	4)、为请求启动xwork’s的截拦器链。

八、工作机制
    1. 表示一次Action请求所要经过的Servlet filters(Servlet 过滤器)。ActionContextCleanUp 的可选过滤器,这个过滤器对于Struts2 和其他框架的集成很有帮助,例如:SiteMesh Plugin。最后一个filter就是我们注册的过滤器FilterDispatcher。
    2. FilterDispatcher首先会根据请求的URL解析出对应的action 名称,然后去咨询ActionMapper这个action是否需要被执行。
    3. 如果ActionMapper决定这个action需要被执行,把工作委派给ActionProxy。接着它会咨询配置管理器,并读取在struts.xml文件中定义的配置信息。接下来ActionProxy会创建ActionInvocation对象。
    4. ActionInvocation是Xwork原理的(Command模式)实现部分。它会调用这个Action已定义的拦截器(before方法),Action方法,Result方法。
    5. 最后,看上面流程的图的方向,它会再执行拦截器(after方法),再回到Servlet Filter部分
    6. 最后结束,并传给用户一个结果响应,返回到result定义的结果页面。

    http请求-->一系列过滤器(FilterDispatcher)-->ActionMapper-->ActionProxy(读取xwork.xml)-->创建Action对象(command模式)-->方法前拦截器-->excute方法并定位返回的视图-->方法后拦截器-->响应视图

九、WebWork的三个关键组件
    1、  Action
    一般一个Action代表一次请求或调用,是基于Command模式的实现。在WebWork中,一般Action类需要实现Action接口,或者直接继承基础类ActionSupport。不要将业务逻辑放在Action中。
    2、  Result。
    它是一个结果页面的定义。它用来指示Action执行之后,如何显示执行的结果。Result Type表示如何以及用哪种视图技术展现结果。通过Result Type,WebWork可以方便的支持多种视图技术;而且这些视图技术可以互相切换,Action部分不需做任何改动。
    3、  Interceptor。
    WebWork的拦截器,WebWork截获Action请求,在Action执行之前或之后调用拦截器方法。这样,可以用插拔的方式将功能注入到Action中。WebWork框架的很多功能都是以拦截器的形式提供出来。例如:参数组装,验证,国际化,文件上传等等。

十、用eclipse开发struts2.0
  1. 在eclipse中配置用户库
     选择菜单Window->Preferences->Java->Build Path->User Libraries。
     new--add jars--添加27个jar包
  2. 新建web项目,导入用户库struts2.0
     右击项目--build path--add libraries--user library--选中struts2.0--完成
  3. 修改web.xml,加上struts2.0的过滤器
	  <filter>
	    <filter-name>struts2</filter-name>
	    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	  </filter>
	  <filter-mapping>
	    <filter-name>struts2</filter-name>
	    <url-pattern>/*</url-pattern>
	  </filter-mapping>
     默认情况下,该过滤器拦截请求字符串中以.action 结尾的请求,并将该请求委托给指定的Action 进行处理。

  4. 新建org.accp.struts2.action.LoginAction
	import com.opensymphony.xwork2.ActionSupport;
	/**
	 * 理论上不用继承或实现任何类接口,但为了减少程序的编码量
	 */
	public class LoginAction extends ActionSupport{
		/**
		 * 在父类中定义了方法execute(),当用户向该Action发送请求时自动调用<p>
		 * 该类还封装了几个有用的功能<p>
		 * getText():从资源文件中获取国际化消息<p>
		 * addFieldError():验证输入未通过时添加错误消息,支持国际化<p>
		 */
	  public String execute() throws Exception{
		return this.SUCCESS;
	  }
	}
   5. 创建全局配置文件struts.xml
   在src(编译后到WEB-INF\classes)下创建struts.xml 文件,这是Struts2 的配置文件,类似于Struts1.x中的struts-config.xml,在struts.xml 文件中可以配置Action、Bean、Interceptor 等组件。
   可以拷贝struts-default.xml中的dtd

	<?xml version="1.0" encoding="UTF-8" ?>
	<!DOCTYPE struts PUBLIC
	    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	    "http://struts.apache.org/dtds/struts-2.0.dtd">
	<struts>
	  <include file="struts-default.xml"></include>
	  <package name="a" extends="struts-default">
	    <action name="login" class="org.accp.struts2.action.LoginAction">
	      <result>/index.jsp</result>
	    </action>
	  </package>
	</struts>
  
    1) include 
      包含其他xml 文件,在示例中,这意味着struts.xml 可以访问定义在struts-default.xml 文件中的组件。该元素可以使得Struts2 定义多个配置文件,“分而治之”。要注意的是,任何一个struts2 配置文件都应该和struts.xml 有相同的格式,包括doctype,并且可以放在类路径下的任何地方。
    2) package
      为Action或截拦器分组。
      name:名称,必填项,名称自定义,没特别要求。方便别的package引用。
      extends:package 能继承其他的package,即通过该属性实现,值为另一个package的name。在示例中,extends =”struts-default”是从struts-default.xml 中继承的。
    3) action 
      定义Action,name属性为访问时用到的名称,class属性是Action的类名。
    4) result 根据Action的返回值定义页面导航。缺省是SUCCESS
	Action的预定义的返回值有:
	String SUCCESS = "success";
	String NONE = "none";
	String ERROR = "error";
	String INPUT = "input";
	String LOGIN = "login";
      比如,当Action返回SUCCESS时希望转到ok.jsp页面,则可以这样写:
      <result name=”success”>ok.jsp</result>

   6. 写返回页面index.jsp
	<%@ page pageEncoding="gbk"%>
	<body>
	  <h1 style="color:red">第一个struts2.0应用程序成功发布,希望再接再励,渐入佳境</h1>
	</body>
   7. 访问
      http://localhost:8080/test/login.action

   8. 修改index.jsp,加上登陆
	<%@ page pageEncoding="gbk"%>
	<%@ taglib prefix="s" uri="/struts-tags" %>
	<html>  
	<body>
	  <font color="red"><s:property value="message" /></font>
	  <s:form action="login">
	  <table>
	    <tr><td><s:textfield label="用户名" name="uname"/></td></tr>
	    <tr><td><s:password label="密  码" name="upass"/></td></tr>
	    <tr><td><s:submit/></td></tr>
	  </table>
	  </s:form>
	</body>
	</html>

   9. 修改LoginAction,处理验证
	public class LoginAction extends ActionSupport{
		private String uname;
		private String upass;
		private String message;
		
	  public String execute() throws Exception{
		if(!uname.equals(upass)) {
			setMessage("用户名或密码错误");
			return this.INPUT;
		}
		return this.SUCCESS;
	  }
	  public getter/setter() {}
	}

   10. 修改struts.xml
	<?xml version="1.0" encoding="UTF-8" ?>
	<!DOCTYPE struts PUBLIC
	    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	    "http://struts.apache.org/dtds/struts-2.0.dtd">
	<struts>
	  <include file="struts-default.xml"></include>
	  <package name="a" extends="struts-default">
	    <action name="login" class="org.accp.struts2.action.LoginAction">
	      <result>/main.jsp</result>
	      <result name="input">/index.jsp</result>
	    </action>
	  </package>
	</struts>

   11. 加上main.jsp
	<%@ page pageEncoding="gbk"%>
	<%@ taglib prefix="s" uri="/struts-tags" %>
	<html>  
	<body>
	  <h1 style="align:center;color:blue"><s:property value="uname" />,欢迎登陆!</h1>
	</body>
	</html>

   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -