配置Struts和Hibernate时,遇到了一个可能对于已经解决了该问题的人很简单的问题,但是,对于遇到后,没有解决的人,可是很苦恼的。遇到该问题,有一次习惯性的Google了一下,哈哈哈,很不爽,没有找到真正的原因。现将本人的解决方案总结一下,避免大家重复的劳动。下面会一步一步将整个过程记录下来。
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的详细配置:
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 >
< 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 >
<! 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 >
<! 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 >
后记:解决问题的经验,是从出问题中总结出来的。出了问题,建议大家能多看看源码,一切会从其中找到答案的。