struts 2 第一个示例——迹忆客-ag捕鱼王app官网
正如我们已经从 struts 2 架构中了解到的那样,当我们在 struts 2 web 应用程序中单击超链接或提交 html 表单时,输入由控制器收集,然后发送到名为 actions 的 java 类。 执行 action 后,结果会选择一个资源来呈现响应。资源通常是 jsp,但也可以是 pdf 文件、excel 电子表格或 java 小程序窗口。
假设我们已经构建了开发环境。 现在,让我们继续构建我们的第一个 hello world struts2 项目。 该项目的目的是构建一个 web 应用程序,该应用程序收集用户名并显示“hello world”,后跟用户名。
我们必须为任何 struts 2 项目创建以下四个组件
序号 | 组件 | 说明 |
---|---|---|
1 | action | 创建一个动作类,它将包含完整的业务逻辑并控制用户、模型和视图之间的交互。 |
2 | interceptors | 如果需要,创建拦截器,或使用现有的拦截器。 这是控制器的一部分。 |
3 | view | 创建一个 jsp 来与用户交互从而获取输入并呈现最终消息。 |
4 | configuration files | 创建配置文件来耦合操作、视图和控制器。 这些文件是 struts.xml、web.xml、struts.properties。 |
我们将使用 idea,以便在动态 web 项目下创建所有必需的组件。 我们从 struts 2 环境安装 一节已经创建了一个项目,我们直接使用那个项目。
创建 action 类
action 类是 struts 2 应用程序的关键,我们在 action 类中实现了大部分业务逻辑。 因此,让我们在 java resources > src 下创建一个 java 文件 helloworldaction.java
,其包名称为 com.jiyik.struts2
,内容如下。
当用户单击 url 时,action 类响应用户操作。 执行 action 类的一个或多个方法并返回 string 结果。 根据结果的值,呈现特定的 jsp 页面。
package com.jiyik.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”的执行方法。
struts 2 框架将创建一个 helloworldaction
类的对象并调用执行的方法来响应用户的操作。 我们将业务逻辑放入此方法中,该方法最终返回 string 常量。 换句话说,对于每个 url,我们必须实现一个操作类,可以直接使用该类名称作为我们的操作名称,也可以使用 struts.xml
文件映射到其他名称。
创建视图
我们需要一个 jsp 来呈现最终信息,当发生预定义的操作时,struts 2 框架将调用此页面,并且此映射将在 struts.xml 文件中定义。 因此,让我们在项目的 web 文件夹中创建以下 jsp 文件 hello.jsp
。
<%@ page contenttype = "text/html; charset = utf-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
hello world
hello world, ${name}
taglib 指令告诉 servlet 容器该页面将使用 struts 2 标记,并且这些标记将以 s 开头。
s:property
标记显示动作类属性“name>”
的值,该值由 helloworldaction 类的 getname()
方法返回。
创建ag捕鱼王app官网主页
我们还需要在 web 文件夹中创建 index.jsp。 该文件将用作初始操作 url,用户可以单击该 url 以告知 struts 2 框架调用 helloworldaction
类的已定义方法并呈现 hello.jsp 视图。
<%@ page language = "java" contenttype = "text/html; charset = iso-8859-1"
pageencoding = "iso-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
hello world
上述视图文件中定义的 hello 动作将使用 struts.xml 文件映射到 helloworldaction 类及其执行方法。 当用户单击“提交”按钮时,它将导致 struts 2 框架运行在 helloworldaction 类中定义的执行方法,并且基于该方法的返回值,将选择适当的视图并将其呈现为响应。
配置文件
我们需要一个映射来将 url、helloworldaction 类(模型)和 hello.jsp(视图)联系在一起。 该映射告诉 struts 2 框架哪个类将响应用户的操作(url),该类的哪个方法将被执行,以及基于该方法返回的字符串结果呈现什么视图。
因此,让我们创建一个名为 struts.xml 的文件。 由于 struts 2 要求 struts.xml 存在于 classes 文件夹中。 因此,在 web/web-inf/classes 文件夹下创建 struts.xml 文件。 默认情况下,idea 不会创建“classes”文件夹,因此我们需要自己创建。 struts.xml 应该看起来像
/hello.jsp
关于上面的配置文件需要理解的几句话。在这里,我们将常量 struts.devmode
设置为 true,因为我们在开发环境中工作,我们需要查看一些有用的日志消息。然后,我们定义了一个名为 helloworld 的包。
当我们想将操作组合在一起时,创建一个包很有用。在我们的示例中,我们将操作命名为“hello”,它对应于 url /hello.action
,并由 helloworldaction.class
支持。 helloworldaction.class
的 execute 方法是调用 url /hello.action
时运行的方法。如果执行方法的结果返回“成功”,那么我们将用户带到 hello.jsp。
下一步是创建一个 web.xml 文件,它是对 struts 2 的任何请求的入口点。struts2 应用程序的入口点将是部署描述符 (web.xml) 中定义的过滤器。因此,我们将在 web.xml 中定义 org.apache.struts2.dispatcher.defaultactionsupport
类的条目。 web.xml文件需要在 web 下的 web-inf 文件夹下创建。在创建项目时,idea 已经为我们创建了一个框架 web.xml 文件。所以,让我们修改如下
struts 2
index.jsp
struts2
org.apache.struts2.dispatcher.defaultactionsupport
struts2
/*
我们已经指定 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 指定了一个 consolehandler
用于将日志记录路由到 stdout 以及一个 filehandler。 可以使用 severe
、warning
、info
、config
、fine
、finer
、finest 或 all 设置处理程序的日志级别阈值。
就是这样。 我们已准备好使用 struts 2 框架运行我们的 hello world 应用程序。
这里我们使用 idea 运行struts 2。需要配置 tomcat server。可以参考 中关于 tomcat 配置的方法。