Www.helper3.com
热门关键字: php net javascript java
Struts2基础 专题
专题目录
您的位置:java > Struts2基础专题 > Struts2注解示例
Struts2注解示例
作者:--    发布时间:2019-11-20 10:14:11
在这个教程,我们重复使用以前 strust2  hello world(xml版本)的例子,并将其转换成注解版本。

struts2 注解概念

struts2注解是由struts 2的约定插件的支持,所以,必须要了解其背后的“扫描方法”和“命名转换”机制的魔力。

1. 扫描方法

许多struts 2的文章或书籍说,可以配置过滤器的“init-param”或“struts.convention.action.packages”告诉struts2,其中扫描注解的类。 例如,

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.h3.common</param-value>
  </init-param>
</filter>

从测试(struts22.1.6和2.1.8版本),这是不正确的,不管你把在“param-value”还是 “struts.convention.action.packages“, 在struts 2会忽略它,并只扫描指定的文件夹命名:struts, struts2, action 或 actions 。

下面是扫描工作
  1. 扫描其位于包的命名注解的类 “struts, struts2, action 或 actions“.
  2. 接着,扫描相匹配下列任一条件的文件:
    • 实例了 com.opensymphony.xwork2.action 接口。
    • 扩展了 com.opensymphony.xwork2.actionsupport 类
    • 文件名用动作(例如:useraction,loginaction)结束

详细请查看这里struts 2 约定插件文件

2. 命名转换器

struts 2的约定插件将所有的注解操作文件名转换为指定的格式。

例如 : loginaction.java

  1. 首先,去掉“action”字符在文件名的末尾,如果存在的话。
  2. 其次,转换文件名的第一个字母为小写。
因此,去除结束并转换第一个字母为小写后,loginaction.action 将变为 login.action。
struts2约定插件的“扫描方法”和“命名转换”特性真正带来了很多的便利和好处,只有当你的struts2项目正确下面的命名约定才会带来好处; 否则,这将是一场灾难。

struts 2 注解例子

现在是时候开始转换过程了,我们使用myeclipse 10 创建一个工程为:struts2example。

最终的项目结构

2. loginaction

扩展actionsupport并创建了loginaction,什么也不做,actionsupport 默认返回 “success” 字符串,这将匹配 @result 并重定位到 “pages/login.jsp“.

注解版本

package com.h3.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="/login.jsp")
public class loginaction extends actionsupport{

}

xml 实现版本

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

3. welcomeuseraction

重写execute()方法并指定 @action 和 @result 注解。

注解版本

package com.h3.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="welcome_user.jsp")
	})
	public string execute() {

		return success;

	}
}

xml 实现版本

<package name="user" namespace="/user" extends="struts-default">
   <action name="welcome" class="com.h3.user.action.welcomeuseraction">
	<result name="success">/welcome_user.jsp</result>
   </action>
</package>
struts 2 注解 – @action, @result 和 @namespace 不言自明,可以将它与xml比较。@resultpath 可能需要一点点的解释,请参阅本 @resultpath示例

4. jsp视图页面

普通jsp视图页面来接受用户名和密码后点击提交按钮,并重定向到一个欢迎页面。

login.jsp

<%@ page contenttype="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head></head>
<body>
	<h1>struts 2 注解示例</h1>

	<s:form action="welcome">
		<s:textfield name="username" label="用户名" />
		<s:password name="password" label="密码" />
		<s:submit value="提交"/>
	</s:form>

</body>
</html>

welcome_user.jsp

<%@ page contenttype="text/html; charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head></head>
<body>
<h1>struts 2 注解示例</h1>

<h4>您好, <s:property value="username"/></h4>

</body>
</html>

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

提交到 http://localhost:8080/struts2example/user/welcome.action 后显示:

参考

  1. struts 2 约定插件文档
  2. strust 2 hello world (xml 版本)

滚动到顶部 滚动到底部
网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
QQ群:570078429
网站备案号:
粤ICP备17073857号