struts2整合 spring应用实例

    我们知道struts1与spring整合是靠 org.springframework.web.struts.DelegatingActionProxy来实现的,以下通过具体一个用户登录实现来 说明struts2整合spring的相关内容.

    一、准备工作

        

 1.实例分析我们在这不与数据库打交道,所有就是当用登录的时候判断用户名是否为指定 值,密码是否为指定值,以及相关的异常处理、
        2.为什么我们要说struts2整合spring呢?相信在家都知道,我也不用多说了....
        4.在  http://struts.apache.org/download.cgi#struts212 下 载struts2的jar包,源码,API文档.
        5.在  http://static.springframework.org/downloads/nightly/release-download.php 下 载不同版本的spring的jar包,源码,API文档.
        6.配置开发环境: MyEclipse6.0+Eclipse3.3+JDK6.0+Tomcat6.0+Struts 2.0.11+spring2.0
    7.新建web项目,导入相应的jar包,如以下所示:
     a.由于现在IDE开发工具还没有对struts2.0有很好的支持,所有我们需要手功配置,首先将我们刚下下来的struts2.0的lib里面的commons-logging-1.0.4.jar、ognl-2.6.11.jar、xwork- 2.0.4.jar、freemarker-2.3.8.jar、struts2-core-2.0.11.1.jar以及 struts2.0 里面所需要的插件包struts2-spring-plugin- 2.0.11.1.jar添加的WEB-INF/lib下面
     b.通过通过IDE开发工具项目对spring2.0的支持
    7.在src下建立struts.xml文件(具体的写法在后面呈现)
    8.配置web.xml,如下:
    

<? xml version="1.0" encoding="UTF-8" ?>
< web-app  version ="2.5"  xmlns ="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
>
    
    
    
<!--  加载struts2核心  -->
    
< 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 >

    
<!--  指明spring配置文件在何处  -->
    
< context-param >
        
< param-name > contextConfigLocation </ param-name >
        
< param-value > classpath*:applicationContext.xml </ param-value >
    
</ context-param >

    
<!--  加载spring配置文件applicationContext.xml  -->
    
< listener >
        
< listener-class >
            org.springframework.web.context.ContextLoaderListener
        
</ listener-class >
    
</ listener >     
</ web-app >


        

    二、建立前台页面
      1.用户登录肯定有一个用户登录页面login.jsp,如下:

<% @ page language = " java "   pageEncoding = " GB2312 " %>
<% @ taglib prefix = " s "   uri = " /struts-tags " %>

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//CN" >
< html >
  
< head >
      
< title > login2 </ title >
  
</ head >

  
< body >
      
< s:form  name ="login"  action ="login"  method ="post"   >
          
< s:textfield  name ="username"  label ="帐号" ></ s:textfield >
          
< s:password  name ="password"   label ="密码" ></ s:password >
          
< s:submit ></ s:submit >
      
</ s:form >
  
</ body >
</ html >

   2.若登录成功的index.jsp文件,如下:

<% @ page language = " java "   pageEncoding = " GB2312 " %>

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//CN" >
< html >
  
< head >
      
< title > login2 </ title >
  
</ head >
    
  
< body >
          
< div >
              
< h4 > 欢迎你! </ h4 >< font  color ="red" > ${username} </ font >
              
< br />
              
< h4 > 你登录的密码是 < h4 >< font  color ="red" > ${password} </ font > ;
          
</ div >
  
</ body >
</ html >

3、用户名非法提示页面.usernameInvalid.jsp(通过el表达示得到异常信息 )

<% @ page language = " java "  contentType = " text/html; charset=GB18030 "
    pageEncoding
= " GB18030 "
%>

<! 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=GB18030" >
< title > Insert title here </ title >
</ head >
< body >
    用户名非法:
< font  color ="red" > ${exception.message} </ font >
</ body >
</ html >

4、密码非法提示页面.passwordInvalid.jsp(struts2标签得到异常信息 );

<% @ page language = " java "  contentType = " text/html; charset=GB18030 "
    pageEncoding
= " GB18030 "
%>
 
<% @ 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=GB18030" >
< title > Insert title here </ title >
</ head >
< body >
    密码非法:
< FONT   color ="red" >< s:property  value ="exception.message" /></ FONT >
</ body >
</ html >

    
     三、建 立对应的action

       1.提供用户请求服务的LoginService类
       
           

package  org.topCSA.s2s.service;

import  org.topCSA.s2s.exception.PasswordException;
import  org.topCSA.s2s.exception.UsernameException;

public   class  LoginService
{
    
/*
     * 我们这只是一个小的例子,不与数据库打交到
     * 若有数据库操作,那么在这个LoginService就是操作具体Dao类实现登录的相关操作
     
*/

    
public   boolean  validate(String username,String password) throws  Exception
    
{
        
boolean  v  =   false ;
        
if ( ! " xcp " .equals(username)) // 如果用户名不等于xcp,就抛出一个异常
         {
            
throw   new  UsernameException( " 用 户名不正确 " );
        }

        
else   if ( ! " 123 " .equals(password))))// 如果密码不等于 123,就抛出一个异常

        
{
            
throw   new  PasswordException( " 密 码不正确 " );
        }

        
else
        
{
            v 
=   true ;            
        }

        
return  v;
    }

}


       2.接收用户请求的LoginAction类

package  org.topCSA.s2s.action;

import  org.topCSA.s2s.service.LoginService;

import  com.opensymphony.xwork2.ActionSupport;

public   class  LoginAction  extends  ActionSupport
{

    
/**
     * 
     
*/

    
private   static   final   long  serialVersionUID  =   1L ;

    
private  String username;
    
private  String password;
    
    
/*
     * 我们通过Spring的IOC容器注入LoginService,从而减少类之间的依赖关系
     
*/

    
private  LoginService loginService;
    
    
public  LoginService getLoginService()
    
{
        
return  loginService;
    }

    
public   void  setLoginService(LoginService loginService)
    
{
        
this .loginService  =  loginService;
    }

    
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;
    }

    
    
    @Override
    
public   void  validate()
    
{
        
/*
         * 我们可以在这个方法类加一些输入验证 但是为了体现后面我们写的业务逻辑方法这就不验证
         
*/

    }

    
    @Override
    
public  String execute()  throws  Exception
    
{
        
        
boolean  result  =  loginService.validate(username, password);
        
if (result  ==   true )
        
{
            
return  SUCCESS;
        }

        
else
        
{
            
return  INPUT;
        }

    }

}

   
  四、配 置struts.xml与applicationContext.xml
    
        1.配置struts.properties,为了解决中文问题,具体用法参照struts2的用法如下:里面加上struts.i18n.encoding = gb2312,当然也可以直接加到struts.xml里面写法为 <constant name="struts.i18n.encoding" value="gbk"></constant>
        2.配置struts.xml
        

<? xml version = " 1.0 "  encoding = " GB2312 "   ?>
<! DOCTYPE struts PUBLIC
    
" -//Apache Software Foundation//DTD Struts Configuration 2.0//EN "
    
" http://struts.apache.org/dtds/struts-2.0.dtd " >
< struts >
    
< package  name = " struts2 "   extends = " struts-default " >
        
< action name = " login "   class = " LoginAction " >
            
< exception - mapping result = " usernameInvalid "  exception = " org.topCSA.s2s.exception.UsernameException "   />
            
< exception - mapping result = " passwordInvalid "  exception = " org.topCSA.s2s.exception.PasswordException "   />
            
< result name = " success " >/ index.jsp </ result >
            
< result name = " input " >/ login.jsp </ result >
            
< result name = " usernameInvalid " >/ usernameInvalid.jsp </ result >
            
< result name = " passwordInvalid " >/ passwordInvalid.jsp </ result >
        
</ action >
    
</ package >
</ struts >


        3.配置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 " >
    
    
< bean name = " loginService "   class = " org.topCSA.s2s.service.LoginService "   />
    
    
< bean name = " LoginAction "   class = " org.topCSA.s2s.action.LoginAction " >
        
< property name = " loginService " >
            
< ref bean = " loginService " />
        
</ property >
    
</ bean >         

</ beans >



         五、测试(全部成功)    
    

           



        
            
            


            

阅读更多
个人分类: Struts2 Java Spring
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭