使用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上一样能看到。

    遇到的问题

        关于缺少指定包的报错,这里就不提了,认真查看报错内容,把缺少的包加进来就好。

  1. 配置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>

  2. 配置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谢谢。

5 0
原创粉丝点击