2014-06-12 26 views
0

我创建了一个简单的应用程序,使用带有dao的struts。我的应用程序的目录结构到底是什么here.使用DAO执行简单的Struts应用程序

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" 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>Test4</display-name> 
<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>/*</url-pattern> 
</filter-mapping> 

<welcome-file-list> 
<welcome-file>login.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 

的struts.xml:

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
<include file="struts-default.xml"/> 
<package name="default" extends="struts-default" > 

<action name="loginverify" class="com.java.files.AuthenticateUser" method="validateUser"> 
<result name="success">welcome.jsp</result> 
<result name="failure">login.jsp</result>  
</action> 

</package> 
</struts> 

的Login.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ 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>Insert title here</title> 

</head> 
<body> 
<div > 

<center> 
<h1>MITOSIS TECHNOLOGY</h1> 
<H2>EMPLOYEE LOGIN</H2> 
<s:form action="loginverify" method="post"> 
<s:textfield name="user.username" label="USER NAME" /> 
<s:password name="user.password" label="PASSWORD" /> 
<s:submit value="login" /> 
</s:form> 
</center> 
</div> 
</body> 
</html> 

Action类:

package com.java.files; 

import com.java.dao.UserDao; 
import com.java.daoimpl.UserDaoImpl; 
import com.java.model.User; 

public class AuthenticateUser { 

    private User user; 
    public User getUser() { 
    return user; 
} 

public void setUser(User user) { 
    this.user = user; 
} 

private UserDao userdao; 

public UserDao getUserdao() { 
    return userdao; 
} 

public void setUserdao(UserDao userdao) { 
    this.userdao = userdao; 
} 

public String execute(){ 
    return "success"; 
} 

public String validateUser(){ 

    userdao=new UserDaoImpl();   
    User u=userdao.select_user(user.getUsername(),user.getPassword()); 
    if(u.getPassword().length()==0|| u.getUsername().length()==0){ 
    return "failure"; 
} 
    else return "success"; 
} 

public String createUser(){ 
    userdao=new UserDaoImpl(); 
    userdao.insert_user(user); 
    return "success"; 
} 
} 

这是表结构:

create table user(usr_name varchar(50),password (20)) 

模型类:

package com.java.model; 

public class User { 

    private String username; 
    private String password; 

    public String getUsername() { 
    return username; 
    } 
    public void setUsername(String username) { 
this.username = username; 
    } 
    public String getPassword() { 
    return password; 
    } 
    public void setPassword(String password) { 
    this.password = password; 
    } 

} 

SQLMAP user.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> 

<sqlMap> 

    <resultMap class="com.java.model.User" id="select_user_result"> 
    <result property="username" column="usr_name"/> 
    <result property="password" column="password"/> 
    </resultMap> 

    <insert id="insert_user" parameterClass="com.java.model.User"> 
    insert into user(usr_name,password) values(#username#,#password#) 
    </insert> 

    <select id="select_user" resultMap="select_user_result"> 
    select * from user where usr_name=#username# and password=#password# 
    </select> 

</sqlMap> 

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"> 

    <!-- 
    Define the project's application context file(s) here. 

    By default, the bean definitions can be overridden by 
    registering a different definition with the same name. 
    --> 


<bean id="AuthenticationAction" scope="prototype" class="com.java.files.AuthenticateUser"> 
<property name="userdao" ref="userdao"> 

</property>  

    </bean> 

    <bean id="AuthenticateDaoImplementation" class="com.java.daoimpl.UserDaoImpl"> 

    </bean> 

    <bean name="User" class="com.java.model.User" scope="prototype"/> 

</beans> 

SqlMapConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> 

<sqlMapConfig> 
    <settings 
    cacheModelsEnabled="true" 
    statementCachingEnabled="true"/> 
    <sqlMap resource="sqlmap/User.xml"/> 

</sqlMapConfig> 

DaoImplementation:

package com.java.daoimpl; 

import java.util.HashMap; 
import java.util.Map; 

import com.java.dao.UserDao; 
import com.java.model.User; 

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; 

public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao{ 

    @Override 
    public void insert_user(User u) { 
    System.out.println(u.getPassword()); 
    getSqlMapClientTemplate().insert("insert_user", u); 
} 

    @Override 
public User select_user(String name, String password) { 

    Map <String, String>m= new HashMap <String,String>(); 
    m.put("username", name); 
    m.put("password", password); 
    return (User)getSqlMapClientTemplate().queryForObject("select_user", m); 

    } 

} 

我不知道什么是这个代码的问题。当我设置中断点并验证用户方法时,它会到daoIdplementation类,但是在执行时返回(User)getSqlMapClientTemplate().queryForObject("select_user", m);代码它会引发classnNotFoundException。我不知道现在有什么问题。由于我是struts新手,我不确定applicationContext.xmlsqlMap.xml文件实际上是正确的。我在3天内坚持这个问题。

根源:

java.lang.IllegalArgumentException: No SqlMapClient specified 
org.springframework.util.Assert.notNull(Assert.java:112) 
org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:164) 
org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:242) 
com.java.daoimpl.UserDaoImpl.select_user(UserDaoImpl.java:26) 
com.java.files.AuthenticateUser.validateUser(AuthenticateUser.java:70) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229) 
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150) 
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224) 
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223) 
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221) 
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) 
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504) 
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) 
+0

哪里是你userdaoimpl.java类。只是后也,这将有助于 – user3662273

+0

邮政与根源堆栈跟踪? –

回答

1

ASLO配置sqlMapClient在Spring容器

<beans> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    </bean> 

    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
    <property name="configLocation" value="WEB-INF/sqlmap-config.xml"/> 
    <property name="dataSource" ref="dataSource"/> 
    </bean> 

</beans> 

而在你的DAO并指定其作为财产?

<bean id="AuthenticateDaoImplementation" class="com.java.daoimpl.UserDaoImpl"> 
    <property name="sqlMapClient" ref="sqlMapClient"/> 
</bean> 

Sqlmap user.xml

指定namespace="User"

<sqlMap namespace="User"> 
...