HTTP-404:Servlet action is not available

原创 2007年10月08日 17:33:00
 配置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>


 

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

 

关于jsp表单提交中action所指向Servlet路径问题的总结

初学java web,在使用servlet处理jsp时发现很多提交表单时发生的错误都是因为提交路径出错造成的。 现以自己为例说明: 项目目录结构如下: web.xml文件主要内容如下: ...
  • ss1221yy
  • ss1221yy
  • 2017年04月25日 16:31
  • 4756

struts2中Action访问servlet的两种方式

一、IoC方式                在struts2框架中,可以通过IoC方式将servlet对象注入到Action中,通常需要Action实现以下接口:        a. ...
  • leimengyuanlian
  • leimengyuanlian
  • 2014年07月26日 21:11
  • 8927

Struts 2 ----Action获取servlet对象及后续重定向操作

Why?       Action作为MVC框架中的Control层,一个类似于Servlet的java对象,通过继承Action接口,在execute方法中处理数据和一些相关的业务逻辑,然后把最终处...
  • Daybreak1209
  • Daybreak1209
  • 2015年09月07日 10:45
  • 1000

servlet是单例和struts2的action多例的理解

1.struts2中action是多例的,即一个session产生一个action 如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的属性不一样,操作...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年07月30日 20:50
  • 3635

Action 中访问servletAPI的方式总结

在Struts2的框架中,Action与Servlet API相互分离,这是Struts2相对于Struts1的一个优化之处。相互分离 的好处就是便于测试action,但是这样的话,Action...
  • u012788601
  • u012788601
  • 2016年07月06日 17:57
  • 523

Struts2中访问ServletAPI的四种方式

一:  使用Struts2中ActionContext(Action的上下文)解耦和的方式  package cn.mldn.controller; import java.util.Ma...
  • pangqiandou
  • pangqiandou
  • 2017年06月06日 20:35
  • 221

struts2和servlet共存的几种方法

项目要求struts2和servlet能够共存,就是struts的请求发给struts处理,servlet的请求发给servlet处理。目前web.xml文件应该是类似于如下的配置:  fi...
  • huilangeliuxin
  • huilangeliuxin
  • 2013年08月29日 10:32
  • 13361

Solr 6.0 问题汇总

本文是针对在学习和运用solr6.0中遇到的问题做总结,会持续更新配置solr 404问题在Solr 6.0 学习(一)环境搭建中很多同学在评论区说404问题 访问:http://localhost...
  • upxiaofeng
  • upxiaofeng
  • 2017年05月18日 16:42
  • 1063

struts中的action和Action类以及struts2中如何在Action类中获得servlet api的域对象

1.Struts2的学习中大家都会遇到action和与action对应的Action类,那么什么是action什么是action对应的Action类呢? 例如struts.xml的配置文件如下: ...
  • nihaowoshiyudong
  • nihaowoshiyudong
  • 2016年12月30日 10:37
  • 1099

javaweb action无法跳转、表单无法跳转的解决方法

javaweb action无法跳转,javaweb表单无法跳转的解决方法。web.xml文件配置。action无法跳转,struts2 action无法跳转;SSH action无法跳转...
  • u011511684
  • u011511684
  • 2014年05月08日 15:23
  • 4636
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP-404:Servlet action is not available
举报原因:
原因补充:

(最多只允许输入30个字)