• Java进阶知识20 Struts2和Spring整合在一起


    1、概述       

      1、Spring负责对象创建
      2、Struts2负责用Action处理请求
      3、整合的关键点:让Struts2框架Action对象的创建交给Spring完成。

    2、整合实例  

    需要用到的 jar包

           Spring的配置文件(aaa-bbb.xml)建议分层,方便维护。

    配置web.xml文件

     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   <display-name></display-name>    
     8   <welcome-file-list>
     9     <welcome-file>index.jsp</welcome-file>
    10   </welcome-file-list>
    11   
    12     <!-- Spring 监听器 -->
    13     <context-param>
    14         <param-name>contextConfigLocation</param-name>
    15         <param-value>/WEB-INF/classes/beans-*.xml</param-value>
    16     </context-param>
    17     <listener>
    18         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    19     </listener>
    20 
    21     <!-- Struts 过滤器 -->
    22     <filter>
    23         <filter-name>struts2</filter-name>
    24         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    25     </filter>
    26     <filter-mapping>
    27         <filter-name>struts2</filter-name>
    28         <url-pattern>/*</url-pattern>
    29     </filter-mapping>
    30 </web-app>

    DAO层

     1 //接口
     2 public interface IUserDao {
     3     public String getByName();
     4 }
     5 
     6 //实现
     7 public class UserDaoImpl implements IUserDao {
     8 
     9     public String getByName() {
    10         return "DSHORE";
    11     }
    12 }

    Service层

     1 //接口
     2 public interface IUserService {
     3     public String getByName();
     4 }
     5 
     6 //实现
     7 public class UserServiceImpl implements IUserService {
     8 
     9     //注入值,如果没有使用spring框架,则此处需要new对象,否则拿不到值。
    10     private IUserDao userDao;// = new UserDaoImpl();
    11     
    12     public String getByName() {
    13         return userDao.getByName();
    14     }
    15 
    16     public IUserDao getUserDao() {
    17         return userDao;
    18     }
    19     public void setUserDao(IUserDao userDao) {
    20         this.userDao = userDao;
    21     }
    22 }

    Action层

     1 package com.shore.action;
     2 
     3 import com.opensymphony.xwork2.ActionSupport;
     4 import com.shore.service.IUserService;
     5 
     6 /**
     7  * @author DSHORE/2019-10-26
     8  * 
     9  */
    10 public class UserAction extends ActionSupport {
    11     private static final long serialVersionUID = -8197510116737054459L;
    12 
    13     //注入值,如果没有使用spring框架,则此处需要new对象,否则拿不到值。
    14     private IUserService userService;// = new UserServiceImpl();
    15 
    16     public String login() {
    17         System.out.println("用户名:" + userService.getByName());
    18         return SUCCESS;
    19     }
    20 
    21     public IUserService getUserService() {
    22         return userService;
    23     }
    24 
    25     public void setUserService(IUserService userService) {
    26         this.userService = userService;
    27     }
    28 }

    struts.xml 配置文件      注意:struts.xml 中 action name 和 bean-action.xml 中的 bean id 名称,一定要保持一致!!!

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 
     6 <struts>
     7     <!-- true支持动态方法调用 -->
     8     <constant name="struts.enable.DynamicMethodInvocation" value="true" />
     9     <constant name="struts.devMode" value="true" /> <!-- true -->
    10 
    11     <package name="front" namespace="/front" extends="struts-default">
    12         <action name="userAction" class="com.shore.action.UserAction">
    13             <result name="success">/success.jsp</result>
    14         </action>
    15     </package>
    16 </struts>

    beans-dao.xml 配置文件    

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:aop="http://www.springframework.org/schema/aop"
     5        xmlns:tx="http://www.springframework.org/schema/tx"  
     6        xsi:schemaLocation="
     7        http://www.springframework.org/schema/beans
     8        http://www.springframework.org/schema/beans/spring-beans.xsd
     9        http://www.springframework.org/schema/tx
    10        http://www.springframework.org/schema/tx/spring-tx.xsd
    11        http://www.springframework.org/schema/aop
    12        http://www.springframework.org/schema/aop/spring-aop.xsd">
    13        
    14        <bean id="userDao" class="com.shore.dao.impl.UserDaoImpl"></bean>
    15 </beans>

    beans-service.xml 配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:aop="http://www.springframework.org/schema/aop"
     5        xmlns:tx="http://www.springframework.org/schema/tx"  
     6        xmlns:p="http://www.springframework.org/schema/p" 
     7        xsi:schemaLocation="
     8        http://www.springframework.org/schema/beans
     9        http://www.springframework.org/schema/beans/spring-beans.xsd
    10        http://www.springframework.org/schema/tx
    11        http://www.springframework.org/schema/tx/spring-tx.xsd
    12        http://www.springframework.org/schema/aop
    13        http://www.springframework.org/schema/aop/spring-aop.xsd">
    14        
    15        <bean id="userService" class="com.shore.service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>
    16 </beans>

    beans-action.xml 配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:aop="http://www.springframework.org/schema/aop"
     5        xmlns:tx="http://www.springframework.org/schema/tx"  
     6        xmlns:p="http://www.springframework.org/schema/p" 
     7        xsi:schemaLocation="
     8        http://www.springframework.org/schema/beans
     9        http://www.springframework.org/schema/beans/spring-beans.xsd
    10        http://www.springframework.org/schema/tx
    11        http://www.springframework.org/schema/tx/spring-tx.xsd
    12        http://www.springframework.org/schema/aop
    13        http://www.springframework.org/schema/aop/spring-aop.xsd">
    14        
    15        <!-- scope="prototype":多例。默认是单例(不用写即是默认) -->
    16        <bean id="userAction" class="com.shore.action.UserAction" scope="prototype" p:userService-ref="userService"></bean>
    17 </beans>

    index.jsp 页面

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%@taglib uri="/struts-tags" prefix="s"%>
     3 <%
     4 String path = request.getContextPath();
     5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     6 %>
     7 
     8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     9 <html>
    10   <head>
    11     <base href="<%=basePath%>">
    12     
    13     <title>My JSP 'index.jsp' starting page</title>
    14     <meta http-equiv="pragma" content="no-cache">
    15     <meta http-equiv="cache-control" content="no-cache">
    16     <meta http-equiv="expires" content="0">    
    17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18     <meta http-equiv="description" content="This is my page">
    19     <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22   </head>
    23   
    24   <body>
    25     <s:form action="userAction!login" method="post" namespace="/front">
    26         <s:textfield name="name" label="用户名"></s:textfield>
    27         <s:password name="password" label="密码"></s:password>
    28         <s:submit value="登录"></s:submit>
    29     </s:form>
    30   </body>
    31 </html>

    success.jsp 页面

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'success.jsp' starting page</title>
    13     
    14     <meta http-equiv="pragma" content="no-cache">
    15     <meta http-equiv="cache-control" content="no-cache">
    16     <meta http-equiv="expires" content="0">    
    17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18     <meta http-equiv="description" content="This is my page">
    19     <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22 
    23   </head>
    24   
    25   <body>
    26        登录成功!
    27   </body>
    28 </html>

    测试结果图:

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/11745460.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    JS给数字加千位分隔符
    前端防抖与节流实现与应用
    JS实现单向链表、双向链表、循环链表
    单点登录
    AMD、CMD规范
    JS实现全排列
    event loop、进程和线程、任务队列
    BOM属性对象方法
    JS的闭包、高阶函数、柯里化
    for...in、for...of、forEach()有什么区别
  • 原文地址:https://www.cnblogs.com/dshore123/p/11745460.html
Copyright © 2020-2023  润新知