正如您已经从Struts 2体系结构中学到的,当您在Struts 2 Web应用程序中单击超链接或提交HTML表单时,Controller会收集输入,并将其发送到名为Actions的Java类.执行Action后,结果将选择一个资源来呈现响应.资源通常是JSP,但它也可以是PDF文件,Excel电子表格或Java applet窗口.
假设您已经构建了开发环境.现在,让我们继续构建我们的第一个 Hello World Struts2 项目.此项目的目的是构建一个Web应用程序,该应用程序收集用户的名称并显示"Hello World",后跟用户名.
我们必须为任何Struts创建以下四个组件2项目 :
Sr.No | 组件&说明 |
---|---|
1 | 动作 创建一个动作类,它将包含完整的业务逻辑并控制用户,模型和视图之间的交互. |
2 | 拦截器 如果需要,可以创建拦截器,或者使用现有的拦截器.这是Controller的一部分. |
3 | 查看 创建JSP以与用户交互以获取输入并显示最终消息. |
4 | 配置文件 创建配置文件以配合Action,View和Controllers.这些文件是struts.xml,web.xml,struts.properties. |
我将使用Eclipse IDE,以便在Dynamic Web Project下创建所有必需的组件.现在让我们开始创建动态Web项目.
启动Eclipse,然后使用文件>新>动态Web项目并输入项目名称为 HelloWorldStruts2 并设置以下屏幕中给出的其余选项 :
在下一个屏幕中选择所有默认选项,最后选中生成Web.xml部署描述符选项.这将在Eclipse中为您创建一个动态Web项目.现在使用 Windows>显示视图> Project Explorer ,您将看到项目窗口的内容如下:
现在将以下文件从struts 2 lib文件夹 C:\struts-2.2.3\lib 复制到我们项目的 WEB-INF \ lib 文件夹.为此,您只需将以下所有文件拖放到WEB-INF \lib文件夹中即可.
commons-fileupload- xyzjar
commons-io-xyzjar
commons-lang-xyjar
commons-logging -xyzjar
commons-logging-api-xyjar
freemarker-xyzjar
javassist- .xy.z.GA
ognl-xyzjar
struts2-core-xyzjar
xwork -core.xyzjar
操作类是Struts 2应用程序的关键,我们实现动作类中的大部分业务逻辑.那么让我们在 Java Resources下创建一个java文件HelloWorldAction.java. src ,包名为 com.it1352.struts2 ,内容如下.
当用户点击时,Action类会响应用户操作一个URL.执行一个或多个Action类的方法,并返回String结果.根据结果的值,呈现一个特定的JSP页面.
package com.it1352.struts2; public class HelloWorldAction { private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
这是一个非常简单的类,有一个名为"name"的属性.我们有"name"属性的标准getter和setter方法以及返回字符串"success"的execute方法.
Struts 2框架将创建 HelloWorldAction的对象类并调用已执行的方法以响应用户的操作.您将业务逻辑放在此方法中,最终返回String常量.换句话说,对于每个URL,您必须实现一个操作类,并且可以直接使用该类名作为操作名称,也可以使用struts.xml文件映射到其他名称,如下所示.
我们需要一个JSP来呈现最终的消息,当预定义的动作发生时,这个页面将被Struts 2框架调用,这个映射将会在struts.xml文件中定义.因此,让我们在您的eclipse项目的WebContent文件夹中创建以下jsp文件 HelloWorld.jsp .为此,右键单击项目资源管理器中的WebContent文件夹,然后选择新建> JSP文件.
<%@ page contentType = "text/html; charset = UTF-8" %> <%@ taglib prefix = "s" uri = "/struts-tags" %> <html> <head> <title>Hello World</title> </head> <body> Hello World, <s:property value = "name"/> </body> </html>
taglib指令告诉Servlet容器该页面将使用 Struts 2 标签,并且这些标签将在前面 s .
s:property标签显示动作类属性"name>"的值,该值由方法 getName().
我们还需要在WebContent文件夹中创建 index.jsp 这个文件将作为初始操作URL,用户可以单击该URL告诉Struts 2框架调用HelloWorldAction类的已定义方法并呈现HelloWorld.jsp视图.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1" pageEncoding = "ISO-8859-1"%> <%@ taglib prefix = "s" uri = "/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Hello World</title> </head> <body> <h1>Hello World From Struts2</h1> <form action = "hello"> <label for = "name">Please enter your name</label><br/> <input type = "text" name = "name"/> <input type = "submit" value = "Say Hello"/> </form> </body> </html>
我们需要一个映射来将URL,HelloWorldAction类(Model)和HelloWorld.jsp(视图)绑定在一起.映射告诉Struts 2框架哪个类将响应用户的操作(URL),该类的哪个方法将被执行,以及基于该方法返回的String结果呈现什么视图.
因此,让我们创建一个名为 struts.xml 的文件.由于Struts 2要求struts.xml存在于classes文件夹中.因此,在WebContent/WEB-INF/classes文件夹下创建struts.xml文件. Eclipse默认情况下不会创建"classes"文件夹,因此您需要自己执行此操作.要执行此操作,请右键单击项目资源管理器中的WEB-INF文件夹,然后选择新建>夹的.你的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> <constant name = "struts.devMode" value = "true" /> <package name = "helloworld" extends = "struts-default"> <action name = "hello" class = "com.it1352.struts2.HelloWorldAction" method = "execute"> <result name = "success">/HelloWorld.jsp</result> </action> </package> </struts>
关于上述配置文件,很少需要理解.在这里,我们将常量 struts.devMode 设置为 true ,因为我们正在开发环境中工作,我们需要查看一些有用的日志消息.然后,我们定义一个名为 helloworld 的包.
当您想要将操作组合在一起时,创建包非常有用.在我们的示例中,我们将操作命名为"hello",它对应于URL /hello.action ,并由 HelloWorldAction.class 备份. HelloWorldAction.class 的执行方法是在调用URL /hello.action 时运行的方法.如果execute方法的结果返回"success",那么我们将用户带到 HelloWorld.jsp .
下一步是创建一个 web .xml 文件,它是对Struts 2的任何请求的入口点.Struts2应用程序的入口点将是在部署描述符(web.xml)中定义的过滤器.因此,我们将在web.xml中定义org.apache.struts2.dispatcher.FilterDispatcher类的条目.需要在WebContent下的WEB-INF文件夹下创建web.xml文件.在您创建项目时,Eclipse已经为您创建了一个框架web.xml文件.所以,让我们修改它如下 :
<?xml version = "1.0" Encoding = "UTF-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "WebApp_ID" version = "3.0"> <display-name>Struts 2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <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> </web-app>
我们已将index.jsp指定为欢迎文件.然后我们将Struts2过滤器配置为在所有URL上运行(即,匹配模式/*的任何url)
通过在 WEB-INF/classes 文件夹下创建 logging.properties 文件,可以在使用Struts 2时启用完整的日志记录功能.在你的属性文件中保留以下两行 :
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].handlers = \ java.util.logging.ConsoleHandler
默认的logging.properties指定用于将日志记录路由到stdout以及FileHandler的ConsoleHandler.可以使用SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST或ALL设置处理程序的日志级别阈值.
就是这样.我们准备使用Struts 2框架运行Hello World应用程序.
右键单击项目名称并单击导出>用于创建War文件的WAR文件.
然后在Tomcat的webapps目录中部署此WAR.
最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp .这将为您提供以下屏幕和减号;
输入值"Struts2"并提交页面.你应该看下一页
注意你可以将 index 定义为struts.xml文件中的操作,在这种情况下,您可以将索引页调用为 http://localhost:8080/HelloWorldStruts2/index.action .检查下面如何将索引定义为动作 :
<?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> <constant name = "struts.devMode" value = "true" /> <package name = "helloworld" extends = "struts-default"> <action name = "index"> <result >/index.jsp</result> </action> <action name = "hello" class = "com.it1352.struts2.HelloWorldAction" method = "execute"> <result name = "success">/HelloWorld.jsp</result> </action> </package> </struts>