我按照网上的教程说的方法去配置struts.xml以及applicationContext.xml,结果tomcat运行的时候提示action not found。但是,如果我吧struts.xml里action的class写成"com.sshtest.web.action.LogingAction"则不会出现action not found的错误,但是无法生成service的实例。请问一下到底应该是怎样配置的?配置文件以及java代码如下:
web.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- Spring Configuration Start -->
  <filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<!-- 指定使用UTF-8 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,/WEB-INF/action-servlet.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring Configuration end -->

<!-- Struts Configuration start -->
<jsp-config>
<taglib>   
<taglib-uri>struts-tags</taglib-uri>
<taglib-location>/WEB-INF/lib/struts2-core-2.1.8.1.jar</taglib-location>   
</taglib>
<taglib>   
<taglib-uri>struts-dojo-tags</taglib-uri>
<taglib-location>/WEB-INF/lib/struts2-dojo-plugin-2.1.8.1.jar</taglib-location>   
</taglib>
</jsp-config>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Struts Configuration end -->
  
</web-app>
applicationContext-services.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="userService" class="com.sshtest.service.impl.UserService">
<property name="userDao">
<ref bean="userDao" />
</property>
</bean>
</beans>
action-servlet.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans> <bean id="LogingAction" class="com.sshtest.web.action.LogingAction"
scope="prototype">
<property name="userService" ref="userService" />
</bean>
</beans>
LogingAction.javapackage com.sshtest.web.action;import java.util.Date;
import java.util.Map;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sshtest.service.IUserService;public class LogingAction extends ActionSupport {
private Log logger = LogFactory.getLog(getClass());

private String userName;
private String password;
private Date date;
private IUserService userService;

public void setUserService(IUserService userService) {
this.userService = userService;
}
/**
 * @return
 */
public String execute() {
Map session=ActionContext.getContext().getSession();
logger.debug("########### LogingAction.execute begin ###########");
logger.debug("userName: " + userName);
logger.debug("password: " + password);
boolean isValidUser = userService.loginValid(userName, password);
logger.debug("isValidUser: " + isValidUser);
    if(isValidUser){
     session.put("userName", userName);
     logger.debug("########### LogingAction.execute success end ###########");
     return "success";
    }else{
     addActionError("用户名密码不匹配");
}
    logger.debug("########### LogingAction.execute input end ###########");
return "input";
}

public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}

解决方案 »

  1.   

    本人初学ssh,希望高手能够指点一下,不胜感激啊!!
      

  2.   

    这是我的wen.xml的配置 
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:beans-*.xml</param-value>
    </context-param>
    <filter>
    <filter-name>openSessionInView</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    <param-name>sessionFactoryBeanName</param-name>
    <param-value>sessionFactory</param-value>
    </init-param>
    </filter> <filter-mapping>
    <filter-name>openSessionInView</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping> <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>*.do</url-pattern>
    <dispatcher>REQUEST</dispatcher>  
           <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>我用的是 srtuts2.1.8+xwork2.1.6+hibernate3.4+spring2.5.6  
      

  3.   

    你为什么会有那么多配置啊  像encoding log4j  需要在这里配置么  还有你的,/WEB-INF/action-servlet.xml  这个是什么的配置啊  不要把struts2的配置加进来啊 
      

  4.   

    谢谢fantasy_happy的回答,我注意到在listener和filter的配置上只有struts2的这个filter不同,但是您使用的这个org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter我之前也试过,也是会出同样的问题...
      

  5.   

    你在applicationContext-services.xml中配置的di(依赖注入)的方式是setXXX(),而action中却用构造函数。。
    建议修改action。提供setXX().而不是用构造器函数。。
      

  6.   

    <beans>
        <bean id="userService" class="com.sshtest.service.impl.UserService">
            <property name="userDao">
                <ref bean="userDao" />
            </property>
        </bean>
    </beans>
    你的userDao  有配置到spring的配置文件中么  你的struts.xml的配置是什么   
      

  7.   

    我在action里有提供setter方法啊
    public void setUserService(IUserService userService)
      

  8.   

    你的struts是如何配置的呢?怎么没看到呢。。
      

  9.   

    呵呵,刚才忘记贴了struts.xml<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts> <package name="MyPackage" extends="struts-default">
    <action name="login" class="LogingAction">
    <result name="success">/success.jsp</result>
    <result name="input">/index.jsp</result>
    </action>
    </package></struts>  
      

  10.   

    要不这样吧   你加我QQ  911950393  我晚上回去寝室 给你发个SSH2的例子 或者你把代码发给我 我改下  这样没看到全部 实在不好说话  还没有达到那种高的境界 呵呵
      

  11.   

    终于找到原因了,汗,原来少放了一个struts2-spring-plugin.jar包导致的,感谢楼上的2位朋友的帮助!!
      

  12.   

    <bean id="LogingAction" class="com.sshtest.web.action.LogingAction"
            scope="prototype">
            <property name="userService" ref="userService" />
        </bean>应该是   <bean name="LogingAction" class="com.sshtest.web.action.LogingAction"
            scope="prototype">
            <property name="userService" ref="userService" />
        </bean>