Struts 2 Hello World注释示例

在本教程中,它将重用以前的Strust 2 Hello World(XML版本)示例,并将其转换为注释版本。

下载它– Struts2-Hello-World-Annotation-Example.zip

Struts 2注释概念

Struts 2约定插件支持Struts 2注释,因此,您必须了解其“ 扫描方法 ”和“ 命名转换器 ”机制背后的魔力。

1.扫描方法

许多Struts 2文章或书籍都指出,您可以配置过滤器的“ init-param ”或“ struts.convention.action.packages ”来告诉Struts 2在何处扫描带注释的类。 例如,

web.xml

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  <init-param>
	<param-name>actionPackages</param-name>
	<param-value>com.mkyong.common</param-value>
  </init-param>
</filter>

根据我的测试(Struts2版本2.1.6和2.1.8),这是不正确的,无论您在“ param-value ”或“ struts.convention.action.packages ”中添加了什么,Struts 2都将忽略它,并且仅扫描名为struts,struts2,一个或多个动作的指定文件夹。

扫描方式如下

  1. 扫描位于打包的名为“ struts,struts2,action或actions ”的带注释的类。
  2. 接下来,扫描符合以下任一条件的文件:
    • 实现com.opensymphony.xwork2.Action接口。
    • 扩展com.opensymphony.xwork2.ActionSupport类。
    • 文件名以Action结尾(例如,UserAction,LoginAction)。

请参阅Struts 2常规插件文档

2.命名转换器

Struts 2约定插件会将所有带注释的操作文件名转换为指定格式。

例如: LoginAction.java

  1. 首先,删除文件名末尾的“ Action”一词(如果有)。
  2. 第二,将文件名的首字母转换为小写。

因此,在删除结尾并转换第一个字母的大小写之后, LoginAction.action将更改为login.action

仅当您的Struts 2项目正确遵循命名约定时,Struts 2约定插件的“扫描方法”和“命名转换器”功能才真正带来很多便利和好处。 否则将是一场彻底的灾难。

Struts 2注释示例

现在是时候开始转换过程了。

最终项目结构

Struts2 hello world annotation

1.更新pom.xml

要使用Struts 2注释功能,您需要下载struts2-convention-plugin.jar
pom.xml

...
    <dependency>
          <groupId>org.apache.struts</groupId>
	  <artifactId>struts2-core</artifactId>
	  <version>2.1.8</version>
    </dependency>
	
    <dependency>
          <groupId>org.apache.struts</groupId>
	  <artifactId>struts2-convention-plugin</artifactId>
	  <version>2.1.8</version>
    </dependency>
...

2. LoginAction

创建一个LoginAction扩展了ActionSupport ,什么也不做, ActionSupport默认返回一个“成功”字符串,它将匹配@Result并重定向到“ pages / login.jsp ”。

注释版本

package com.mkyong.user.action;

import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;

import com.opensymphony.xwork2.ActionSupport;

@Namespace("/User")
@ResultPath(value="/")
@Result(name="success",location="pages/login.jsp")
public class LoginAction extends ActionSupport{

}

等价的XML

<package name="user" namespace="/User" extends="struts-default">
	<action name="Login">
		<result>pages/login.jsp</result>
	</action>
</package>

3. WelcomeUserAction

重写exe​​cute()方法,并指定@Action和@Result批注。

注释版本

package com.mkyong.user.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;

import com.opensymphony.xwork2.ActionSupport;

@Namespace("/User")
@ResultPath(value="/")
public class WelcomeUserAction extends ActionSupport{

	private String username;
	 
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	@Action(value="Welcome", results={
		@Result(name="success",location="pages/welcome_user.jsp")
	})
	public String execute() {

		return SUCCESS;

	}
}

等价的XML

<package name="user" namespace="/User" extends="struts-default">
   <action name="Welcome" class="com.mkyong.user.action.WelcomeUserAction">
	<result name="SUCCESS">pages/welcome_user.jsp</result>
   </action>
</package>

在Struts 2个注解- @Action,@Result@Namespace是不言自明,你可以随时与XML等价进行比较。 @ResultPath可能需要一点解释,请参见此@ResultPath示例

4. JSP视图页面

普通的JSP视图页面接受用户名和密码,并在单击“提交”按钮后重定向到欢迎页面。

login.jsp







Struts 2 Hello World Annotation Example

welcome_user.jsp







Struts 2 Hello World Annotation Example

Hello

5. struts.xml

无需创建struts.xml文件,所有类均已注释。

6. web.xml

只需创建一个经典的web.xml文件,然后将FilterDispatcher过滤器声明为正常即可。

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Struts 2 Web Application</display-name>
  
  <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>

7.运行

LoginAction.action更改为login.action ,请参见上面的“命名转换器”。
http:// localhost:8080 / Struts2Example / User / login.action

Struts 2 annotation login screen

http:// localhost:8080 / Struts2Example / User / Welcome.action

Struts 2 annotation welcome screen

参考

  1. Struts 2 Convention Plugin文档
  2. Strust 2 Hello World(XML版本)

翻译自: https://mkyong.com/struts2/struts-2-hello-world-annotation-example/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值