(一)关键理念及需要注意的地方:

  使用struts2+spring3.0的框架搭建web程序,就是使用spring来进行依赖注入(依赖注入请参考baidu上面的解释:http://baike.baidu.com/link?url=uESWlODOsyqaaqlGLxps8xh2UaadfEe2rdsjspvZN5qsw1BOitPx_QQYuPV904jCwb493WK1ROrO3iIPZrbAQa)。

  需要注意的地方如下:

  1. struts.xml中的action的class要写spring中的bean,这个意思就是让spring去实例化改对象。比如:<action name="Login" class="loginAction" method="execute">
  2. 在action的bean中在引入相关的类
        <bean id="loginAction" class="com.HYOpticalComm.action.LoginAction"> 
      <property name="loginService" ref="loginServiceImp"></property>  ---这里边调用的是LoginAction类的setter函数。并使用loginServiceImp类来实例化
        </bean>
  3. 要包含“Struts 2 Spring”这个包,这个包就是struts和spring关联的包。

(二)目录结构和需要的包:

  

(三)各个文件相互之间的关系:

(四)代码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7.  
  8. <!-- 配置FilterDispatcher过滤器,以便加Spring容器 -->
  9. <filter>
  10. <filter-name>struts2</filter-name>
  11. <filter-class>
  12. org.apache.struts2.dispatcher.FilterDispatcher
  13. </filter-class>
  14. </filter>
  15.  
  16. <filter-mapping>
  17. <filter-name>struts2</filter-name>
  18. <url-pattern>/*</url-pattern>
  19. </filter-mapping>
  20.  
  21. <!-- 指明spring配置文件在何处 -->
  22. <context-param>
  23. <param-name>contextConfigLocation</param-name>
  24. <param-value>/WEB-INF/classes/spring*.xml</param-value>
  25. </context-param>
  26.  
  27. <!-- 开启监听, 加载spring配置文件applicationContext.xml -->
  28. <listener>
  29. <listener-class>
  30. org.springframework.web.context.ContextLoaderListener
  31. </listener-class>
  32. </listener>
  33. <session-config>
  34. <session-timeout>1</session-timeout>
  35. </session-config>
  36.  
  37. <!-- web欢迎界面 -->
  38. <welcome-file-list>
  39. <welcome-file>login.jsp</welcome-file>
  40. </welcome-file-list>
  41.  
  42. </web-app>

web.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
  3. <struts>
  4. <!-- 需要Spring时添加 -->
  5. <!-- <constant name="struts.objectFactory" value="spring" /> -->
  6.  
  7. <package name="default" extends="struts-default">
  8. <action name="Login" class="loginAction" method="execute">
  9. <result name="success">index.jsp</result>
  10. <result name="input">login.jsp</result>
  11. </action>
  12. </package>
  13.  
  14. </struts>

struts.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  8.  
  9. <!--
  10. <bean id="dataSource"
  11. class="org.apache.commons.dbcp.BasicDataSource">
  12. <property name="driverClassName"
  13. value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
  14. </property>
  15. <property name="url"
  16. value="jdbc:sqlserver://127.0.0.1:1433;databaseName=springTest">
  17. </property>
  18. <property name="username" value="sa"></property>
  19. <property name="password" value="111111"></property>
  20. </bean>
  21. <bean id="sessionFactory"
  22. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  23. <property name="dataSource">
  24. <ref bean="dataSource" />
  25. </property>
  26. <property name="hibernateProperties">
  27. <props>
  28. <prop key="hibernate.dialect">
  29. org.hibernate.dialect.SQLServerDialect
  30. </prop>
  31. <prop key="hibernate.show_sql">true</prop>
  32. <prop key="hibernate.format_sql">true</prop>
  33. </props>
  34. </property>
  35. <property name="mappingResources">
  36. <list>
  37. <value>com/HYOpticalComm/model/Login.hbm.xml</value>
  38. </list>
  39. </property>
  40. </bean>
  41. -->
  42. <!--
  43. <import resource="config/spring/spring-basic.xml" />
  44. <import resource="config/spring/spring-dao.xml" />
  45. -->
  46. <import resource="config/spring/spring-service.xml" />
  47. <import resource="config/spring/spring-action.xml" />
  48. </beans>

spring.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  8.  
  9. <bean id="loginAction" class="com.HYOpticalComm.action.LoginAction">
  10. <property name="loginService" ref="loginServiceImp"></property>
  11. </bean>
  12. </beans>

spring-action.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  8.  
  9. <bean id="loginServiceImp" class="com.HYOpticalComm.serviceImp.LoginServiceImp" />
  10. </beans>

spring-service.xml

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="s" uri="/struts-tags" %>
  3.  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. </head>
  8.  
  9. <body>
  10.  
  11. <s:form action="Login" method="post">
  12. <s:textfield key="username" label="用户名" />
  13. <s:password key="password" label="密码" />
  14. <s:submit value="登陆" />
  15. </s:form>
  16.  
  17. </body>
  18. </html>

login.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2.  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6. </head>
  7.  
  8. <body>
  9. <div>
  10. <h4>欢迎你!</h4><font color="red">${username}</font>
  11. <br/>
  12. <h4>你登录的密码是<h4><font color="red">${password}</font>;
  13. </div>
  14. </body>
  15. </html>

index.jsp

  1. package com.HYOpticalComm.action;
  2.  
  3. import com.HYOpticalComm.service.ILoginService;
  4.  
  5. import com.opensymphony.xwork2.ActionSupport;
  6.  
  7. public class LoginAction extends ActionSupport
  8. {
  9.  
  10. /**
  11. *
  12. */
  13. private static final long serialVersionUID = 1L;
  14.  
  15. private String username;
  16. private String password;
  17.  
  18. /*
  19. * 我们通过Spring的IOC容器注入LoginService,从而减少类之间的依赖关系
  20. */
  21. private ILoginService loginService;
  22.  
  23. public ILoginService getLoginService()
  24. {
  25. return loginService;
  26. }
  27. public void setLoginService(ILoginService loginService)
  28. {
  29. this.loginService = loginService;
  30. }
  31. public String getUsername()
  32. {
  33. return username;
  34. }
  35. public void setUsername(String username)
  36. {
  37. this.username = username;
  38. }
  39. public String getPassword()
  40. {
  41. return password;
  42. }
  43. public void setPassword(String password)
  44. {
  45. this.password = password;
  46. }
  47.  
  48. @Override
  49. public void validate()
  50. {
  51. /*
  52. * 我们可以在这个方法类加一些输入验证 但是为了体现后面我们写的业务逻辑方法这就不验证
  53. */
  54. }
  55.  
  56. @Override
  57. public String execute() throws Exception
  58. {
  59.  
  60. boolean result = loginService.validate(username, password);
  61. if(result == true)
  62. {
  63. return SUCCESS;
  64. }
  65. else
  66. {
  67. return INPUT;
  68. }
  69. }
  70. }

LoginAction.java

  1. package com.HYOpticalComm.service;
  2.  
  3. /*接口类 */
  4. public interface ILoginService
  5. {
  6. public boolean validate(String username,String password)throws Exception;
  7. }

ILoginService.java

  1. package com.HYOpticalComm.serviceImp;
  2.  
  3. import com.HYOpticalComm.service.ILoginService;
  4.  
  5. public class LoginServiceImp implements ILoginService
  6. {
  7. /*
  8. * 我们这只是一个小的例子,不与数据库打交到
  9. * 若有数据库操作,那么在这个LoginService就是操作具体Dao类实现登录的相关操作
  10. */
  11. public boolean validate(String username,String password)throws Exception
  12. {
  13. boolean v = false;
  14. if(!"admin".equals(username))//如果用户名不等于xcp,就抛出一个异常
  15. {
  16. //throw new UsernameException("用户名不正确");
  17. }
  18. else if(!"123".equals(password))//如果密码不等于123,就抛出一个异常
  19.  
  20. {
  21. //throw new PasswordException("密码不正确");
  22. }
  23. else
  24. {
  25. v = true;
  26. }
  27. return v;
  28. }
  29. }

LoginServiceImp.java

SSH框架(四) struts2+spring3.0的登陆示例的更多相关文章

  1. SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置

    一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...

  2. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSH框架(Struts2+Spring+Hibernate)搭建整合详细步骤

    在实际项目的开发中,为了充分利用各个框架的优点,通常都会把 Spring 与其他框架整合在一起使用. 整合就是将不同的框架放在一个项目中,共同使用它们的技术,发挥它们的优点,并形成互补.一般而言,在进 ...

  3. SSH框架之Struts2第一篇

    1.2 Struts2的概述 : Struts2是一个基于MVC设计模式的WEB层的框架. 1.2.1 常见web层框架 Struts1,Struts2,WebWork,SpringMVC Strut ...

  4. 搭建SSH框架整合Struts2和Spring时,使用@Autowired注解无法自动注入

    © 版权声明:本文为博主原创文章,转载请注明出处 1.问题描述: 搭建SSH框架,在进行Struts2和Spring整合时,使用Spring的@Autowired自动注入失败,运行报错java.lan ...

  5. SSH框架总结(帧分析+环境结构+示例源代码下载)

    首先,SSH不是一个框架.而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...

  6. SSH (Struts2+Spring3.0+Hibernate3)框架(一) 理论

    典型的J2EE三层结构,分为表现层.中间层(业务逻辑层)和数据服务层.三层体系将业务规则.数据访问及合法性校验等工作放在中间层处理.客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与 ...

  7. ssh框架整合---- spring 4.0 + struts 2.3.16 + maven ss整合超简单实例

    一 . 需求 学了这么久的ssh,一直都是别人整合好的框架去写代码,自己实际动手时才发现框架配置真是很坑爹,一不小心就踏错,真是纸上得来终觉浅! 本文将记录整合struts + spring的过程 , ...

  8. SSH框架之Struts2第三篇

    1.3相关知识点 : 1.3.1 OGNL的表达式 : 1.3.1.1 什么是OGNL OGNL是Object-Graph Navigation Language的编写,它是一种功能强大的表达式语言, ...

  9. SSH框架学习------struts2(一)

    1.总的目录 2.所有程序 1)index.jsp很简单 <%@ page language="java" contentType="text/html; char ...

随机推荐

  1. vector map迭代器失效解决方案

    vector : iter = container.erase(iter);    //erase的返回值是删除元素下一个元素的迭代器 vector<int>::iterator it = ...

  2. 在VS2013上配置OpenCV1.0

    OpenCV1.0版(下载)基本上已经是老掉牙了,但是不想装新版,只是因为任性.所以就有了这样一个新老搭配.装完回想起来还是挺简单的,但是还是费了我一晚上,所以有必要记录一下.         先在电 ...

  3. 数据清洗记录,pandas

    pandas数据清洗:http://www.it165.net/pro/html/201405/14269.html data=pd.Series([1,2,3,4]) data.replace([1 ...

  4. ERR_PTR PTR_ERR IS_ERR ERROR

    在linux-x.xx/include/uapi/asm-generic/errno-base.h和errno.h里分别定义了返回错误的信息. errno-base.h: #ifndef _ASM_G ...

  5. centos7 showdoc 手动安装部署

    1.从 https://github.com/star7th/showdoc 下载压缩包: 2.解压文件,然后将showdoc-master下面的文件上传至服务器对应的文件下面: 3.在浏览器中输入 ...

  6. vs2013-zlib1.2.8编译使用

    1.编译步骤 a.先用vs2013命令行执行下bld_ml32.bat批处理 b.将inffas32.obj和match686.obj复制到目录zlib128\zlib-1.2.8 c.打开zlib- ...

  7. AD的差分输入与单端输入

    AD的差分输入与单端输入 单端输入,输入信号均以共同的地线为基准.这种输入方法主要应用于输入信号电压较高(高于1V),信号源到模拟输入硬件的导线较短(低于15 ft,1ft=304.8mm),且所有的 ...

  8. Codeforces Problem - 38E - Let's Go Rolling!(DP)

    E. Let's Go Rolling! time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. C++11 auto和decltype推导规则

    VS2015下测试: decltype: class Foo {}; int &func_int_r(void) { int i = 0; return i; }; int && ...

  10. paramiko 模块封装

    #!/usr/bin/env python#coding=utf-8 import paramiko, getpass,sys,traceback class ssh_utils(): def log ...