原文地址:https://www.tutorialspoint.com/struts_2/

【注释】项目结构,次序估计有误

通过学习Struts2的架构,我们可以知道,在Struts2 web应用中,当你点击一个超链接、或者提交一个HTML表单的时候,用户的input将被传到Controller,之后Controller把input发送给叫做Action的Java class. 在Action被执行之后,Result会决定将哪个资源作为response的内容返回。这个资源通常是Jsp,当然也可以是一个PDF文件,又或者是个表格,或是Java applet窗口,等等。

假定你已经搭建好了开发所需要的环境。现在我们开始构建一个 Hello World struts2 project. 这个项目的目的是:创建一个web应用,可以输入用户的姓名,在用户提交后显示“Hello World” + “用户姓名”。下面4个组件是任何Struts2 project中都必须具备的:

SN Components & Description
1 Action

Create an action class which will contain complete business logic and control the interaction between the user, the model, and the view.

2 Interceptors

Create interceptors if required, or use existing interceptors. This is part of Controller.

3 View

Create a JSPs to interact with the user to take input and to present the final messages.

4 Configuration Files

Create configuration files to couple the Action, View and Controllers. These files are struts.xml, web.xml, struts.properties.

我们打算使用Eclipse IDE,因此所有需要的组件都将被创建在一个动态Web工程下,所以让我们首先创建一个“Dynamic Web Project”。

创建一个 Dynamic Web Project:

启动你的Eclipse,然后依次打开 File > New > Dynamic Web Project 并且输入项目名“HelloWorldStruts2 ” ,其余选项不必改变(默认值就ok):

最后需要勾选 Generate Web.xml deployment descriptor 这个选项. 创建好的工程目录如下所示:

现在,把底下的这些文件从Struts2 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类:

Action类是Struts2应用程序的核心,我们通过它实现大多数的业务逻辑。因此,我们首先在Java Resources > src 下创建一个HelloWorldAction.java,内容如下所示。

当用户点击一个URL时,由Action类响应用户操作。一个或者多个Action类的方法被执行,并且将返回一个String类型的result。基于这个result值,一个特定的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;
}
}

这是一个非常简单的class,仅有一个叫做“name”的属性,这个属性具备标准的 getters 和setter 以及一个execute()的方法。

你也可以将你的动作名直接作为你的类名,或者如下面内容所示,使用 struts.xml 文件映射到其他名字上。

创建View

我们需要一个JSP来呈现最终信息。WebContent/HelloWorld.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容器(JSP只不过是Servlet的另一种写法!)这个页面将使用Struts2标签,并且这些标签将以s开头。

s:property 标签显示Action类“name”属性的值,这个值是使用HelloWorldAction类的 getName() 方法返回的。

创建主界面:

这个JSP用作初始的action URL. 用户可以通过点击该页面中的submit去请求HelloWord.jsp视图,其结果就是促使Struts2框架去调用action hello

WebContent/index.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 action将通过struts2.xml映射到的HelloWorldAction,最终调用HelloWorldAction中的execute()方法,并获取它的返回值,以此决定呈现哪个视图。

配置文件

我们需要一个“映射”把URL、HelloWorldAction class (Model),以及HelloWorld.jsp (the view)联系在一起。

这个“映射”告诉Struts2框架哪个class将响应用户的action(也就是URL),class的哪个方法将会被执行,方法返回的result所对应的视图是哪个。

WebContent/WEB-INF/classes/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>

关于上面的配置文件,有几点要说明。

  1. 这里我们设定常数struts.devMode的值为,因为我们是在开发环境下工作,需要查看一些有用的日志消息。
  2. 然后,我们定义一个名为helloworld的数据包。当你想要把你的Actions集合在一起时,创建一个数据包是非常有用的。

在我们的示例中,action被命名为“hello”,当URL /hello.action被调用的时候,HelloWorldAction.class 中的execute方法将被执行,如果execute方法的返回结果为success,那么就把HelloWorld.jsp呈现给用户。

下一个步骤是是创建一个web应用部署描述文件,它是把请求传给Struts2的一个接入点。

我们在web.xml中定义一个oforg.apache.struts2.dispatcher.FilterDispatcher类的接入点。

WEB-INF/classes

<?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>

<url-pattern>/*</url-pattern>:在所有的URL上运行Struts2 过滤器。

启用详细日志:

WEB-INF/classes/logging.properties

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。

这样,我们就准备好使用Struts2运行我们的Hello World程序了。

执行应用程序

把程序打包成war然后部署到tomcat下,输入URL:http://localhost:8080/HelloWorldStruts2/index.jsp

输入Struts2,然后提交

定义索引页面的方法(通过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>

Struts2笔记04——Hello World Example(转)的更多相关文章

  1. struts2 笔记04 杂记

    流程: 1. StrutsPrepareAndExcuteFilter:StrutsPrepareAndExcuteFilter作为前端控制器,是整个Struts2的调度中心. 2. ActionMa ...

  2. JS自学笔记04

    JS自学笔记04 arguments[索引] 实参的值 1.对象 1)创建对象 ①调用系统的构造函数创建对象 var obj=new Object(); //添加属性.对象.名字=值; obj.nam ...

  3. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

  4. 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)

    机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...

  5. CS229 笔记04

    CS229 笔记04 Logistic Regression Newton's Method 根据之前的讨论,在Logistic Regression中的一些符号有: \[ \begin{eqnarr ...

  6. SaToken学习笔记-04

    SaToken学习笔记-04 如果有问题,请点击:传送门 角色认证 在sa-token中,角色和权限可以独立验证 // 当前账号是否含有指定角色标识, 返回true或false StpUtil.has ...

  7. Redis:学习笔记-04

    Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...

  8. Java:并发笔记-04

    Java:并发笔记-04 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 本章内容-3 线程状态转换 活跃性 Lock 3.10 重新理解线程状态转换 假设有线 ...

  9. struts2.1笔记04:struts2优点

随机推荐

  1. java 服务接口API限流 Rate Limit

    一.场景描述 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统. 也就是面对大流量时,如何进行流量控制? 服务接口的流量 ...

  2. java 读取world的图片 并把图片路径存入数据库

    package World; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcep ...

  3. shell学习五十八天----/proc文件系统

    /proc文件系统 前言:linux中的/proc文件系统,由一组文件夹和文件组成,挂载(mount)与/proc文件夹下. /proc文件系统是一种虚拟文件系统,以文件系统文件夹和文件形式,提供一个 ...

  4. diamond源码阅读-diamond-client

    读取数据 DiamondManager manager = new DefaultDiamondManager("DEFAULT_GROUP", "zml", ...

  5. hfut 1287

    http://acm.hfut.edu.cn/OnlineJudge/ 中文题. 区间线段树,需要剪枝.n的大小有问题. #include <iostream> #include < ...

  6. 【BZOJ1925】[Sdoi2010]地精部落 组合数+DP

    [BZOJ1925][Sdoi2010]地精部落 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从 ...

  7. 【BZOJ2242】[SDOI2011]计算器 BSGS

    [BZOJ2242][SDOI2011]计算器 Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ ...

  8. Xamarin.Forms学习之位图(二)

    上篇文章分享了如何加载网络图片和PCL中的图片,所以今天继续分享关于如何加载平台的内嵌图片,在这之前说一下上篇文章开头的一个问题:为什么不能加载UWP项目,这是因为我升级了UWP的SDK,而Xamar ...

  9. xampp怎么操作数据库mysql

    1.打开软件的主界面,打开Apache和MySQL,然后点击MySQL后面的admin.且我操作时,Apache,MySQL要启动,才打的开. 2.打开MySQL,报错. 09:00:23 [mysq ...

  10. php7/etc/php-fpm.d 配置

    php7/etc/php-fpm.d/www.conf nginx php-fpm 高并发优化 - 日记本的回忆 - 博客园 https://www.cnblogs.com/cocoliu/p/856 ...