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 >


 

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

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值