小弟在公司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在远程都能访问
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在远程都能访问
所以webapp 里不用吧?
<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>
恩是的
完全能跑 没有任何问题
刚刚在服务器上也做了测试
只要是 把项目放到 webspps 这个目录下使用 localhost:8080/wustudy 这个路径访问的话 完全没有问题
个人感觉应该是在做域名绑定上出了什么问题
或者是 IIS 转向Tomcat的时候出了问题
<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>仅供参考
确实是路径问题
但最终的原因是什么,似乎还没找到
从struts 配置 到spring配置 都没有问题
会不会 和 tomcat6 结合IIS 的问题?
或者 环境变量?
经过测试,将action的 path=“/admin/**.do” 改 path=“/admins/**.do”
因为 tomcat 与iis 结合,而项目中存在admin这个目录,iis检查admin目录没有存在**.do这个文件,所以向tomcat转交404错误。
以上为个人理解,有待证实!希望高手给予解释! 谢谢