HTTP-404:Servlet action is not available
 配置Struts和Hibernate时,遇到了一个可能对于已经解决了该问题的人很简单的问题,但是,对于遇到后,没有解决的人,可是很苦恼的。遇到该问题,有一次习惯性的Google了一下,哈哈哈,很不爽,没有找到真正的原因。现将本人的解决方案总结一下,避免大家重复的劳动。下面会一步一步将整个过程记录下来。

       web.xml的详细配置:

      

        struts-config.xml的详细配置:

 

       请大家注意了,我将web-app_2_3.dtd、struts-config_1_3.dtd放在了WEB-INF目录下,所以,请看上面的两个配置,看第二行,<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd" >、<!DOCTYPE struts-config SYSTEM "struts-config_1_3.dtd" >,这也是一个出错的地方。最后,我会将正确的配置放在下面。

        可是,这些问题,怎么发现呢?在tomcat启动时,后台确实没有看到异常。以下就是正题,怎样来解决这个问题!

        我写了一个ActionServlet.java类,继承了org.apache.struts.action.ActionServlet:

 


import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 继承<b>org.apache.struts.action.ActionServlet</b>类,目的是为了可以捕捉异常,进行调试
 * 
 *
 
*/
public class ActionServlet extends org.apache.struts.action.ActionServlet {

    
private final static Log log = LogFactory.getLog(ActionServlet.class);
    
private final static String CHARACTER_ENCODING = "GB2312";
    
/**
     * 
     
*/
    
private static final long serialVersionUID = 8269712961052009980L;

    
/**
     * 
     
*/
    
public ActionServlet() {
    }

    
public void init() {
        
//super class init now
        log.info("super class init now");
        
try {
            
super.init();
        } 
catch (ServletException e) {
            log.error(
"error 初始化出错:" + e.getMessage());
            e.printStackTrace(System.err);
        }
        log.info(
"super class init over");
    }

    
/*
     * over ride the process,set the request character encoding
     * @see org.apache.struts.action.ActionServlet#process(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     
*/
    
protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        request.setCharacterEncoding(CHARACTER_ENCODING);
        
super.process(request, response);
    }
}

 

再配置一下web.xml:

<servlet>
  
<servlet-name>action</servlet-name>
  
<servlet-class>cn.com.slowliving.puma.actions.ActionServlet</servlet-class>
  
<init-param>
   
<param-name>config</param-name>
   
<param-value>/WEB-INF/struts-config.xml</param-value>
  
</init-param>
  
<load-on-startup>1</load-on-startup>
 
</servlet>

 

重启发布后,启动Tomcat,你就会看到后台的出错信息了。

剩余的,可就是自己根据自己的情况来修改了。

修改后的web.xml及struts-config.xml文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd"
>
<web-app>

 
<!-- all servlets -->
 
<servlet>
  
<servlet-name>action</servlet-name>
  
<servlet-class>cn.com.slowliving.puma.actions.ActionServlet</servlet-class>
  
<init-param>
   
<param-name>config</param-name>
   
<param-value>/WEB-INF/struts-config.xml</param-value>
  
</init-param>
  
<load-on-startup>1</load-on-startup>
 
</servlet>

 
<servlet>
  
<servlet-name>initializers</servlet-name>
  
<servlet-class>cn.com.slowliving.puma.Initializers</servlet-class>
  
<init-param>
   
<param-name>database-init-file</param-name>
   
<param-value>WEB-INF/hibernate.cfg.xml</param-value>
  
</init-param>

  
<init-param>
   
<param-name>mail-init-file</param-name>
   
<param-value>WEB-INF/mail.properties</param-value>
  
</init-param>

  
<load-on-startup>2</load-on-startup>
 
</servlet>

 
<servlet>
  
<servlet-name>checkExists</servlet-name>
  
<servlet-class>cn.com.slowliving.puma.ajax.CheckExists</servlet-class>
 
</servlet>
 
<servlet>
  
<servlet-name>getimg</servlet-name>
  
<servlet-class>cn.com.slowliving.puma.util.GetImg</servlet-class>
 
</servlet>

 
<!-- all servlet mappings -->
 
<servlet-mapping>
  
<servlet-name>checkExists</servlet-name>
  
<url-pattern>/checkexists</url-pattern>
 
</servlet-mapping>

 
<servlet-mapping>
  
<servlet-name>getimg</servlet-name>
  
<url-pattern>/getimg</url-pattern>
 
</servlet-mapping>

 
<servlet-mapping>
  
<servlet-name>action</servlet-name>
  
<url-pattern>*.do</url-pattern>
 
</servlet-mapping>

 
<!-- The Usual Welcome File List -->
 
<welcome-file-list>
  
<welcome-file>index.html</welcome-file>
  
<welcome-file>index.htm</welcome-file>
  
<welcome-file>index.jsp</welcome-file>
 
</welcome-file-list>

</web-app>


 

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>

  
<form-beans>
 
<form-bean name="registerForm" type="cn.com.slowliving.puma.forms.RegisterForm"></form-bean>
  
</form-beans>

  
<action-mappings>
  
<action path="/common/register" type="cn.com.slowlving.puma.actions.RegisterAction" name="registerForm">
   
<forward name="success" path="/common/reg_add.jsp" redirect="false"></forward>
   
<forward name="failure" path="/common/reg_error.html" redirect="false"></forward>
  
</action>
  
</action-mappings>
</struts-config>


 

后记:解决问题的经验,是从出问题中总结出来的。出了问题,建议大家能多看看源码,一切会从其中找到答案的。

 
阅读更多
想对作者说点什么? 我来说一句

ssh5的源文件

2008年05月09日 33KB 下载

ssh文件

2008年05月08日 33KB 下载

没有更多推荐了,返回首页

不良信息举报

HTTP-404:Servlet action is not available

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭