阿帕奇支柱是一个用于创建Java web应用程序的免费、开放源码框架。它的设计是为了便于使用模型-视图-控制器体系结构,它可以帮助你的应用程序保持清晰,直接,且易于维护。当时间来部署应用程序,阿帕奇Tomcat是对Struts的一个很好的补充,适合于Java servlet。让我们看看如何创建一个基本的Struts/Tomcat应用程序;我假设您已经有了一个功能齐全的Tomcat设置,并且希望开始使用Struts应用程序。
Struts中,2.3.4.1的最新产品发布,可下载或者通过发行版的包管理器。从项目网站下载的.zip文件包含所需的.jar文件以及文档和示例应用程序。
这是令人难以置信的直白地部署在Tomcat的样本之一。简单的struts-2.3.4.1 /应用/ Struts2的-blank.war复制到$ CATALINA_HOME / webapps中,重新启动Tomcat,然后访问http://本地主机:8080 / Struts2的空白/例子/的helloWorld.jsp看到的HelloWorld示例应用程序在行动。
它是怎么运行的?当你重新启动Tomcat,它解开了的.war归档到正确的目录结构,包括所有必要的.jar文件:
- webapps/struts2-blank是上下文根目录,其中存放.html和.jsp文件。
- webapps/struts2-blank/WEB-INF包含配置文件,比如web.xml。
- webapps/struts2-blank/WEB-INF/src包含源文件
- 的webapps / Struts2的空白/ WEB-INF / classes中包含的Java类。
- 的webapps / Struts2的空白/ WEB-INF / lib中包含该应用程序运行时库。
- 的webapps /支柱空白/ META-INF包含元数据信息,例如标签库。
当你写你自己的Struts应用程序,你需要确保建立自己这个结构。要创建一个全新的Struts应用程序,首先建立一个目录结构像这样,在$ CATALINA_HOME,其中mystruts是您的app名称:
- 的webapps / mystruts
- web应用/ mystruts / WEB-INF
- webapps / mystruts / web - inf / src
- webapps / mystruts / web - inf / classes
- web应用/ mystruts / WEB-INF / lib中
从struts2-blank中复制需要的.jar文件:
cd $ CATALINA_HOME / webapps / struts2-blank / web - inf / lib / cp commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar \ \ freemarker-2.3.19.jar javassist-3.11.0.GA.jar ognl-3.0.5.jar \ \ struts2-core-2.3.4.1.jar xwork-core-2.3.4.1.jar CATALINA_HOME美元/ webapps / mystruts / web - inf / lib
创建mystruts / web - inf /。xml,一个Tomcat的过滤器这将确保所有的URL由Struts的处理:
:的xsi =”http://www.w3.org/2001/XMLSchema-instance “的xsi:的schemaLocation =” http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/的JavaEE /网络app_2_5.xsd“> <滤波器> <滤波器名称> struts2的过滤器 - 名称> <滤波器级> org.apache.struts2.dispatcher.FilterDispatcher 滤波器级> 过滤器> <滤波器-mapping> <滤波器名称> struts2的过滤器 - 名称> / * URL模式> 过滤器映射> web的应用>
过滤器Struts2的
链接到类org.apache.struts2.dispatcher.FilterDispatcher
和所有的URL(/ *
)被发送到该滤波器。
我们的应用程序结构将是模型-视图-控制器。java将同时充当模型类和Action类,前者存储后端(在本例中,这只是一条消息),后者通过显示特定视图来响应用户操作。(在更复杂的示例中,您将拆分模型和Action类。)jsp和response.jsp文件充当不同的视图,向用户显示信息。
让我们查看文件开始。这些都走在上面mystruts目录,$ CATALINA_HOME / webapps /目录mystruts。该的Input.jsp代码如下所示:
<%@page contentType="text/html" page编码="UTF-8"%> <%@taglib uri="http://www.openlogic.com/struts-tags"前缀="s" %> My Struts
谁的Struts?
那taglib
在最上面一行说,我们将使用Struts标签,按照给定的URI,并与前面的他们(识别)小号
。再往下,我们使用Struts标签成立,其作用是调用MyStruts类的表单。它有一个文本框,称为用户名
,以及一个提交按钮。如果您理解HTML,这里的标记格式应该相当简单。
jsp文件更简单:
<%@页面的contentType = “text / html的” 的pageEncoding = “UTF-8” %> <%@标签库URI = “http://www.openlogic.com/struts-tags” 前缀= “S” %> 谁Struts的响应 TITLE> HEAD> H1> s的:形式> BODY> HTML>
标题是有趣的一行。属性值信息
调用的getMessage()
Action类,在这里是MyStruts的方法。(如果属性值分别为平
,它会调用getPing ()
方法。)然后将此方法返回的字符串显示给用户。
的形式简单地下方使用户返回到该输入形式。
接下来,让我们建立了我们的Action类,mystruts / WEB-INF / src目录/例子/ MyStruts.java:
打包例子;公共类MyStruts {私人字符串信息;私人字符串用户名;公共字符串执行(){setMessage(getUsername()+ “的Struts的”);返回“成功”;}公共字符串的getMessage(){返回消息;}公共无效setMessage(字符串消息){this.message =消息;}公共字符串getUsername(){返回用户名;}公共无效setUsername(字符串username){this.username =用户名;}}
这应该很简单;get和set方法完全按照它们在罐头上说的做。注意,我们必须有execute ()
方法,以在调用操作类时运行。
最后,我们需要编辑mystruts/WEB-INF/classes/struts.xml来将所有这些类绑定在一起:
< ?编码="UTF-8" ?> <结果名称= "成功" > /响应。jsp
此代码与特定的类特定的操作。该行动被称为的Input.jsp,这个代码将它引导到正确的类和运行execute ()
方法。的结果MyStruts.execute()
然后用的response.jsp显示有关。
为了让一切运行,我们需要将这些文件编译成子目录中的类:
CD $ CATALINA_HOME / webapps /目录WEB-INF javac的-d类的src /例子/ MyStruts.java
重新启动Tomcat,并去看看在http://本地主机:8080 / mystruts /的Input.jsp。您应该看到您的形式,当你输入一个名称,然后单击发送它应该工作。
到目前为止,一切顺利!但是,如果查看http://localhost:8080/mystruts/mystruts。操作,它将直接将您发送到response.jsp页面,但是由于没有输入名称,所以它将使用Null。要解决这个问题,请改变execute ()
方法在MyStruts.java:
进口com.opensymphony.xwork2.ActionSupport;公共类MyStruts扩展了ActionSupport {...公共字符串的execute(){如果(getUsername()!= NULL){setMessage(getUsername()+ “的Struts的”);返回成功;}其他{返回NONE;}} ...}
我们现在扩展引用Action接口ActionSupport类,它看起来像这样:
public interface Action {public static final String SUCCESS = " SUCCESS ";public static final String NONE = " NONE ";public static final String ERROR = " ERROR ";public static final字符串INPUT = " INPUT ";public static final String LOGIN = " LOGIN ";公共字符串execute()抛出异常;}
您还需要编辑struts.xml:
<行动name = " MyStruts " class = "的例子。MyStruts"> /input。结果jsp < / > < name =“成功”结果> /响应。行动结果jsp < / > < / >
这将创建一个重定向(其开始从客户端的新要求,丢失任何现有数据 - 而不是像一个取消按钮)回到原来的输入页面,如果没有存储的名称。
重新编译应用程序并重新启动Tomcat和http://localhost:8080/mystruts/mystruts。action或http://localhost:8080/mystruts/mystruts都应按预期执行。
为了从http使这项工作://本地主机:8080 / mystruts,添加index.html的根目录:
<!DOCTYPE HTML PUBLIC “ - // W3C // DTD HTML 4.0过渡// EN”> 装载MyStruts ... p> BODY> HTML>
在创建index.html之后,不需要重新启动Tomcat。
接下来的步骤和资源
这是在Struts的和Tomcat如何合作基本面貌。一旦你已经得到了基本概念下,有大量的详细信息,在那里让你Struts的专家地位在任何时间。该Struts 2文档都是优秀而全面的,包括教程、指南和一本烹饪书。还有一个收藏Struts 2个的插件可用,虽然这些都不是官方的Struts框架的一部分,所以买家当心。然而,他们可以是一个伟大的选择,如果你不想推倒重来;它们可以使你的Struts web应用程序的开发更快运行。