小弟在公司WEB项目中使用SSH框架
TOMCAT6 本地没有使用TOMCAT做域名绑定什么的,就单独安装了TOMCAT进行测试
服务器上使用TOMCAT6 + IIS 在 server.xml 中做了域名绑定 如下代码<Host name="reg.wustudy.com" debug="0" appBase="F:\wwwroot\WuStudy" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Alias>reg.wustudy.com</Alias>
<Context path="/" docBase="F:\wwwroot\WuStudy" privileged="true" reloadable="true" debug="3"> 
</Context>
<Logger className="org.apache.catalina.logger.FileLogger"/>
</Host>
在struts-config.xml 中action的配置    <action path="/admin/reg_InfoShow" type="com.wustudy.struts.action.Reg_InfoShowAction">
     <forward name="Success_show" path="/admin/Reg/Reg_Show.jsp"></forward>
     <forward name="Success_edit" path="/admin/Reg/Reg_edit.jsp"></forward>
     <forward name="Success" path="/admin/success.jsp"></forward>
     <forward name="Fail" path="/admin/Error.jsp"></forward>
    </action>在spring配置文件中的配置  如下 <bean id="reg_InfoShow" class="com.wustudy.struts.action.Reg_InfoShowAction" scope="prototype">
<property name="service"> <!--注入service-->
<ref bean="registrationServiceImpl"></ref>
</property>
</bean>
这个项目在本地测试完全没有任何问题
但是传到远程之后,网站后台的action却出现了404错误  比如我上面列出的这个Action 
即:我的网站访问路径为 http://reg.wustudy.com/admin/reg_InfoShow.do
按正常程序走的话 这个页面在没有登陆之前会自动转向到login.jsp这个页面
 说明: 在项目中  <action path="/admin/reg_InfoShow" 这个Path 中没有加前缀的 "/admin" 这个的所有action在远程都能访问

解决方案 »

  1.   

    你配置文件下面的 webapp 配置正确了吗
      

  2.   

    我的项目是在 F:\wwwroot\WuStudy 目录下的
       所以webapp 里不用吧?
      

  3.   

    哦  抱歉大脑死机了一下 理解性错误下面是我的 web.xml <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>
    org.apache.struts.action.ActionServlet
    </servlet-class> <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param> <init-param>
    <param-name>debug</param-name>
    <param-value>3</param-value>
    </init-param>
    <init-param>
    <param-name>detail</param-name>
    <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
    </servlet> <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/applicationContext-dao-service-action.xml</param-value>
    </context-param>
    <filter>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping> <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener> <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
    </servlet-mapping> <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>
    org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 登录过滤 -->
    <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.wustudy.util.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/admin/*</url-pattern>
    </filter-mapping> 

    </web-app>
      

  4.   


    恩是的
       完全能跑 没有任何问题
       刚刚在服务器上也做了测试
       只要是 把项目放到 webspps 这个目录下使用 localhost:8080/wustudy 这个路径访问的话 完全没有问题
       
      

  5.   


    个人感觉应该是在做域名绑定上出了什么问题
      或者是 IIS 转向Tomcat的时候出了问题
      

  6.   

      <bean id="reg_InfoShow" class="com.wustudy.struts.action.Reg_InfoShowAction" scope="prototype">
            <property name="service"> <!--注入service-->
                <ref bean="registrationServiceImpl"></ref>
            </property>
        </bean>
    改成
      <bean name="/admin/reg_InfoShow" class="com.wustudy.struts.action.Reg_InfoShowAction" scope="prototype">
            <property name="service"> <!--注入service-->
                <ref bean="registrationServiceImpl"></ref>
            </property>
        </bean>
    仅供参考
      

  7.   


    确实是路径问题
      但最终的原因是什么,似乎还没找到
      从struts 配置 到spring配置 都没有问题
      会不会 和 tomcat6 结合IIS 的问题?
      或者 环境变量?
      

  8.   

    tomcat版本问题吧。你换个低版本的试试
      

  9.   

    已解决!!!
         经过测试,将action的 path=“/admin/**.do” 改 path=“/admins/**.do”
         因为 tomcat 与iis 结合,而项目中存在admin这个目录,iis检查admin目录没有存在**.do这个文件,所以向tomcat转交404错误。
         以上为个人理解,有待证实!希望高手给予解释! 谢谢