Spring与Struts集成

这是一个Web Project

首先是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"> <!-- 指定Spring的配置文件,默认从web根目录下开始寻找配置文件 --> <!-- 我们可以通过Spring提供的classpath:前缀指定从类路径下寻找 --> <!-- 这里【contextConfigLocation】是固定的 --> <!-- 通过ContextLoaderListener类的第53行的new ContextLoader()跳转到ContextLoader.java类中 --> <!-- 在ContextLoader.java类的第93行发现CONFIG_LOCATION_PARAM的值就是contextConfigLocation --> <!-- 这个值就是Spring系统内部使用的,所以是不能更改的,如果修改了的话,那么就找不到Spring的配置文件了 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 实例化Spring容器 --> <!-- 当应用启动的时候,ContextLoaderListener就会被执行,然后就会读取Spring的相关配置文件 --> <!-- 它默认会到//当前Web应用//WebRoot//WEB-INF//目录中查找applicationContext.xml文件 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 解决乱码问题 --> <filter> <filter-name>SpringCharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>SpringCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <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>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> </web-app>

然后是位于//WebRoot//WEB-INF//中的struts-config.xml文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="loginForm" type="com.jadyer.usermgr.web.forms.LoginActionForm" /> </form-beans> <global-forwards> <forward name="success" path="/login_success.jsp" /> </global-forwards> <action-mappings> <!-- 这里type属性需改为Spring的代理Action类org.springframework.web.struts.DelegatingActionProxy --> <!-- 代理Action的作用:取得BeanFactory,然后到IoC容器中将本次请求对应的Action取出 --> <!-- 测试时可能会提示No action instance for path /login22 could be created --> <!-- 经检查发现,所使用的Sping2.5.SEC01所提供的类库中的spring.jar里面没有DelegatingActionProxy类 --> <!-- 而在Spring2.0中,该代理Action类是捆绑在spring主包中的,而在Spring2.5.6中就被分隔出来了 --> <!-- 我们可以到spring-framework-2.5.6.SEC01//dist//modules//spring-webmvc-struts.jar中找到了该代理类 --> <!-- 所以将spring-webmvc-struts.jar包import当前Web工程后,即可解决该错误提示 --> <!-- 【补充】关于Spring与Struts的另一种集成方式,请参见http://blog.csdn.net/jadyer/archive/2011/02/20/6196545.aspx --> <action path="/login" type="org.springframework.web.struts.DelegatingActionProxy" name="loginForm" scope="request"/> </action-mappings> </struts-config>

接着是用于输入用户名和密码的login.jsp页面

<%@ page pageEncoding="UTF-8"%> <h2>Spring2.5.6和Struts1.2.9集成</h2> <form action="<%=request.getContextPath()%>/login.do" method="POST"> 用户:<input type="text" name="username"><br/> 密码:<input type="password" name="password"><br/> <input type="submit" value="集成测试" /> </form>

当用户名和密码正确时显示给用户的login_success.jsp页面

<%@ page pageEncoding="UTF-8"%> 恭喜<span style="color:blue;font-size:28px" mce_style="color:blue;font-size:28px">${loginForm.username}</span>登录成功

接着是位于src根目录下的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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="userManager" class="com.jadyer.usermgr.manager.UserManagerImpl"/> <!-- 将Action交给Spring创建。这里应该配置一下业务逻辑对象,将其注入给Action --> <!-- 建议将scope设置为prototype,这样struts的Action就是线程安全的了 --> <!-- 这里必须使用name属性,而且name值必须和struts-config.xml文件中<action>标签的path属性值一致 --> <!-- 【另外】<bean>的id和name区别:id值不能加特殊符号,name可以加类似斜杠/的特殊符号 --> <bean name="/login" class="com.jadyer.usermgr.web.actions.LoginAction" scope="prototype"> <property name="userManager" ref="userManager"/> </bean> </beans>

然后是用到的服务层的接口以及实现类

package com.jadyer.usermgr.manager; public interface UserManager { public void login(String username, String password); } /** * 上面的UserManager是服务层的接口 * 下面的UserManagerImpl是服务层接口的实现类 */ package com.jadyer.usermgr.manager; public class UserManagerImpl implements UserManager { public void login(String username, String password) { //System.out.println(this.getClass() + ", username=" + username); System.out.println(UserManagerImpl.class + ", username=" + username); } }

然后是Struts1.x中用于收集前台表单信息的ActionForm类

package com.jadyer.usermgr.web.forms; import org.apache.struts.action.ActionForm; public class LoginActionForm extends ActionForm { 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; } }

最后是Struts1.x中用于处理请求分发的Action类

package com.jadyer.usermgr.web.actions; 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 com.jadyer.usermgr.manager.UserManager; import com.jadyer.usermgr.web.forms.LoginActionForm; public class LoginAction extends Action { private UserManager userManager; //让Spring注入该对象 public void setUserManager(UserManager userManager) { this.userManager = userManager; } @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginActionForm laf = (LoginActionForm)form; String username = laf.getUsername(); String password = laf.getPassword(); userManager.login(username, password); return mapping.findForward("success"); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值