从上一节中学到了Struts 2的架构,当你点击一个超链接或提交一个Struts2的Web应用程序的HTML表单中,输入被发送到一个Java类操作的控制器,收集。执行该操作后,结果选择了一个资源来呈现的响应。资源通常是一个JSP,但它也可以是一个PDF文件,Excel电子表格,或Java小应用程序窗口。
假设你已经建立开发环境。现在,让我们继续建立我们的第一个Hello World struts2项目。这个项目的目的是建立一个Web应用程序,收集用户的姓名,并显示“Hello World”,后面的用户名。我们将创建任何Struts2项目的四个组成部分:
SN | 组件 & 描述 |
---|---|
1 |
Action 创建一个Action类,其中将包含完整的业务逻辑和控制的用户,模型和视图之间的相互作用。 |
2 |
Interceptors 如果需要创建拦截器,或使用现有的拦截器。这是控制器的一部分。 |
3 |
View 创建一个JSP来与用户交互的输入和提交最后的消息。 |
4 |
Configuration Files 创建配置文件的动作,视图和控制器。这些文件是struts.xml中,web.xml中,struts.properties。 |
我要使用Eclipse IDE,所以下创建一个动态Web项目所需的所有组件。因此,让我们开始创建动态Web项目。
打开eclipse然后找 File > New > Dynamic Web Project 输入项目名称为:HelloWorldStruts2 在下面的屏幕中给出的选项,并设置其余部分:
选择在屏幕上的所有默认选项,最后打勾 Generate Web.xml deployment descriptor 选项. 这将创建一个动态Web项目在Eclipse中。
现在从Struts 2的lib文件夹下面的文件复制 C:\struts-2.2.3\lib 到我们的项目WEB-INF\lib 目录. 要做到这一点,你可以简单地将下降到WEB-INF\lib文件夹中的所有下列文件。
commons-fileupload-x.y.z.jar
commons-io-x.y.z.jar
commons-lang-x.y.jar
commons-logging-x.y.z.jar
commons-logging-api-x.y.jar
freemarker-x.y.z.jar
javassist-.xy.z.GA
ognl-x.y.z.jar
struts2-core-x.y.z.jar
xwork-core.x.y.z.jar
Action类是Struts 2的应用程序的关键,我们实现了大部分的Action类中的业务逻辑。因此,让我们创建一个的java文件HelloWorldAction.java下Java Resources > src 使用一个包名 com.tutorialspoint.struts2 用下面给出的内容.
Action类来响应用户的操作,当用户点击一个URL。 Action类中的一个或多个方法被执行,并返回一个字符串结果。基于结果的值,一个特定的JSP页面的呈现方式。
package com.tutorialspoint.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”属性。我们有标准的“名称”属性的getter和setter方法,返回字符串“成功”的执行方法。
Struts2框架的HelloWorldAction类将创建一个对象并调用execute方法在响应用户的操作。把业务逻辑里面的execute方法,并最终返回的字符串常量。简单地说,为每个URL你必须执行一个动作类,或者可以直接使用这个类的名称作为操作名,也可以映射到一些其他的名称使用struts.xml文件,如下图所示。
我们需要一个JSP提交最后的消息,这个页面会被称为Struts 2框架中预定义的动作时,会发生此映射将在struts.xml文件中定义的。因此,让我们创建下面的JSP文件 HelloWorld.jsp在WebContent文件夹在Eclipse项目中. 要做到这一点,右键单击WebContent文件夹中的项目资源管理器,然后选择 New >JSP File.
<%@ 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容器中,这个页面将使用Struts2标签,这些标签之前,将通过s。 s:property标签显示动作类‘name’的属性值,是调用HelloWorldAction 类的方法getName()。
我们还需要在WebContent文件夹中创建index.jsp页面文件。该文件将作为初始动作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>
hello动作作定义在上面的视图文件将被映射到HelloWorldAction类和它的执行方法使用struts.xml文件。当用户点击“提交”按钮,它会导致Struts2框架运行的执行方法定义在其中,HelloWorldAction类和方法的返回值的基础上,将相应的视图选择和呈现的一个响应。
我们需要一个映射,以配合URL,HelloWorldAction类(模型),HelloWorld.jsp(视图)。映射告诉Struts 2框架的类将响应用户的操作(URL),这一类的方法将被执行,什么视图来显示字符串结果的基础上,该方法返回。
让我创建一个文件为: struts.xml. 由于Struts 2的要求struts.xml存在的类文件夹中。 因此创建struts.xml在 WebContent/WEB-INF/classes 目录中. 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.tutorialspoint.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中execute方法是时运行的URL的方法 /hello.action被调用. 如果execute方法返回"success", 然后我们把用户引到HelloWorld.jsp.
下一步是创建一个web.xml文件这是任何请求发送到Struts2的一个切入点。Struts2的应用程序的入口点,将是一个部署描述符(web.xml)中定义的过滤器。
在web.xm文件中,我们定义一个过滤器org.apache.struts2.dispatcher.FilterDispatcher. web.xml文件需要创建WEB-INF文件夹下的WebContent。 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 (i.e, any url that match the pattern /*)
您可以启用完整的日志记录功能,通过创建工作和Struts2同时创建logging.properties文件在 WEB-INF/classes 文件,在属性文件中,请注意以下两行:
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].handlers = \ java.util.logging.ConsoleHandler
默认logging.properties指定ConsoleHandler的路由记录到stdout和也的FileHandler。一个处理程序的日志级别阈值可以设置使用SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST或ALL。
就是这样。我们已经准备好来运行我们的Hello World应用程序使用Struts 2框架。
右键点击项目名称,然后单击“Export > WAR File 创建一个WAR文件. 然后,这WAR部署在Tomcat的webapps目录下。最后,启动Tomcat服务器,并尝试访问URL: http://localhost:8080/HelloWorldStruts2/index.jsp.
这会给输出以下画面:
输入一个值为:"Struts2"然后提交页面. 您可以看到下一页如下:
请注意,您可以定义索引的动作,在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.tutorialspoint.struts2.HelloWorldAction"
method="execute">
<result name="success">/HelloWorld.jsp</result>
</action>
</package>
</struts>