`

spring(2):struts与spring整合

 
阅读更多

本节主讲将struts与spring进行整合:

1,新建一个WEB工程:工程名为strutsspring,在其src目录上新建struts.xml配置文件

     将struts相关的7个JAR包,拷至工程的WebRoot/Web-inf/lib目录下

    

2,配置 Web.xml文件,加上struts的过滤

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<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>
</web-app>

 

经过以上两步配置,此工程已是标准的struts工程。

 

 修改Tomcat/conf/server.xml配置文件,加上

<Context path="/strutsspring" docBase="E:\workspace\strutsspring\WebRoot" reloadable="true"/>

 3,将spring相关的JAR包导入工程,将applicationContext.xml文件放入工程的web-inf目录下

4,将struts与spring整合:

    将struts lib目录下的struts2-spring-plugin-2.0.14.jar包复制到工程中,此包中只有一个class文件。

    修改web.xml文件,加入监听器,如下:

<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener	
	</listener-class>
</listener>

    启动tomcat服务器,启用完成。

 

 例子:下面用一个登录的例子,结合struts与spring开发

登录页面login.jsp, 要求输入用户名与密码

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix ="s" uri="/struts-tags"%>

<html>
  <head>
  </head>
  <body>
    <s:form action="login">
    	<s:textfield name="username" size="20" label="username"></s:textfield>
    	<s:password name="password" size="20" label="password"></s:password>
    	<s:submit></s:submit>
    </s:form>
  </body>
</html>

 

 定义一个接口,isLogin方法用于判断用户名与密码是否正确

package com.test.service;

public interface LoginService {
	public boolean isLogin(String username,String password);
}

 

实现类,当username为hello,password为world时,返回true,否则返回false

package com.test.service.impl;

import com.test.service.LoginService;

/*
 * 该类完成业务处理,向外暴露的是LoginService接口
 */
public class LoginServiceImpl implements LoginService {

	public boolean isLogin(String username, String password) {
		if("hello".equals(username) && "world".equals(password)){
			return true;
		}
		return false;
	}

}

 

 

action类中不处理业务逻辑,逻辑由LoginService 接口负责,其对象由spring负责生成

package com.test.action;

import com.opensymphony.xwork2.ActionSupport;
import com.test.service.LoginService;

public class LoginAction extends ActionSupport {
	private String username;
	private String password;
	private LoginService loginService;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public LoginService getLoginService() {
		return loginService;
	}
	public void setLoginService(LoginService loginService) {
		this.loginService = loginService;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	//下面这个loginService由spring生成
	public String execute() throws Exception {
		if(loginService.isLogin(username, password)){
			return "success";
		}else{
			return "error";
		}
	}
}

 

struts配置文件,此文件中不再负责生成action,改为由spring配置文件生成,class对应的值,必须对应spring配置文件中的bean id

<?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>
	<package name="strutsspring" extends="struts-default">
		<!--下面这个class中的loginAction对应的是spring配置文件applicationContext.xml文件中声明的loginAction bean -->
		<!--现在由spring负责生成action-->
		<action name="login" class="loginAction">
			<result name="success">/success.jsp</result>	
			<result name="error">/error.jsp</result>
		</action>		
	</package>
</struts>

 

 spring配置文件,负责生成action及loginService对象

<?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="loginService" class="com.test.service.impl.LoginServiceImpl" scope="singleton"></bean>
	<bean id="loginAction" class="com.test.action.LoginAction" scope="prototype">
		<property name="loginService" ref="loginService"></property>
	</bean>
</beans>

 其中scope配置是重点!其范围如下图所示

 

一般无状态类应使用singleton,而action则建议使用request或prototype

无状态类是指只有方法,没有属性的类。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics