使用struts2.5版本遇到的问题
来源:互联网 发布:徐达 知乎 编辑:程序博客网 时间:2024/05/16 05:15
我的环境
Eclipse JavaEE |1.8JDK |Tomcat8.0| 动态web项目3.1| struts2.5.2
struts相关包
我使用的是struts2.5.2版本,是目前的最新版本。需要的核心包如下:
其实包是看你自己需要,比如struts2-convention-plugin-2.5.2.jar包是用来使用注解的,如果不使用注解(即@result@action等等),就没必要加这个包。有人用Spring,那也要加载它相关的包。
struts包下载
我用的是全资源的包,所以能看源码,如果不需要,可以只下载核心包。
全资源的包解压缩后有四个文件夹,apps是war files的示例包;docs是各种html文件,算是解释文档;lib是所有的jar资源,但里面没有xwork-core这个jar;src是所有struts文件的源码,如果确实有需要,可以看看。当然,这些在github上一样能看到。
遇到的问题
关于缺少指定包的报错,这里就不提了,认真查看报错内容,把缺少的包加进来就好。
配置web.xml(项目》WebContent》WEB-INF》lib》web.xml)
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,/struts.xml</param-value></init-param></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>
配置struts.xml(struts.xml名字是固定的,应该在项目》Java Resources》src》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><include file="struts-default.xml"></include><!-- 指定默认编码集 --><constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 指定需要Struts2处理的请求后缀 --><constant name="struts.action.extension" value="do,action"></constant><!-- 设置浏览器是否缓存静态内容,开发阶段应关闭,生产阶段打开,默认为打开 --><constant name="struts.serve.static.browserCache" value="false"></constant><!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认为false,开发阶段应打开 --><constant name="struts.configuration.xml.reload" value="true"></constant><!-- 开发模式下使用,可以打印出更详细的错误信息 --><constant name="struts.devMode" value="true"></constant><!-- action全部用注解进行配置 --><!-- 是否开启动态方法调用 --><constant name="struts.enable.DynamicMethodInvocation" value="false" /><!--添加包 --><!-- <package name="tutorial" extends="struts-default"> <action name="p" class="JavaSource.AllPersonAction" method="show"> <result name="all" >all.jsp</result> <result name="error">error.jsp</result> </action> <action name="testAction" class="com.app.action.TestAction" method="test"> <result name="all" >all.jsp</result> <result name="error">error.jsp</result> </action> </package> --></struts>
说明:第三行和第四行有字样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文件。
3.注解
说到注解,让我又爱又恨,我第一次用它,报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里的书写形式,不要忘记大括号,逗号。
4.struts标签库
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文件用到了注解,很小的一个案例,可以看看。
5.Aciton文件创建
务必继承AcitonSupport,只有这样struts才支持这个action,书写方法时可以覆盖原方法,也可以创建自己的方法。方法的声明都要写成
public String test(){ //代码块 return "success";//success只是默认的一个name}
6.获取request,session,response
在action中,要想获取这些对象,需要借助ServletActionContext来获取。
HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("list", list);
本文有任何错误还请指出,O(∩_∩)O谢谢。
- 使用struts2.5版本遇到的问题
- 使用struts2.5版本遇到的问题
- 使用struts2.5版本遇到的问题
- 使用Struts2遇到的问题
- struts2 案例代码实现及遇到的问题【struts2.5版本】
- struts2 中使用 servlet遇到的问题
- 使用struts2 convention插件遇到的问题
- 使用struts2框架遇到的问题
- struts2遇到的问题
- Struts2遇到的问题
- 使用JNI的struts2项目在tomcat遇到的问题
- struts2+spring+hibernate使用中遇到的问题(转载)
- 在使用struts2的freemarker开发portlet时遇到问题
- Struts2中使用json遇到的一个小问题
- 说一说struts2 验证框架使用过程中遇到的问题
- 使用struts2实现下载功能遇到的文件中文问题
- 关于最新版本的log4net使用中遇到的问题
- 初学struts2遇到的问题
- 09-决策论
- 【opencv练习26 - 仿射变换】
- libnl库资料
- 2016年9月8号
- 【opencv练习27 - 直方图均衡】
- 使用struts2.5版本遇到的问题
- storm如何部署拓扑
- 欢迎使用CSDN-markdown编辑器
- iOS - IOS8 设置TableView Separatorinset 分割线从边框顶端开始
- ubuntu14.04 怎么打开rar的文件
- angularJS下载站点-编译后的版本下载
- HttpURLConnection下载文件带进度Code
- UITableView——dataSource
- handler, Looper, Message三者的关系,作者写的很好很详细。