第三天:集成Struts 2
2009-11-18 22:37
176 查看
先说犯的错误吧,其实,对于初学者,就是一个不断犯错,不断改正的过程.
1、一个怪怪的错误:org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans.xml]; nested exception is java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlReaderContext.getResourceLoader()Lorg/springframework/core/io/ResourceLoader;
Caused by: java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlReaderContext.getResourceLoader()Lorg/springframework/core/io/ResourceLoader;
其实这个错误写得很明白了,是说没有getResourceLoader()方法,可是我看了半天没看明白,以为是自己的配置有问题,怎么整都整不好。后来上网查了才知道是spring2.0的问题,我用的是Struts2.0.14,把它下面的几个spring包也一起拷贝到lib目录下了,这几个包是2.0的,删除后OK!
2、还是一个错误提示没看明白,The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag.处理这个错误的时候老是认为是不是jar包少了,还认真地看了jsp文件都没有发现什么问题.后上网查了一下才知道,原来.jsp也要让Struts2过滤。后来,回过头看了一下错误信息,写得很清楚嘛:要用tags,仅在通过它的filter时。(嘿,直译)
3、接着整合。主要有几点错误:1、没有在spring中配置Reg.class(我用的是注解方式,在类前没加@controller),2、struts设置中action的class用了真实的类名,应当用spring中的bean id。3、无论如何总是提示action 没有map,最终原因是jar包没导入完整。花了两个小时做这事,气死了,配置改来改去,把spring移走,单独做一个struts的测试后,用了以前学struts2时提的jar包,才发现问题所在。更糟糕的是,配置文件打开一大堆,很多又同名,全搞乱了。等理清了所有错误原因之后,发现要用的那个struts.xml没有改完整。认真还是很关键的。
4、最后一个小错误,很快发现了,判断两次密码是否一致,总是报不一致。原来,我按以前的习惯用了"!="判断,string 是要用equal来判断。这个是测了两次后马上想起的。
总结:书和视频总是有限的,无论如何要自己动手,某教程说把Struts2中lib目录下的除plug-in之外的所有包和sprint-plug-in拷到web-inf/lib 下,结果发生错误。英文水平还是要提高,要认真去看错误,其实那些句子大致意思还是能看懂的,只是看到E文就头大,没认真看,加之实践少,不能理会。
贴原码:改了昨天一处代码把对UserServiceBean的注解,改成@Service("userService"),这样指定bean的id比较好,因为是面向接口编程,用接口的名称写,更合理些。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>MyBbs</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts.xml
<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="GBK" />
<constant name="struts.objectFactory" value="spring"></constant>
<package name="bbs.web" extends="struts-default">
<action name="register" class="reg">
<result name="input">/reg.jsp</result>
<result name="success">/ok.jsp</result>
</action>
</package>
</struts>
reg.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>注册新用户</title>
</head>
<body>
注册新用户
<s:form action="register.action">
<s:textfield label="用户ID" name="user.userId"></s:textfield>
<s:textfield label="昵称" name="user.nickName"></s:textfield>
<s:textfield label="密码" name="user.password"></s:textfield>
<s:textfield label="再输入一次" name="password2"></s:textfield>
<s:textfield label="真实姓名" name="user.userName"></s:textfield>
<s:textfield label="Email" name="user.email"></s:textfield>
<s:textfield label="QQ" name="user.qq"></s:textfield>
<s:submit />
</s:form>
</body>
</html>
Reg.java
package bbs.web.action;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import bbs.domain.bean.User;
import bbs.domain.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
@Controller("reg")
public class Reg extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 7749277973867267345L;
private User user;
private String password2;
@Resource
private UserService userService;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getPassword2() {
return password2;
}
public void setPassword2(String password2) {
this.password2 = password2;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(user.getPassword());
System.out.println(password2);
if (!user.getPassword().equals(password2)){
addFieldError("password2","两次密码输入要一致");
return INPUT;
}
try {
userService.save(user);
} catch (Exception e) {
// TODO Auto-generated catch block
return ERROR;
}
return SUCCESS;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public UserService getUserService() {
return userService;
}
}
好了,环境搭建好了.目前的代码主要是用来测试,因此很粗糙,user的属性也不够,明天再好好理理思咱.
我分别用的是Struts2.0.14 Hibernate3.3.2 Spring2.5.6
做这个环境用到的jar包如下:
hibernate3.jar
hibernate-entitymanager.jar
ejb3-persistence.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
slf4j-api-1.5.8.jar
ehcache-1.2.3.jar
sqljdbc4.jar
slf4j-log4j12-1.5.0.jar
log4j-1.2.15.jar
commons-logging.jar
spring.jar
commons-pool.jar
commons-dbcp.jar
aspectjrt.jar
aspectjweaver.jar
cglib-nodep-2.1_3.jar
common-annotations.jar
struts-core-1.3.5.jar
tiles-api-2.0.4.jar
tiles-core-2.0.4.jar
tiles-jsp-2.0.4.jar
xml-apis-1.0.b2.jar
xwork-2.0.7.jar
antlr-2.7.2.jar
aopalliance-1.0.jar
classworlds-1.1.jar
commons-beanutils-1.7.0.jar
commons-chain-1.1.jar
commons-collections-2.1.jar
commons-digester-1.8.jar
commons-logging-1.0.4.jar
commons-logging-api-1.1.jar
commons-validator-1.3.0.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
oro-2.0.8.jar
plexus-container-default-1.0-alpha-10.jar
plexus-utils-1.2.jar
sitemesh-2.2.1.jar
struts2-core-2.0.14.jar
commons-beanutils-1.6.jar
commons-digester-1.6.jar
struts-mailreader-dao-1.3.5.jar
struts2-spring-plugin-2.0.14.jar
1、一个怪怪的错误:org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans.xml]; nested exception is java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlReaderContext.getResourceLoader()Lorg/springframework/core/io/ResourceLoader;
Caused by: java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlReaderContext.getResourceLoader()Lorg/springframework/core/io/ResourceLoader;
其实这个错误写得很明白了,是说没有getResourceLoader()方法,可是我看了半天没看明白,以为是自己的配置有问题,怎么整都整不好。后来上网查了才知道是spring2.0的问题,我用的是Struts2.0.14,把它下面的几个spring包也一起拷贝到lib目录下了,这几个包是2.0的,删除后OK!
2、还是一个错误提示没看明白,The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag.处理这个错误的时候老是认为是不是jar包少了,还认真地看了jsp文件都没有发现什么问题.后上网查了一下才知道,原来.jsp也要让Struts2过滤。后来,回过头看了一下错误信息,写得很清楚嘛:要用tags,仅在通过它的filter时。(嘿,直译)
3、接着整合。主要有几点错误:1、没有在spring中配置Reg.class(我用的是注解方式,在类前没加@controller),2、struts设置中action的class用了真实的类名,应当用spring中的bean id。3、无论如何总是提示action 没有map,最终原因是jar包没导入完整。花了两个小时做这事,气死了,配置改来改去,把spring移走,单独做一个struts的测试后,用了以前学struts2时提的jar包,才发现问题所在。更糟糕的是,配置文件打开一大堆,很多又同名,全搞乱了。等理清了所有错误原因之后,发现要用的那个struts.xml没有改完整。认真还是很关键的。
4、最后一个小错误,很快发现了,判断两次密码是否一致,总是报不一致。原来,我按以前的习惯用了"!="判断,string 是要用equal来判断。这个是测了两次后马上想起的。
总结:书和视频总是有限的,无论如何要自己动手,某教程说把Struts2中lib目录下的除plug-in之外的所有包和sprint-plug-in拷到web-inf/lib 下,结果发生错误。英文水平还是要提高,要认真去看错误,其实那些句子大致意思还是能看懂的,只是看到E文就头大,没认真看,加之实践少,不能理会。
贴原码:改了昨天一处代码把对UserServiceBean的注解,改成@Service("userService"),这样指定bean的id比较好,因为是面向接口编程,用接口的名称写,更合理些。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>MyBbs</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts.xml
<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="GBK" />
<constant name="struts.objectFactory" value="spring"></constant>
<package name="bbs.web" extends="struts-default">
<action name="register" class="reg">
<result name="input">/reg.jsp</result>
<result name="success">/ok.jsp</result>
</action>
</package>
</struts>
reg.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>注册新用户</title>
</head>
<body>
注册新用户
<s:form action="register.action">
<s:textfield label="用户ID" name="user.userId"></s:textfield>
<s:textfield label="昵称" name="user.nickName"></s:textfield>
<s:textfield label="密码" name="user.password"></s:textfield>
<s:textfield label="再输入一次" name="password2"></s:textfield>
<s:textfield label="真实姓名" name="user.userName"></s:textfield>
<s:textfield label="Email" name="user.email"></s:textfield>
<s:textfield label="QQ" name="user.qq"></s:textfield>
<s:submit />
</s:form>
</body>
</html>
Reg.java
package bbs.web.action;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import bbs.domain.bean.User;
import bbs.domain.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
@Controller("reg")
public class Reg extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 7749277973867267345L;
private User user;
private String password2;
@Resource
private UserService userService;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getPassword2() {
return password2;
}
public void setPassword2(String password2) {
this.password2 = password2;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(user.getPassword());
System.out.println(password2);
if (!user.getPassword().equals(password2)){
addFieldError("password2","两次密码输入要一致");
return INPUT;
}
try {
userService.save(user);
} catch (Exception e) {
// TODO Auto-generated catch block
return ERROR;
}
return SUCCESS;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public UserService getUserService() {
return userService;
}
}
好了,环境搭建好了.目前的代码主要是用来测试,因此很粗糙,user的属性也不够,明天再好好理理思咱.
我分别用的是Struts2.0.14 Hibernate3.3.2 Spring2.5.6
做这个环境用到的jar包如下:
hibernate3.jar
hibernate-entitymanager.jar
ejb3-persistence.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
slf4j-api-1.5.8.jar
ehcache-1.2.3.jar
sqljdbc4.jar
slf4j-log4j12-1.5.0.jar
log4j-1.2.15.jar
commons-logging.jar
spring.jar
commons-pool.jar
commons-dbcp.jar
aspectjrt.jar
aspectjweaver.jar
cglib-nodep-2.1_3.jar
common-annotations.jar
struts-core-1.3.5.jar
tiles-api-2.0.4.jar
tiles-core-2.0.4.jar
tiles-jsp-2.0.4.jar
xml-apis-1.0.b2.jar
xwork-2.0.7.jar
antlr-2.7.2.jar
aopalliance-1.0.jar
classworlds-1.1.jar
commons-beanutils-1.7.0.jar
commons-chain-1.1.jar
commons-collections-2.1.jar
commons-digester-1.8.jar
commons-logging-1.0.4.jar
commons-logging-api-1.1.jar
commons-validator-1.3.0.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
oro-2.0.8.jar
plexus-container-default-1.0-alpha-10.jar
plexus-utils-1.2.jar
sitemesh-2.2.1.jar
struts2-core-2.0.14.jar
commons-beanutils-1.6.jar
commons-digester-1.6.jar
struts-mailreader-dao-1.3.5.jar
struts2-spring-plugin-2.0.14.jar
相关文章推荐
- Struts2.3.4+Hibernate3.6+Spring2.5.6 集成教程
- jqueryvalidate(猫冬插件)+spring3.0+struts2.18(集成开发)
- Spring集成struts (1)
- Struts1.x + hibernate3 +spring2 集成需要的库
- struts-2.3.24+spring-framework-4.1.6.RELEASE+hibernate-release-4.3.10.Final 集成开发
- Struts学习笔记第三天
- Spring_36_集成 Struts2
- 六、Struts spring hibernate集成
- 集成 Hibernate,Spring,Struts Portlet 框架构建 Portlet 应用
- 4程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办
- struts2.2.3+spring3.1.0+mybatis3.1.0框架整合集成简单demo
- Spring2.0 集成Struts 2(三)
- SSH集成开发例子(Struts1.2 + Spring 3.1 + Hibernate 3.2)
- java开源框架集成常见错误之spring2.5中没有org.springframework.web.struts.DelegatingActionProxy ,使得Action不能注入到spring中
- Struts 与 Velocity 的集成
- Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
- 网络系统集成实习——第三天——2017.9.9
- spring与struts1集成方案(二)
- Struts,Hibernate,Spring集成开发宝典
- struts:第三天(3-30)