<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-348  評論-598  文章-0  trackbacks-0
       今天在幫公司的新手弄SSH的一個登錄程序時,出現了Servlet action is not available異常,第一反應應該是struts配置的問題,找了段時間發現配置沒錯,搜索了下,找了幾篇好文,問題成功解決,原來是那個大頭蝦將spring的配置文件中hibernate的model文件路徑寫錯了,這種問題還真難找,我眼睛睜得圓圓的,找了N久才找到。
           共享下網上資料:
           1. http://community.csdn.net/Expert/TopicView3.asp?id=4927147
               原文如下:
               最近在做開發用STRUTS+SPRING+HIBERNATE
    遇到一個很棘手的錯誤:Servlet action is not available

    具體癥狀如下:
    文件夾系統:
    com.Athena.data.hibernate 存放HIBERNATE的工廠類
    com.Athena.data.po.imp 存放持久化對象
    com.Athena.data.dao.imp 存放數據訪問對象
    com.Athena.data.bo.imp 存放業務邏輯處理BEAN
    com.Athena.service 存放功能總接口類
    com.Athena.action 存放ACTION
    com.Athena.form 存放FORM
    com.Athena.prop 存放信息文件properties

    開發工具ECLIPSE 3.1.1

    由于開發中用的是MYECLIPSE4.1 所以生成數據表的影射文件的時候沒有被放到指定的包中,全部被工具自動放到了缺省包中

    被放到缺省包中的文件:(影射的表為user_first)

    AbstractUser_First.java
    User_First.java
    User_FirstDAO.java
    User_First.hbm.xml

    此時,各個配置文件的關鍵代碼是:

    applicationContext.xml:


    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="mssqldata" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.SQLServerDialect
    </prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>User_First.hbm.xml</value>
    </list>
    </property>
    </bean>
    <bean id="User_FirstDAO" class="User_FirstDAO">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>


    struts-config.xml:


    <action-mappings >
    <action
    attribute="loginForm"
    input="/login.jsp"
    name="loginForm"
    path="/login"
    scope="request"
    type="org.springframework.web.struts.DelegatingActionProxy" />

    </action-mappings>

    在STRUTS中我寫了一個登陸,包括loginForm.java , loginAction.java ,login.jsp

    登陸的邏輯是:輸入用戶名和密碼都為“HAHA”的時候 在頁面上返回登陸成功字樣,否則則返回登陸失敗(為了測試,所以ACTION中沒有涉及任何訪問數據的東西,僅僅是在其中通過SPRING的注入機制,向里面注入了一個字符串,并在控制臺打出)

    loginAction關鍵源碼:

    private String sm;
    public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) {

    LoginForm loginForm = (LoginForm) form;
    String username=loginForm.getUsername();
    String userpass=loginForm.getUserpass();
    if(username.equals("haha")&&(userpass.equals("haha"))){
    ActionMessages meg=new ActionMessages();
    meg.add("userlogout",new ActionMessage("user.logon"));
    saveErrors(request,meg);
    System.out.println(username+" "+userpass+" "+sm);
    return mapping.findForward("logout");
    }else{
    ActionMessages meg=new ActionMessages();
    meg.add("userlogon",new ActionMessage("user.logout"));
    saveErrors(request,meg);
    System.out.println(username+" "+userpass+" ");
    return mapping.findForward("logout");
    }

    }
    public String getSm() {
    return sm;
    }
    public void setSm(String sm) {
    this.sm = sm;
    }

    在applicationContext.xml中的注入代碼:

    <bean name="/login" class="com.Athena.action.LoginAction" singleton="false">
    <property name="sm">
    <value>dadadada</value>
    </property>
    </bean>

    ---------------------------------------------------------------------------------
    以上是沒有任何問題,網頁運行正常,但是當我把被工具自動放到缺省包的那些文件轉移到相應包之后,我修改了如下東西(以下是修改的):

    applicationContext.xml:

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="mssqldata" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.SQLServerDialect</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>com/Athena/data/po/imp/User_First.hbm.xml</value> //在此我添加了路徑
    </list>
    </property>
    </bean>
    <bean id="User_FirstDAO" class="com.Athena.data.dao.imp.User_FirstDAO">
    //在此我添加了路徑
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>


    User_First.htm.xml 的修改:
    <hibernate-mapping package="com.Athena.data.po.imp">
    <class name="com.Athena.data.po.imp.User_First" table="AthenaCompany" >


    被自動放到缺省包的文件的路徑變更:

    AbstractUser_First.java com.Athena.data.po
    User_First.java com.Athena.data.po.imp
    User_FirstDAO.java com.Athena.data.dao.imp
    User_First.hbm.xml com.Athena.data.po.imp

    ------------------------------------------------------------------------------
    做了以上修改后(以上各個配置文件的路徑修改都是我仔細檢查過的,只不過現在有點眼花了,所以如果寫錯了,請不用給予糾正,那可能是我打錯了),再次啟動網頁,登陸界面正常出,一點提交,就會返回錯誤:Servlet action is not available

    疑問:
    ACTION中沒有涉及任何的數據訪問和業務邏輯,僅僅是簡單的判斷,為什么移動了幾個不相關的文件就說是找不到ACTION了呢? (網絡上也有很多答案,結果還是一無所獲)

    如果哪位大俠可以賜教,請加我的MSN:Mars.Eric@hotmail.com
    在此拜托了,處理了3天了,快死了。

     
    回復人:Eric_Mars() ( 一級(初級)) 信譽:100 2006-8-4 17:10:50 得分:0
    ?

    問題解決了
    解決方法:
    在SPRING的配置文件中生命.HBM.XML文件的時候一定要注意:
    例如路徑為:com.hibernate.xxx.hbm.xml
    那么聲明的時候應該寫成 /com/hibernate/xxx.hbm.xml

    同時記得改好xxx.hbm.xml內部的路徑配置

           2. Servlet action is not available 問題解決
               原文出處http://blog.csdn.net/lijiuu/archive/2007/03/22/1538069.aspx
               文章如下:
              環境eclipse3.2+myeclipse+tomcat5.0x

           重要提示:出現這個問題的原因很多,最多見的是配置文件出錯不能初始化出現Servlet action is not available提示。要解決問題需要具體問題具體分析,多看容器的logs。

           背景提示,我要做struts+spring+hibernate的配置,但是按照書上說的配置好了后,總是錯誤,提示Servlet action is not available后臺log就提示2006-03-22 22:34:09 StandardWrapperValve[action]: Servlet action is currently unavailable。弄了很久沒有弄好。后來看了很久的log才發現提示配置文件中有錯誤,所以把action設置為null。

    在找這個錯誤,找了很久才發現:一個是


        
    <plug-in
            
    className="org.springframework.web.struts.ContextLoaderPlugIn">
            
    <set-property property="contextConfigLocation"
                value
    ="/WEB-INF/classes/applicationContext.xml" />
        
    </plug-in>

    在struts中配置spring插件時,applicationContext.xml(spring的配置文件)位置錯了,書上一般是"/WEB-INF/applicationContext.xml"  但是有的時候不是在這個下面。所以一定要自己到容器下看看具體位置。比如我的就是在web-inf/classes下。

       二是:在spring的配置文件下的插入hibernate的配置文件

        <bean id="SessionFactory"
            class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            
    <property name="configLocation">
                
    <value>file:src/hibernate.cfg.xml</value>
            
    </property>
        
    </bean>

    myeclipse自動添加的是這樣的,我一直沒有注意,結果應該為:

        <bean id="SessionFactory"
            class
    ="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            
    <property name="configLocation">
                
    <value>file:src/hibernate.cfg.xml</value>
            
    </property>
        
    </bean>

    提示:hibernate.cfg.xml文件的具體位置你要到容器下去看。

    重要提示:

    1、還有就是一定要在struts配置文件中加: <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>。這樣你的action才能真的委托給spring。

    2、我發現我的myeclipse沒有把spring.jar拷貝到lib下,以后大家出了問題可以看看。

         利用spring+hibernate+struts過程中,發現一個問題,在action中將一個hibernate讀取出來的ArrayList存入session:request.getSession().setAttribute("treeFromRoot", treeList.iterator());

    在jsp中用標簽 讀取代碼如下:會出現Cannot create iterator for this collection 錯誤,弄了一下午都沒有搞定。

    <logic:notEmpty name="treeFromRoot">
       
    <logic:iterate type="edu.scnu.es.struts.vo.Tree" id="tree"
        name
    ="treeFromRoot">


       
    </logic:iterate>
      
    </logic:notEmpty> 

    最后決定用JSTL試一試,代碼改為:成功了。

    <c:forEach  items="${sessionScope.treeFromRoot}"  var="treeFromRoot1">
        ${treeFromRoot1.id };
    </c:forEach>

    其中:edu.scnu.es.struts.vo.Tree是treeFromRoot這個list的成員的原形類。



    ---------------------------------------------------------
    專注移動開發

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2007-05-10 12:51 TiGERTiAN 閱讀(1019) 評論(2)  編輯  收藏 所屬分類: Java

    評論:
    # re: 今天碰到了和Amigo姐那篇備忘一樣的問題,Servlet Action is not available,備忘下[未登錄] 2007-05-21 21:29 | 小木
    謝謝咯!!  回復  更多評論
      
    # re: 今天碰到了和Amigo姐那篇備忘一樣的問題,Servlet Action is not available,備忘下 2008-01-13 18:52 | JSP小菜鳥
    我在部署一個簡單的Struts+Hibernate時出現樓主提到的問題。開始是SessionFactory.curretSession(),MyEclipse提示currentSession();方法不是SessionFactory里的東西,后來我改成SessionFactory.getSession,可以了,但是部署的時候就出現404錯誤,哪位高手能幫一下。。。。。。。。  回復  更多評論
      
    主站蜘蛛池模板: 精品亚洲成a人片在线观看少妇| 亚洲第一区精品观看| 亚洲AV无码不卡无码| 亚洲午夜免费视频| 久久精品国产亚洲AV麻豆王友容 | 日韩伦理片电影在线免费观看| 中文文字幕文字幕亚洲色| 一二三四在线播放免费观看中文版视频 | 久久亚洲精品人成综合网| 99re在线视频免费观看| 亚洲天堂一区二区三区四区| 又黄又爽又成人免费视频| 亚洲日本一线产区和二线 | 久九九精品免费视频| 亚洲中文字幕乱码AV波多JI| 国产老女人精品免费视频| 深夜a级毛片免费无码| 亚洲精品午夜无码电影网| 91精品全国免费观看含羞草| 亚洲伦理一二三四| 国产猛烈高潮尖叫视频免费| 亚洲精品黄色视频在线观看免费资源| 亚洲精品国精品久久99热一| 67pao强力打造高清免费| 亚洲色偷精品一区二区三区| 精品国产亚洲男女在线线电影 | 亚洲精品蜜夜内射| 国产国拍精品亚洲AV片| 久久久久高潮毛片免费全部播放 | 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 精品日韩亚洲AV无码一区二区三区| 97在线线免费观看视频在线观看| 亚洲AV无码AV男人的天堂不卡| jlzzjlzz亚洲乱熟在线播放| 亚洲免费视频播放| 免费精品国产自产拍在线观看| 337p日本欧洲亚洲大胆艺术| 国产精品免费视频播放器| 日韩人妻一区二区三区免费| 无码天堂亚洲国产AV| 亚洲男人都懂得羞羞网站|