Customer.java
package po;
public class Customer {
}
CustomerDao.java
package dao;
import po.Customer;
public class CustomerDao implements IDAO{
public Customer getCusomerByAccount(String account){
System.out.println("Dao作查询,账号是:" + account);
return null;
}
}
===================================================================
package dao;
import po.Customer;
public interface IDAO {
public abstract Customer getCusomerByAccount(String account);
}
package prj23_1.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import prj23_1.form.LoginForm;
import dao.CustomerDao;
import dao.IDAO;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
String account = loginForm.getAccount();
String password = loginForm.getPassword();
//在此调用Dao
/*错误!ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");*/
ServletContext application = this.getServlet().getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(application);
IDAO dao = (IDAO)wac.getBean("dao");
dao.getCusomerByAccount(account);
return new ActionForward("/login.jsp");
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dao" class="dao.CustomerDao"></bean>
</beans>
======================================================================
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 让系统认识到Spring配置文件 -->
<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>
=========================================================
这里可以看出:
创建对象由spring来完成。
在Action中没有直接跟Dao打交道,只用到了接口。
对于有多个Dao很有好处。
这节与上一节完成的是同样的功能。但是任务比较单纯。
还可以更简单一些,将Action改为如下:
=============================================================
package prj23_1.action;
import javax.servlet.ServletContext;
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.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.struts.ActionSupport;
import prj23_1.form.LoginForm;
import dao.IDAO;
public class LoginAction extends ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
String account = loginForm.getAccount();
String password = loginForm.getPassword();
//在此调用Dao
WebApplicationContext wac = this.getWebApplicationContext();
IDAO dao = (IDAO)wac.getBean("dao");
dao.getCusomerByAccount(account);
return new ActionForward("/login.jsp");
}
}
其它的都保持不变就可以了。
IDAO dao = (IDAO)wac.getBean("dao");还是有入侵的代码。
解决方案下一节