Struts 2
一、准备工作及实例 1.解压struts-2.1.6-all.zip apps目录:struts2自带的例子程序 docs目录:官方文档。 lib 目录:存放所有jar文件。 Src 目录:源文件存放地 2.六个基本包 struts2-core-2.1.6.jar :开发的核心类库 freemarker-2.3.13.jar :struts2的UI标签的模板使用freemarker编写 commons-logging-1.0.4.jar :日志包 ognl-2.6.11.jar :对象图导航语言,通过它来读写对象属性 xwork-2.1.2.jar :xwork类库,struts2在其上进行构建 commons-fileupload-1.2.1.jar:文件上传组件,2.1.6版本后必须加入此jar包 特别需要说明的是目前strust2的最新版本是struts-2.1.6,它作为2.1X的正式版。特别要注意导入commons-fileupload-1.2.1.jar包,在此jar包中包含了RequestContext类,如果不导入该jar包将会报异常。 3.初识struts2配置文件 (1).web.xml文件 需要配置过滤器 主要完成对StrutsPrepareAndExecuteFilter的配置(在以前的版本中是对FilterDispatcher配置,新版本同样支持用FilterDispatcher配置),它的实质是一个过滤器,它负责初始化整个Struts框架并且处理所有的请求。这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml配置文件,还有的会影响struts框架的行为。除了StrutsPrepareAndExecuteFilter外,Struts还提供了一个ActionContexCleanUp类,它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。 (2).struts.xml文件 框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。这也是我们要配置的主要文件。 (3).struts.properties(参default.properties) 在Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。要改变这些属性,只需在struts.properties文件中指定属性的key和value即可。属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。我们可以在struts-default.properties文件中找到一个属性的列表。 (4)struts-default.xml 此文件是struts2框架默认加载的配置文件,它定义了struts2一些核心bean和拦截器,它会自动包含(included)到struts.xml文件中(实质是通过<package extends="struts-default">),并为我们提供了一些标准的配置。我们可以在struts2-core.jar中找到这个文件。 (5)其它配置文件 velocity.properties,struts-default.vm,struts-plugin.xml 4.让MyEclipse提示xml信息 当我们在编写struts.xml时,发现eclipse并不会给出帮助提示,那是因为MyEclipse默认并不支持struts2,所以我们需要手工导入dtd以支持提示。步骤:[window][preferences][MyEclipse][Files and Editors][XML][xml Catelog]然后在右边点add添加:location为dtd文件所在的位置(struts-2.0.dtd文件struts2-core-2.1.6.jar中可以得到),KeyType选择URI,Key为struts-2.0.dtd文件中文档声明的内容(http://struts.apache.org/dtds/struts-2.0.dtd),在struts.xml文件中也有此key值。 5.如何使用alt+/提示 在MyEclipse6.5中,默认的提示为Ctrl+Space,而它会与我们的输入法切换冲突,使提示失效。找到key,先取消Content Assist命令的绑定,再用“alt+/”来绑定。 6.实例 步骤一,新建myStruts2项目,并导入struts2的六个基本jar包。 步骤二,建立LoginAction文件,主要代码如下: package com.asm; import com.opensymphony.xwork2.Action; public class LoginAction implements Action { private String username; private String password; ...省略get/set方法 public String execute() throws Exception { if (username.equals("struts2")) { return "loginSuccess"; } else { return "loginFailure"; } } } 说明:实现了Action接口,主要是为了保证execute的正确定义,其实我们也可以不实现此接口,只要能保证execute方法书写的正确书写(方法名,返回值)。 步骤三,在struts.xml文件中注册LoginAction。此配置文件要放在src目录下,实质就是成为classpath环境变量下的文件。主要代码如下: <?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> <package name="myFirst" namespace="/" extends="struts-default"> <action name="login" class="com.asm.LoginAction"> <result name="loginSuccess">/success.jsp</result> <result name="loginFailure">/failure.jsp</result> </action> </package> </struts> 说明:package后面会有详细说明。action元素中的name属性值指定了此action所指定的请求路径为“login.action”。后面login.jsp中的<form action=...>属性值就会参照此name属性。 步骤四、提供jsp页面 login.jsp主要代码: <body> <form action="<%=request.getContextPath()%>/login.action" method="get"> 户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="login"> </form> </body> failure.jsp主要代码 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <html> <body> 登录失败,错误的用户名:<s:property value="username"/><br> <a href="<%=request.getContextPath()%>/login.jsp">返回</a> </body>