刚刚接触SSH,跟着视频做了一个入门范例,效果很简单,就是通过insert.jsp页面插入一条数据到mysql数据库。Spring和Hibernate整合时插入数据没问题,但是一加入Struts,问题就来了。一运行inser.jsp时报错(如下)。
反复检查也没发现问题,求高手解答!
开发环境:
Myeclipse6.0
Tomcat5.5
MySQL5.0
j2ee版本:1.4/1.5
Struts1.2
Hibernate3.1
Spring2
--------------------------------------------访问insert.jsp页面时的错误------------------------------type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Exception in JSP: /insert.jsp:1714: </head>
15:
16: <body>
17: <html:form action="/person">
18: 用户名:<html:text property="id"></html:text>
19: 真实姓名:<html:text property="name"></html:text>
20: 密码:<html:text property="password"></html:text>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
root cause
javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
org.apache.jsp.insert_jsp._jspService(insert_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
root cause
javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:747)
org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:443)
org.apache.jsp.insert_jsp._jspx_meth_html_005fform_005f0(insert_jsp.java:132)
org.apache.jsp.insert_jsp._jspx_meth_html_005fhtml_005f0(insert_jsp.java:106)
org.apache.jsp.insert_jsp._jspService(insert_jsp.java:69)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)--------------------------------------------insert.jsp--------------------------------------------------
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>insert.jsp</title>
</head> <body>
<html:form action="person.do" method="post">
用户名:<html:text property="id"></html:text>
真名:<html:text property="name"></html:text>
密码:<html:text property="password"></html:text>
<html:submit value="插入"></html:submit>
<input type="hidden" name="status" value="insert"/>
</html:form>
</body>
</html:html>
--------------------------------------------ActionForm(没有作任何验证)------------------------------------------
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package org.sm.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class PersonForm extends ActionForm {
private String password;
private String name;
private String id;
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
--------------------------------------------Action------------------------------------------
package org.sm.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.sm.struts.dao.impl.PersonDAOImpl;
import org.sm.struts.form.PersonForm;
import org.sm.struts.vo.Person;
public class PersonAction extends DispatchAction {
private PersonDAOImpl persondaoimpl;
public PersonDAOImpl getPersondaoimpl() {
return persondaoimpl;
}
public void setPersondaoimpl(PersonDAOImpl persondaoimpl) {
this.persondaoimpl = persondaoimpl;
}
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
PersonForm personForm = (PersonForm) form;
Person p = new Person();
p.setId(personForm.getId());
p.setName(personForm.getName());
p.setPassword(personForm.getPassword());
try {
this.persondaoimpl.insert(p);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
--------------------------------------------VO--------------------------------------------------
package org.sm.struts.vo;
public class Person implements java.io.Serializable {
private String id;
private String name;
private String password;
public Person() {
}
public Person(String id) {
this.id = id;
}
public Person(String id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
反复检查也没发现问题,求高手解答!
开发环境:
Myeclipse6.0
Tomcat5.5
MySQL5.0
j2ee版本:1.4/1.5
Struts1.2
Hibernate3.1
Spring2
--------------------------------------------访问insert.jsp页面时的错误------------------------------type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Exception in JSP: /insert.jsp:1714: </head>
15:
16: <body>
17: <html:form action="/person">
18: 用户名:<html:text property="id"></html:text>
19: 真实姓名:<html:text property="name"></html:text>
20: 密码:<html:text property="password"></html:text>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
root cause
javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
org.apache.jsp.insert_jsp._jspService(insert_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
root cause
javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection
org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:747)
org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:443)
org.apache.jsp.insert_jsp._jspx_meth_html_005fform_005f0(insert_jsp.java:132)
org.apache.jsp.insert_jsp._jspx_meth_html_005fhtml_005f0(insert_jsp.java:106)
org.apache.jsp.insert_jsp._jspService(insert_jsp.java:69)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)--------------------------------------------insert.jsp--------------------------------------------------
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />
<title>insert.jsp</title>
</head> <body>
<html:form action="person.do" method="post">
用户名:<html:text property="id"></html:text>
真名:<html:text property="name"></html:text>
密码:<html:text property="password"></html:text>
<html:submit value="插入"></html:submit>
<input type="hidden" name="status" value="insert"/>
</html:form>
</body>
</html:html>
--------------------------------------------ActionForm(没有作任何验证)------------------------------------------
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package org.sm.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class PersonForm extends ActionForm {
private String password;
private String name;
private String id;
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
return null;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
--------------------------------------------Action------------------------------------------
package org.sm.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.sm.struts.dao.impl.PersonDAOImpl;
import org.sm.struts.form.PersonForm;
import org.sm.struts.vo.Person;
public class PersonAction extends DispatchAction {
private PersonDAOImpl persondaoimpl;
public PersonDAOImpl getPersondaoimpl() {
return persondaoimpl;
}
public void setPersondaoimpl(PersonDAOImpl persondaoimpl) {
this.persondaoimpl = persondaoimpl;
}
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
PersonForm personForm = (PersonForm) form;
Person p = new Person();
p.setId(personForm.getId());
p.setName(personForm.getName());
p.setPassword(personForm.getPassword());
try {
this.persondaoimpl.insert(p);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
--------------------------------------------VO--------------------------------------------------
package org.sm.struts.vo;
public class Person implements java.io.Serializable {
private String id;
private String name;
private String password;
public Person() {
}
public Person(String id) {
this.id = id;
}
public Person(String id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
}
解决方案 »
- 类型转换的问题啊!!!
- 用java代码怎样编写树状的代码
- 如何侦听Tcp端口
- IIS6,jboss4.2整合的问题
- 在 Spring 是怎样处理事务的呢?
- 使用weblogic服务器里遇到的问题javax.naming.NoInitialContextException: Cannot instantiate class: weblogic.jndi.WLInitialContextFa
- 在struts-config中添加了<data-source>后出现servlet不可用的错误
- 关于jdbc问题
- 24小时结帖哦~
- 在jaxp或jdk1.4中有没有使xml支持中文的方法?就是改变xml的编码方式?
- 刚接触到ibatis不怎么了解····
- 明天开始上班了,开心之余还多了一份担忧,关于flex与java通信。
package org.sm.struts.dao;
import java.util.List;
import org.sm.struts.vo.Person;
public interface PersonDAO {
public void insert(Person person) throws Exception; }
--------------------------------------------DAOImpl----------------------------------------------
package org.sm.struts.dao.impl;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.sm.struts.dao.PersonDAO;
import org.sm.struts.vo.Person;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class PersonDAOImpl extends HibernateDaoSupport implements PersonDAO {
public void insert(Person person) throws Exception {
Session session=this.getSession();
session.save(person);
session.beginTransaction().commit();
}
public List queryAll() throws Exception {
List all=null;
String hql="from Person p";
Query q=this.getSession().createQuery(hql);
all=q.list();
return all;
}
}
--------------------------------------------web.xml--------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--红色部分为加入Struts后手动添加的-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
--------------------------------------------struts-config.xml--------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans >
<form-bean name="personForm" type="org.sm.struts.form.PersonForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="personForm"
input="/insert.jsp"
name="personForm"
parameter="status"
path="/person"
scope="request"
<!--红色部分为加入Struts后手动修改--> type="org.springframework.web.struts.DelegatingActionProxy" />
</action-mappings>
<message-resources parameter="org.sm.struts.ApplicationResources" />
<!--红色部分为加入Struts后手动添加的一个插件-->
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLoation" value="WEB-INF/classes/applicationContext.xml" />
</plug-in>
</struts-config>
--------------------------------------------applicationContext.xml--------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/mldn"></property>
<property name="username" value="root"></property>
<property name="password" value="mysqladmin"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>org/sm/struts/vo/Person.hbm.xml</value></list>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!--红色部分为加入Struts后手动修改-->
<bean id="persondaoimpl" class="org.sm.struts.dao.impl.PersonDAOImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean>
<bean name="/person" class="org.sm.struts.action.PersonAction">
<property name="persondaoimpl">
<ref bean="persondaoimpl"/>
</property>
</bean>
</beans>
--------------------------------------------Person.hbm.xml--------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.sm.struts.vo.Person" table="person">
<id name="id" type="java.lang.String">
<column name="id" length="20" />
<generator class="assigned"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="20" />
</property>
</class>
</hibernate-mapping>
--------------------------------------------------------------------------------------------------------------
这些代码贴出来我认为足够了,请高手帮忙看看吧。
而且我还在想一个问题,既然Struts与Spring整合起来这么麻烦,可不可以让Struts独立于Spring和Hibernate,即只关注于Spring和Hibernate的整合,而让Struts独立于Spring。是否可以这样呢?
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext.xml
</param-value>
</context-param>
后加上<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
说明你请求的action没有找到。
<html:form action="/person">
但是在struts-config.xml中没有发现对象的action。
14: </head>
15:
16: <body>
17: <html:form action="/person">
18: 用户名:<html:text property="id"></html:text>
19: 真实姓名:<html:text property="name"></html:text>
20: 密码:<html:text property="password"></html:text>很明显,你的请求服务器找不到对应的处理器来处理嘛!
改<html:form action="/person.do">
改<action
attribute="personForm"
input="/insert.jsp"
name="personForm"
parameter="status"
path="/person.do" scope="request">
改 <bean name="/person.do" class="org.sm.struts.action.PersonAction">
<property name="persondaoimpl">
<ref bean="persondaoimpl"/>
</property>
</bean>
2楼的方法,加上监听器后找不到jsp页面。
4楼的方法,修改后问题依旧。如果我在Spring和Hibernate整合后加上Struts,不让Struts整合Spring,同样的jsp页面、ActionForm和Action,就是无法显示。但是如果另建一个项目,把同样的jsp页面、ActionForm和Action加进来,就可以正常显示和操作。有点崩溃今天下午用另外一种SSH整合方法又做了一遍,开始报同样的错误,但是服务器重启了几次又好了,我无语……为什么??!!