Eclipse JavaEE |1.8JDK |Tomcat8.0| 动态web项目3.1| struts2.5.2
我使用的是struts2.5.2版本,是目前的最新版本。需要的核心包如下:
其实包是看你自己需要,比如struts2-convention-plugin-2.5.2.jar包是用来使用注解的,如果不使用注解(即@result@action等等),就没必要加这个包。有人用Spring,那也要加载它相关的包。
我用的是全资源的包,所以能看源码,如果不需要,可以只下载核心包。
全资源的包解压缩后有四个文件夹,apps是war files的示例包;docs是各种html文件,算是解释文档;lib是所有的jar资源,但里面没有xwork-core这个jar;src是所有struts文件的源码,如果确实有需要,可以看看。当然,这些在github上一样能看到。
关于缺少指定包的报错,这里就不提了,认真查看报错内容,把缺少的包加进来就好。
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
config
struts-default.xml,struts-plugin.xml,/struts.xml
struts2
/*
说明:第三行和第四行有字样struts2.5,如果是2.0的版本就应该写成2.0。
第六行struts标签中的include标签代表引进了struts-default.xml,如果你需要配置很多action又觉得放在struts.xml里显得冗杂时,可以用这种方式引用其他struts的配置文件。
倒数第六行被我加了注释,因为我使用的是注解,所以不需要在此配置action,如果你们要配置,可以按照我的这个来写,这不是一个包含所有属性的语句,详细的还需要自己去查。
package标签里放置的是一组相关的action,name属性可以修改,就是一个标识作用,extends建议不要修改,另外还有一个namespace属性,默认是“/”,比如改成“/test”,那请求package标签内的action时必须写成/test/XXX.action才能读到这个action。
action标签的name就代表请求的.action的名字,实际指定的是class代表的java文件,书写格式“类名.包名”;method制定了调用的方法,要和请求的方法名相同。方法是要写成public String 方法名(){//代码块;return "success";}一旦这个action执行完之后,就会走action标签里的result,当return 后面的String与result标签的name相同时,就会执行这个result标签里包含的内容,这里是.jsp文件,那也可以继续指定执行其他action文件。
说到注解,让我又爱又恨,我第一次用它,报404,网页从未找到.action文件,后来创建了一个testaction,里面写了一个test方法,复制了一模一样的注解过来,结果这个test方法就顺利执行了,并跳转到了相应的界面。不管怎样,问题还是解决了。
我这里就直接粘贴自己的代码了。
import org.apache.struts2.convention.annotation.*;
import com.opensymphony.xwork2.ActionSupport;
@ParentPackage("struts-default")
@Results({@Result(name="all",location="all.jsp"),@Result(name="error",location="error.jsp")} )
public class TestAction extends ActionSupport {
@Action(value="test")
public String test(){
return "all";
}
}
说明:引入的包,上面提到的convention就是用来注解的。其实和struts.xml中package标签的内容是一致的。@Results只能写一个,但其中可以包含多个@Result,每个@Result必须写name和location,因为从下面被@Action标注的方法被调用之后,就会根据其返回的String和@Result的name属性进行比对,相同的话就将页面转到location属性指定的内容上,跳转的方式也是一个属性,这里没写就是默认的。注意@Results里的书写形式,不要忘记大括号,逗号。
struts标签库在jsp文件中引用:
<%@ taglib uri="/struts-tags" prefix="s" %>
我刚才就经历了uri的报错,uri下标注了红线,下文中所有的s标签都被警告,真是震惊到我了。因为之前一直好好的,我没改动过任何包和配置,也没改动这个jsp文件,竟然报错了。问题后来解决了,是jar包有问题。因为Tomcat重新启动的时候报一个LifeStyleClass的错(貌似这个错叫这个名字),eclipse提示无法读取jar包,我在项目里一个一个双击打开jar包,直到双击struts2-core-2.5.2.jar时提示该包损坏,我置换成新包之后就不报错了。
s标签很好用,我用它遍历action生成的list,在页面里输出了一个表格。看apps里的rest-showcase示例,它的jsp文件里用到了s标签。它的java文件用到了注解,很小的一个案例,可以看看。
务必继承AcitonSupport,只有这样struts才支持这个action,书写方法时可以覆盖原方法,也可以创建自己的方法。方法的声明都要写成
public String test(){
//代码块
return "success";//success只是默认的一个name
}
在action中,要想获取这些对象,需要借助ServletActionContext来获取。
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("list", list);
本文有任何错误还请指出,O(∩_∩)O谢谢。