在struts2中运用注解是把sttuts.xml文件中package节点的action配置在action类中用注解语句声明。
我们知道通常情况下,Struts2是通过struts.xml配置的。但是随着系统规模的加大我们需要配置的文件会比较大,虽然我们可以根据不同的系统功能将不同模块的配置文件单独书写,然后通过<include>节点将不同的配置文件引入到最终的struts.xml文件中,但是毕竟还是要维护和管理这些文件,因此也会给维护工作带来很大的困扰。为了解决这个问题,可以考虑使用struts2的注解。实际上struts2中最主要的概念就是package、action以及Interceptor等等概念,所以只要明白这些注解就可以了。
下面以一个注册和登录的小例子来讲解struts2的注解。
一:在原来jar包的基础上导入一个包struts2-convention-plugin-2.1.8.1.jar。
二:具体的代码:
登录页面:login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>注解登录页面</title> </head> <body> <form action="login" method="post"> 用户名:<input name="userName" type="text"><br> 密码:<input name="userPwd" type="password"><br> <input type="submit" value="login"> </form> </body> </html>
注册页面:register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>注解注册页面</title> </head> <body> <form action="register" method="post"> 用户名:<input name="userName" type="text"><br> 密码:<input name="userPwd" type="password"><br> <input type="submit" value="register"> </form> </body> </html>
登录或注册成功页面:index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- 显示登录或注册成功的信息 --> ${message } </body> </html>
action:AnnoAction类
package action; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import com.opensymphony.xwork2.ActionSupport; @ParentPackage("struts-default") @Namespace("") public class AnnoAction extends ActionSupport { private static final long serialVersionUID = 1L; private String userName; private String userPwd; private String message; //登录方法 @Action(value="login", results={ @Result(name = "loginSucc", location = "/index.jsp"), @Result(name = "loginError", location = "/login.jsp") }) public String login(){ if(userName.equals("")){ return "loginError"; } message="登录成功!"; return "loginSucc"; } //注册方法 @Action(value="register", results={ @Result(name = "registerSucc", location = "/index.jsp"), @Result(name = "registerError", location = "/register.jsp") }) public String register(){ if(userName.equals("")){ return "registerError"; } message="注册成功!"; return "registerSucc"; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPwd() { return userPwd; } public void setUserPwd(String userPwd) { this.userPwd = userPwd; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
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> <!-- 用了注解后下面的代码就可以不用了 --> <!-- <package name="default" extends="struts-default"> <action name="user" class="annoAction"> <result>/index.jsp</result> <result name="input">/login.jsp</result> </action> </package> --> </struts>
这样就完成了一个基于注解的action配置。
总结常用的注解如下:
Namespace:指定命名空间。
ParentPackage:指定父包。
Result:提供了Action结果的映射。(一个结果的映射)
Results:“Result”注解列表
ResultPath:指定结果页面的基路径。
Action:指定Action的访问URL。
Actions:“Action”注解列表。
ExceptionMapping:指定异常映射。(映射一个声明异常)
ExceptionMappings:一级声明异常的数组。
InterceptorRef:拦截器引用。
InterceptorRefs:拦截器引用组。