http://localhost:8080/crm_07_spring_tapestry/app 我访问这个 ,为什么struts2会把这个路径当做是 namespace="/",
 action="app"的了,其实我访问的是tapestry的Home.html,怎么避免让struts2不把这个路径当做action来访问啊,怎么
我在看李腾飞的CRM项目视频的时候,它都可以。。而我的就出错。。奇怪。。谁能解决 。。谢了
   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>
  
  <context-param>
     <param-name>contextConfigLocation</param-name>  
    
     <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>

 </context-param>
  
  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
   <!-- 设置编码 -->
   <filter>
     <filter-name>encodingFilter</filter-name>
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
    </filter>
    
    <filter-mapping>
     <filter-name>encodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>
  
   <filter>
   <filter-name>struts-cleanup</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
   </filter>
    <filter-mapping>
        <filter-name>struts-cleanup</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
   <filter>
   <filter-name>sitemesh</filter-name>
   <filter-class>org.apache.struts2.sitemesh.FreeMarkerPageFilter</filter-class>
   </filter>
   <filter-mapping>
        <filter-name>sitemesh</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>/*</url-pattern>
    </filter-mapping>
    
   <servlet>
   <servlet-name>app</servlet-name>
   <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
   <load-on-startup>0</load-on-startup>
   </servlet>
   <servlet-mapping>
   <servlet-name>app</servlet-name>
   <url-pattern>/app</url-pattern>
   </servlet-mapping>
    
</web-app>Home.html如下
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Insert title here</title>
</head>
<body> 第一个typestry程序</body>
</html>

解决方案 »

  1.   

    应为用了 struts2的过滤器,所以会把所有的请求都当做 struts2的请求来处理,
    而struts2的请求过滤包括  /*.action , /*等
    所以会把你的servlet请求当做action请求过滤掉的你可以改一下
    <servlet>
      <servlet-name>app</servlet-name>
      <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
      <load-on-startup>0</load-on-startup>
      </servlet>
      <servlet-mapping>
      <servlet-name>app</servlet-name>
      <url-pattern>/app.servlet</url-pattern>
      </servlet-mapping>然后 在地址栏里面访问请求路径 写成
    http://localhost:8080/crm_07_spring_tapestry/app.servlet这样请求就不会被过滤掉了
      

  2.   

    网上之前说过 可以吧 struts2的过滤器改成<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>/*.action</url-pattern>
      </filter-mapping>
        
    其实是不对的,因为 <url-pattern>/*.action</url-pattern>定义的时候,不能对其扩展名进行定义而struts1。x中 用 /*.do做过滤的时候 后面还有一大堆定义的,所以不能直接
    用 <url-pattern>/*.action</url-pattern>这样来改的还有人说过 去改struts2的过滤器对应的过滤后缀文件
    我也试过,改了也没用
    因为  <url-pattern>/*.action</url-pattern>定义的时候,不能对其扩展名进行定义 还是这个原因的。