打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Struts2使用详解及错误归纳
正文索引[ 隐藏 ]
                                        ★Struts2开发步骤
1.加载struts2类库
2.配置web.xml
 3.开发视图层页面--hello.jsp
4.开发控制层Action--HelloAction.java
5.配置struts.xml
6.部署、运行项目。
 ★错误归纳
1.struts.xml的位置问题。
2.Action接受参数的问题。
3.There is no Action mapped for namespace / and action name UserAction
4. ognl.OgnlException: target is null for setProperty(null, "name", [Ljava.lang.String;@346633b5)
★Struts2开发步骤
最生动的莫过于实例,看代码是学习编程的最好途径。
1.加载struts2类库
【点击下载】,复制到/WEB-INF/lib下。
2.配置web.xml


<filter>  
    <filter-name>struts2</filter-name>  
    <filter-class>  
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter   
    </filter-class>  
</filter>  
       
<filter-mapping>  
    <filter-name>struts2</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>  


 3.开发视图层页面--hello.jsp


<h1>Welcom!</h1>   
<div>   
    <h1>   
        <!-- 显示Struts Action中message属性内容 -->   
        ${message}   
    </h1>   
</div>   
<hr />   
<div>   
    <form action="HelloGo.action">   
        请输入您的姓名:   
        <input name="user.name" type="text" />   
        <input type="submit" value="提交" />   
    </form>   
</div>   


【注意】:12行中使用user.name是因为我把name封装在类UserInfo里,调用时必须加上对象名user。
4.开发控制层Action--HelloAction.java


public class HelloAction {   
    private String message;   
    private UserIf user;   
    ...//message和user的set,get方法   
  
    public String execute() {   
        this.setMessage("你好,"+this.user.getName()+"!");   
        return "success";   
    }   
}  


【注意】:此处的user必须是和hello.jsp页面中的name的属性前缀相一致的。如果改变,则需要两者同时改变,并且特别注意一点:Action类里的封装类的set和get方法千万不要忘记更新,不要只顾着修改变量名称,而忽略了set、get方法名。我就是经常忘记修改set、get方法名,而导致出现一个错误ognl.OgnlException: target is null for setProperty(null, "h.name", [Ljava.lang.String;@346633b5),后面再说。
5.配置struts.xml
首先,如果没有struts.xml,则要在src目录下新建。


<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE struts PUBLIC   
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"   
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
<struts>  
    <package name="jzl" extends="struts-default">  
        <action name="HelloGo" class="com.action.HelloAction">  
            <result name="success">hello.jsp</result>  
        </action>  
    </package>  
</struts>  


【注意】:
⑴dtd文件的引入,可以从struts2-core-xxxx.jar包里找到dtd文件,打开后,找到里面的引用粘贴过来即可。我这里用的是struts-2.1.7.dtd。
⑵说一说这里面的一些对应名:①<action>里HelloGo是与jsp前台页面中<form>中action属性的名称相同的。②class的值是前台页面所要转向的Action类,记得在没有用Spring的时候要带着类的全名。③<result>中success是和Action类中默认方法execute的返回值相同的。
⑶整个配置的含义:配置一个包,package名为“XXX”,必须继承“struts-default”,否则调用不到struts提供的interceptor和result节点等等。把JSP页面中的action转向到Action类里,例如把名为HelloGo.action转向到com.action.HelloAction类,这个过程同时把数据封装了传递过来。当处理完毕后,Action类中execute方法返回值为设定的匹配字符(例如"success")时,将把页面转向到某一个页面(例如hello.jsp)。
6.部署、运行项目。
根据异常来判断错误,下边就说说我碰到过的各种错误。
 ★错误归纳
1.struts.xml的位置问题。
struts.xml要放到src/下,这个得从struts2的控制器org.apache.struts2.dispatcher.FilterDispatcher上说,这个类默认的是导入/classes 下的struts.xml,所以只有放在src/下编译才能在/classes下,不过可以通过修改web.xml,在<filter>标签内加入如下代码,这样struts.xml就可以放在/WEB-INF下了。


<init-param>  
           <param-name>config</param-name>  
           <!-- 配置装载struts.xml路径,其中struts.xml放在/src/struts/下-->  
           <param-value>struts-default.xml,struts-plugin.xml,../struts.xml</param-value>  
</init-param>  


2.Action接受参数的问题。
Struts2中Action接收参数的方法主要有以下三种:
(1).使用Action的属性接收参数:
a.定义:在Action类中定义属性,创建get和set方法;
b.接收:通过属性接收参数,如:userName;
c.发送:使用属性名传递参数,如:user1!add?userName=Magci;
(2).使用DomainModel接收参数:
a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法;
b.接收:通过对象的属性接收参数,如:user.getUserName();
c.发送:使用对象的属性传递参数,如:user2!add?user.userName=MGC;
(3).使用ModelDriven接收参数:
a.定义:Action实现ModelDriven泛型接口,定义Model类的对象(必须new),通过getModel方法返回该对象;
b.接收:通过对象的属性接收参数,如:user.getUserName();
c.发送:直接使用属性名传递参数,如:user2!add?userName=MGC
我们平时用的最多的就是第二种方式,即创建单独的entity类,action类里声明entity类的对象,带有get、set方法,接受的时候用对象来调用,jsp发送数据的时候用同名的对象名做前缀调用。
此部分更详细说明请看:struts2中action接收参数的方法
3.There is no Action mapped for namespace / and action name UserAction
找不到与之相匹配的Action,一般来说这个错误原因有两种:
(1)检查struts.xml是否在src目录下。
(2)检查struts.xml语法是否正确。如果(1)没问题,则肯定是在语法问题上。比如extends="struts-default"是否写错了,不要忽略,小编当时就是写错了default词语;查看文件名是不是struts.xml;根据上述5. 配置struts.xml下(2)内容自行对照各名称是否相同。
4. ognl.OgnlException: target is null for setProperty(null, "name", [Ljava.lang.String;@346633b5)
这是个关于Jsp和Action传递参数时的错误。检查的文件有jsp页面文件、Action类。
(1)检查jsp页面中的name属性是否正确,如果是按封装类传递参数,则检查前缀是否和Action类中声明的对象名相同。
(2)如果(1)没有问题,则检查Action类中的声明对象有没有添加set和get方法。同时检查一下set和get方法的语法是否正确。
……
以上就是小编通过做一个简单实例,学习到的struts使用方法和错误总结,更加深入的学习还会继续。
 

原文链接:http://www.itobin.info/iq/javac/struts2.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java面试-ssh-1
自己动手写一个Struts2 - superleo - JavaEye技术网站
使用struts2.5版本遇到的问题
Struts2 Spring Hibernate搭建全解!
Struts2+Spring集成合并
Struts2 注解配置Action(十九)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服