您的位置:首页 > 编程语言 > Java开发

第三天:集成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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐