Struts2零配置
百度了下,貌似有使用Annotations和CoC两种。
但它们并不是真正的零配置,只是在一定情况下简化了。
我还是会比较喜欢原版的 = = 不过蛮写个demo看看。
首先是使用Annotations,
这就是jdk1.5开始提供的注解语法,与以往javadoc生成doc时所用的那些@author\@version等不同,拥有更强大的功能。
这里就不具体表述,只贴一个使用struts2中的result注解的demo,详细在网上可以找到很多资料。
首先还是web.xml:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<web-app version="2.4"
-
xmlns="http://java.sun.com/xml/ns/j2ee"
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
<welcome-file-list>
-
<welcome-file>login.action</welcome-file>
-
</welcome-file-list>
-
-
<filter>
-
<filter-name>struts2</filter-name>
-
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-
<init-param>
-
<param-name>actionPackages</param-name>
-
<param-value>web.action, test.action</param-value>
-
</init-param>
-
</filter>
-
-
<filter-mapping>
-
<filter-name>struts2</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
-
</web-app>
注意这里配struts2的filter时配上的init-param,
参数actionPackages表示放action的包,多个包之前用英文逗号分隔。
当你要访问action时,就直接访问类名(去掉action).action即可。
这里就不需要struts.xml来配置action了,那result怎么返回呢?且先看一个Action。
web.action.LoginAction
-
package web.action;
-
-
import org.apache.struts2.config.NullResult;
-
import org.apache.struts2.config.Result;
-
import org.apache.struts2.config.Results;
-
-
@Results({
-
@Result(name="success", type=NullResult.class, value="/success.jsp"),
-
@Result(name="fail", type=NullResult.class, value="/fail.jsp")
-
})
-
public class LoginAction {
-
-
return "fail";
-
}
-
-
return "success";
-
}
-
-
}
使用@Results可以表示它的结果集,各个可能的结果就在里面用一个个@Result来表示。
name就是return的内容,type一般是NullResult.class,还有很多其他种就是了 = =。value则是跳转的页面地址。
这样就完成了一个基本的acton,下面再写一个
test.action.TestAction
-
package test.action;
-
-
import org.apache.struts2.config.NullResult;
-
import org.apache.struts2.config.Result;
-
import org.apache.struts2.config.Results;
-
-
@Results({
-
@Result(name="success", type=NullResult.class, value="/success.jsp")
-
})
-
public class TestAction {
-
-
return "success";
-
}
-
-
}
它只有一个返回值。
现在我们随便做两个jsp,表示success和fail:
success.jsp
-
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
-
<html>
-
<head>
-
<title>Struts2 Zero Configuration</title>
-
</head>
-
-
<body>
-
<h3>Success</h3>
-
</body>
-
</html>
fail.jsp
-
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
-
<html>
-
<head>
-
<title>Struts2 Zero Configuration</title>
-
</head>
-
-
<body>
-
<h3>Fail</h3>
-
</body>
-
</html>
这时访问login.action,应该会跳转到Fail,访问login!login.action才能访问到success。
而访问test.action,就直接跳到success了。
这就完成了零配置。其实还是比较麻烦,因为它要对所有action都使用result。
而使用CoC,就不需要在各个Action中都写,
它的web.xml和annontations的配置一样,
但它还需要配置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-package" extends="struts-default">
-
<global-results>
-
<result>/success.jsp</result>
-
<result name="fail">/fail.jsp</result>
-
</global-results>
-
</package>
-
-
<constant name="struts.configuration.classpath.defaultParentPackage" value="default-package" />
-
</struts>
它用的是global-rsults,全局的。
因此所有action返回的result都会到这里,找到相应的映射跳出去。之前的那两个Action类就不需要任何注释了~
效果和annontations一样。这个比较简单 = = 但是好像不同action返回相同的结果那跳转的页面就都一样了 还是感觉不爱。。