在慕课网《struts2入门》视频教程中,老师讲解的struts2环境搭建与基本知识是基于struts2.3版本的,目前最新版的struts是2.5版本的。本着与时俱进的原则,本人下载了2.5版本的参与学习,发现有很多地方还是有细微差别的,不注意就要折腾很久,现在汇总一下。
1、jar包的导入在struts2.3中,老师前后一共导入了9个常用jar包。但是在struts2.5中是没有xwork那个jar包的,所以不用导入也找不到,更不用再去低版本里去单独下载这个包,因为它和struts-core包合并了。其次,当我使用这8个包部署项目后,启动Tomcat会报错,原因是还少了log4j和slf4j这两个jar包,导入后就可以解决问题了。所以前后一共是10个jar包。如下图所示。
配置web.xml文件,在编写<filter-class>标签时,如果按照2.3版本写,用Ctrl+鼠标移动是不会出现链接的,也就是说写的不对。正确的写法是org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter,它与2.3版本相比少了一个ng包。完整的示例如下所示。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、struts.xml文件的配置
在eclipse下新建XML文件是不会有struts的dtd版本头部信息的。而老师的头部信息很明显是2.3版本的,2.5版本的头部信息如下,新建struts.xml时需要直接拷贝粘贴进去。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
</struts>
4、动态调用Action的方式
通过在<action>标签中指定method属性来调用的这种方式两者并无区别,但是如果是使用感叹号和通配符方式,与2.3版本是有细微的不同的。
如下有一个Action类,里面有两个方法update()和delete()。
public class HelloWorldAction extends ActionSupport {
@Override
public String execute() throws Exception {
return SUCCESS;
}
public String add(){ //通过指定method属性
return SUCCESS;
}
public String delete(){ //通过感叹号方式
return "delete";
}
public String update(){ //通过通配符方式
return "update";
}
}
感叹号方式和通配符方式的struts.xml文件配置示例如下,需要在global-allowed-methods标签或allowed-methods标签中指定相关的方法,多个方法要用“,”隔开。具体的标签含义及使用还是和struts2.3版本老师讲的一样,可参考视频教程,这里不再赘述。
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="default" namespace="/" extends="struts-default">
<global-allowed-methods>delete</global-allowed-methods>
<action name="helloworld" class="imooc.action.HelloWorldAction">
<result>/result.jsp</result>
<result name="delete">/delete.jsp</result>
</action>
</package>
</struts>
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="helloworld_*" method="{1}" class="imooc.action.HelloWorldAction">
<result>/result.jsp</result>
<result name="update">/{1}.jsp</result>
<allowed-methods>update</allowed-methods>
</action>
</package>
</struts>
热门评论
楼主总结的非常好,值得学习!
楼主总结的非常好,值得学习!
楼主是如何发现并解决这个问题的?我觉得自己非常欠缺这方面的能力