`
shaohan126448
  • 浏览: 116627 次
  • 来自: 北京
社区版块
存档分类
最新评论

springmvc+spring+mybatis整合实例

 
阅读更多

开发环境:

System:Windows server 2003

WebBrowser:IE6+、Firefox3+

JavaEE Server:tomcat5.

IDE:eclipse、MyEclipse 6.5

Database:MySQL

开发依赖库:

JavaEE5、Spring 3.0.5、Mybatis 3.0.2、myBatis-spring-1.0.0-rc2

 

参考百度文库:http://wenku.baidu.com/view/34559702a6c30c2259019e4e.html

 源码下载:http://download.csdn.net/detail/nosi79998/6486219

1、 首先新建一个WebProject 命名为ssi,新建项目时,使用JavaEE5的lib库。然后手动添加需要的jar包,所需jar包如下:

 

2、 添加spring的监听及springMVC的核心Servlet,web.xml内容,内容如下:

复制代码
<!-- 加载Spring容器配置 -->
  <listener>    
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 设置Spring容器加载配置文件路径 -->
  <context-param>    
      <param-name>contextConfigLocation</param-name>    
      <param-value>classpath:applicationContext-*.xml</param-value>
  </context-param>
  <!--配置Springmvc核心控制器-->
  <servlet>          
        <servlet-name>spmvc</servlet-name>         
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         
  </servlet>    
  <!--为DispatcherServlet建立映射 -->      
  <servlet-mapping>  
        <servlet-name>spmvc</servlet-name>      
        <url-pattern>*.do</url-pattern>    
  </servlet-mapping> 
  <!-- 解决工程编码过滤器 -->
  <filter>  
     <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>  
     <url-pattern>/*</url-pattern>  
 </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
复制代码

 

3、 在WEB-INF目录中添加spmvc-servlet.xml,内容如下:

复制代码
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="   
    http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
    http://www.springframework.org/schema/context   
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    <!--注解控测器-->
    <context:component-scan base-package="com.hoo" />
   
    <!--  annotation默认的方法映射适配器 -->    
    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />     
    <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
   
 
</beans>
复制代码

 

4、 在src目录下添加applicationContext-common.xml,内容如下:

复制代码
<!-- 配置DataSource数据源 -->  
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
       <property name="driverClassName" value="com.mysql.jdbc.Driver"/>  
       <property name="url" value="jdbc:mysql://192.168.1.36:3306/test"/>  
       <property name="username" value="fssykj"/>  
       <property name="password" value="fssykj"/> 
    </bean>
    <!-- 配置SqlSessionFactoryBean --> 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
       <property name="dataSource" ref="dataSource"/>  
       <property name="configLocation" value="classpath:mybatis.xml"/> 
       <!-- mapper和resultmap配置路径 -->   
       <property name="mapperLocations">  
            <list>  
            <!-- 表示在com.hoo.resultmap包或以下所有目录中,以-resultmap.xml结尾所有文件 --> 
             <value> classpath:com/hoo/mapper/*.xml</value > 
            </list>       
       </property>
    </bean>
    <!-- 通过扫描的模式,扫描目录在com/hoo/mapper目录下 -->  
    <bean  class="org.mybatis.spring.annotation.MapperScannerPostProcessor">  
       <property name="basePackage" value="com.hoo.mapper"/>  
       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />  
    </bean>
复制代码

 

上面的配置最先配置的是DataSource,这里采用的是jdbc的DataSource;

然后是SqlSessionFactoryBean,这个配置比较关键。SqlSessionFactoryBean需要注入DataSource数据源,其次还要设置configLocation也就是mybatis的xml配置文件路径,完成一些关于mybatis的配置,如settings、mappers、plugin等;

如果使用MapperScannerPostProcessor模式,会自动将basePackage中配置的包路径下的所有带有@Mapper标注的Mapper(dao)层的接口生成代理,替代原来我们的Mapper实现。

5、AccountMapper接口内容如下:

复制代码
@Mapper("mapper") 
public interface AccountMapper extends SqlMapper {
    public List<Account> getAllAccount(); 
    public Account getAccount();   
    public Account getAccountById(String id); 
    public Account getAccountByNames(String spring);  
    @Select("select * from account where username = #{name}")  
    public Account getAccountByName(String name);  
    public void addAccount(Account account);   
    public void editAccount(Account account); 
    public void removeAccount(int id);
}
复制代码

 

6、 实体类和account-resultmap.xml

复制代码
private static final long serialVersionUID = -7970848646314840509L;  
    private Integer accountId;  
    private Integer status;  
    private String username;    
    private String password;  
    private String salt;   
    private String email;   
    private Integer roleId;     
    //getter、setter    
    @Override  
    public String toString() 
    {       
        return this.accountId + "#" + this.status + "#" + this.username +  "#" +  
        this.password +  "#" + this.email +  "#" + this.salt + "#" + this.roleId;   
    }
复制代码

 

account-resultmap.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace和定义的Mapper接口对应,并实现其中的方法 -->
<mapper namespace="com.hoo.mapper.AccountMapper">
   <resultMap type="com.hoo.entity.Account" id="accountResultMap">
        <id property="accountId" column="account_id" />
        <result property="username" column="username" />
        <result property="password" column="password" />
        <result property="status" column="status" />
   </resultMap>
   <!-- id和mapper接口中的方法名对应,resultType使用mybatis.xml中的别名 -->
   <select id="getAccount" resultType="account">
         <![CDATA[         
              select * from account limit 1   
         ]]> 
   </select>     
   <select id="getAllAccount" resultType="list" resultMap="accountResultMap">  
         <![CDATA[     
              select * from account   
         ]]>    
   </select>    
         <!-- accountResultMap是account-resultmap.xml中定义的resultmap -->  
             <select id="getAccountById" parameterType="string" resultType="com.hoo.entity.Account" resultMap="accountResultMap">    
         <![CDATA[        
             select * from account where account_id = #{id}    
         ]]>    
   </select>   
   <!-- accountMap.accountResultMap是account-resultmap.xml中定义的resultmap,通过namespace.id找到 -->  
   <select id="getAccountByNames" parameterType="string" resultMap="accountResultMap">  
         <![CDATA[        
             select * from account where username = #{name}        
         ]]>    </select>   
   <sql id="user_name_pwd">  
         username, password  
   </sql>       
   <!-- 自动生成id策略 -->  
   <insert id="addAccount" useGeneratedKeys="true" keyProperty="account_id" parameterType="account">   
         insert into account(account_id, status, username, password)   
         values(#{accountId}, #{status}, #{username}, #{password})   
   </insert>       
   <!-- 根据selectKey语句生成主键 -->  
   <insert id="addAccount4Key" parameterType="account">   
        <selectKey keyProperty="account_id" order="BEFORE" resultType="int">    
          select cast(random() * 10000 as Integer) a from #Tab    
        </selectKey>        
        insert into account(account_id, status, username, password) 
        values(#{accountId}, #{status}, #{username}, #{password})    
   </insert>        
   <update id="editAccount" parameterType="account"> 
        update account set        
        status = #{status},
        username = #{username},       
        password = #{password}        
        where account_id = #{accountId}    
   </update>        
   <delete id="removeAccount" parameterType="int">
        delete from account where account_id = #{id}  
   </delete>
</mapper>
复制代码

 

7、 在src目录中添加applicationContext-beans.xml内容如下:

复制代码
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
   <!-- 注解探测器 , 在JUnit测试的时候需要--> 
   <context:component-scan base-package="com.hoo"/> 
 </beans>
复制代码

 

这里配置bean对象,一些不能用annotation注解的对象就可以配置在这里

8、 在src目录中添加mybatis.xml,内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!--CRLF-->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--CRLF-->
<configuration>
<!--CRLF-->
    <!-- 别名 -->
<!--CRLF-->
    <typeAliases>
<!--CRLF-->
        <typeAlias type="com.hoo.entity.Account" alias="account"/>
<!--CRLF-->
    </typeAliases>
<!--CRLF-->
</configuration>
<!--CRLF-->

在这个文件放置一些全局性的配置,如handler、objectFactory、plugin、以及mappers的映射路径(由于在applicationContext-common中的SqlSessionFactoryBean有配置mapper的location,这里就不需要配置)等

9、 定义AccountDao接口及实现代码,代码如下:

public interface AccountDao<T> {
    public boolean addAccount(T entity) throws DataAccessException;
    public T getAccount(Integer id) throws DataAccessException; 
    public List<T> getList() throws DataAccessException;

}

 

接口实现

复制代码
import java.util.List;
import javax.inject.Inject;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;
import org.springframework.beans.factory.annotation.Autowired;
import com.hoo.dao.AccountDao;
import com.hoo.entity.*;
import com.hoo.mapper.*;
import org.springframework.beans.factory.annotation.Qualifier;
@SuppressWarnings("unchecked")
@Repository("accountDaoImpl")
public class AccountDaoImpl<T extends Account> implements AccountDao<T> {

    @Autowired(required=false)
    @Qualifier("mapper")
    private AccountMapper mapper;
    public boolean addAccount(T entity) throws DataAccessException {
         boolean flag=false;
         try{
             mapper.addAccount(entity);
             flag=true;
         }
         catch(DataAccessException e)
         {
             flag=false;
             throw e;
         }
         return flag;
    }
    public T getAccount(Integer id) throws DataAccessException { 
        T entity = null; 
       try
       { 
           entity = (T)mapper.getAccountById(String.valueOf(id));  
       }
       catch(DataAccessException e) 
       { throw e;      }  
       return entity;
    }
    public List<T> getList() throws DataAccessException {
        return (List<T> )mapper.getAllAccount();
    }

}
复制代码

 

10、 服务层AccountBiz接口及实现代码

接口:

public interface AccountBiz<T> {
   public boolean addAccount(T entity) throws DataAccessException;
   public T getAccount(Integer id) throws DataAccessException;
   public List<T> getList() throws DataAccessException;
}

 

实现代码:

复制代码
package com.hoo.biz.impl;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.hoo.biz.AccountBiz;
import com.hoo.entity.*;
import javax.inject.Inject;
import com.hoo.dao.*;
import org.springframework.stereotype.Service;
import com.hoo.exception.BizException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@Service("accountBizImpl")
public class AccountBizImpl<T extends Account> implements AccountBiz<T> {

    @Autowired
    @Qualifier("accountDaoImpl")
    private AccountDao<T> dao;
    public boolean addAccount(T entity) throws DataAccessException {
        if(entity==null){
            throw new BizException(Account.class.getName()+"对象参数为empty!");
            
        }
        return dao.addAccount(entity);
    }

    public T getAccount(Integer id) throws DataAccessException {
         return dao.getAccount(id);
    }

    public List getList() throws DataAccessException {
        return dao.getList();
    }

}
复制代码

 

11、 springMVC的控制器,AccountController代码如下:

复制代码
package com.hoo.controller;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.beans.factory.annotation.Autowired;
import com.hoo.biz.AccountBiz;
import com.hoo.entity.Account;
import org.springframework.beans.factory.annotation.Qualifier;
@Controller("accountController")
@RequestMapping("/account")
public class AccountController {
   @Autowired
   @Qualifier("accountBizImpl")
   private AccountBiz<Account> biz;
   
   @RequestMapping("/add")
   public String add(@RequestParam String username, @RequestParam String password, @RequestParam String status)
   {   
       Integer stat=Integer.valueOf(status);
       Account acc=new Account(username,password,stat);
       
       System.out.println(acc);
       biz.addAccount(acc);
       return "redirect:/account/list.do";
   }
   @RequestMapping("/get")
   public String get(Integer id,Model model)
   {
       System.out.println("###ID:"+id);
       model.addAttribute(biz.getAccount(id));
       return "/show.jsp";
   }
   @RequestMapping("/list")
   public String list(Model model)
   {
       model.addAttribute("list",biz.getList());
       return "/list.jsp";
   }
   @ExceptionHandler(Exception.class)
   public String exception(Exception e,HttpServletRequest request)
   {
       request.setAttribute("exception", e);
       return "/error.jsp";
   }
}
复制代码

 

12、 基本页面代码

index.jsp

<body>
     <h3>整合springmvc3.2+spring+mybatis3.2</h3>
     <a href="account/list.do">查询所有</a><br/>
     <a href="account/add.do?username=abcdef&password=123132&status=2">添加</a><br>
     <a href="account/get.do?id=2">查询</a><br>
  </body>

 

List.jsp

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %> 


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'list.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <c:forEach items="${list}" var="data">
    id:${data.accountId }--name:${data.username }--password:
    ${data.password }<hr/>
    </c:forEach>
  </body>
</html>
复制代码

 

show.jsp

 <body>
    ${account }<br>
    ${account.username }#${account.accountId }
  </body>

error.jsp

 <body>
    <h2>Exception:${exception }</h2>
    <a href="javascript:document.getElementById('show').style.display='block';void(0);">详细信息</a>
    <div id="show" style="color:red;display:none;">
      <% Exception ex=(Exception)request.getAttribute("exception"); %>
      <%ex.printStackTrace(new PrintWriter(out)); %>
    </div>
  </body>

13、 以上就基本上完成了整个Spring+SpringMVC+MyBatis的整合了。如果你想添加事务管理,得在applicationContext-common.xml中加入如下配置:

<!-- 配置事务管理器,注意这里的dataSource和SqlSessionFactoryBean的dataSource要一致,不然事务就没有作用了 -->
<!--CRLF-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--CRLF-->
        <property name="dataSource" ref="dataSource" />
<!--CRLF-->
</bean>
<!--CRLF-->

同时还需要加入aspectjweaver.jar这个jar包;

注意的是:Jdbc的TransactionManager不支持事务隔离级别,我在整个地方加入其它的TransactionManager,增加对transaction的隔离级别都尝试失败!

也许可以用于jpa、jdo、jta这方面的东西。

下载地址:http://download.csdn.net/detail/nosi79998/6486219

分享到:
评论

相关推荐

    springmvc+spring+mybatis 整合实例

    在"springmvc+spring+mybatis 整合实例"中,开发者会按照以下步骤进行整合: 1. **引入依赖**:在项目中添加Spring、Spring MVC和MyBatis的Maven或Gradle依赖,确保所有必要的库都已包含。 2. **配置Spring**:...

    springmvc + spring + mybatis + maven整合配置文件

    3. **MyBatis-Spring整合**:使MyBatis与Spring无缝集成,通过Spring的DAO支持自动管理SqlSession和Mapper实例。 **Maven** Maven是一个项目管理和综合工具,通过POM(Project Object Model)文件管理项目的依赖...

    springMvc+spring+Mybatis 实战案例 实用!

    Spring MVC、Spring 和 MyBatis 是Java开发领域中三大核心框架,它们的组合在实际项目中广泛应用,构建了企业级Web应用的后端基础架构。本实战案例将深入讲解这三个框架如何协同工作,以实现高效的数据处理和业务...

    学生管理系统(SpringMVC+Spring+Mybatis)

    总的来说,"学生管理系统(SpringMVC+Spring+Mybatis)"是一个典型的Java Web应用实例,展示了如何利用SSM框架组合来构建高效、灵活的业务系统。通过学习和实践这样的项目,开发者可以深入理解这三个框架的工作原理...

    基于SpringMvc+Spring+MyBatis的OA系统项目

    系统后端基于SpringMVC+Spring+Hibernate框架,前端页面采用JQuery+Bootstrap等主流技术; 流程引擎基于Snaker工作流;表单设计器基于雷劈网WEB表单设计器。 系统主要功能有: &gt;1.系统管理 &gt;&gt;系统管理包含有:基础...

    Spring+SpringMVC+Mybatis框架整合例子——亲测可用.zip

    SSM框架整合是Java开发中常见的技术栈,包括Spring、SpringMVC和Mybatis三个核心组件。这个压缩包提供了一个已经验证过的整合示例,帮助开发者理解和实践这三大框架的协同工作。 首先,Spring框架是Java企业级应用...

    spring+spring mvc+mybatis框架整合实现超市货物管理系统

    总的来说,"spring+spring mvc+mybatis框架整合实现超市货物管理系统"是一个涵盖后端开发基础技能的项目,涉及了JavaEE的多个层面,从Web层的路由处理,到业务逻辑的实现,再到数据库操作,以及用户认证和分页显示等...

    SpringMVC+Spring+MyBatis整合完整版Web实例(附数据)

    **SpringMVC+Spring+MyBatis整合详解** 在现代Java Web开发中,SpringMVC、Spring和MyBatis是三个非常重要的框架,它们分别负责不同的职责:SpringMVC作为表现层框架,处理HTTP请求和响应;Spring作为应用上下文...

    基于 SpringBoot + Spring + SpringMvc+Mybatis +Layui 开发后台管理系统

    标题 "基于 SpringBoot + Spring + SpringMvc+Mybatis +Layui 开发后台管理系统" 描述了一个使用多种流行Java技术栈构建的管理系统的实例。这个系统整合了Spring Boot、Spring、Spring MVC、MyBatis以及Layui前端...

    SpringMvc+Spring+MyBatis+Maven整合实例

    SpringMvc+Spring+MyBatis+Maven整合实例代码,教程见:http://www.cnblogs.com/NaughtyBaby/p/4754881.html 该教程是通过看: BBS.BTBOYS.COM社区-孙宇. 《SpringMvc+Spring+Mybatis+Maven整合视频教程1》 编写供...

    Spring+SpringMVC+MyBatis SSM框架整合工程实例 完整版源码.zip

    Spring+SpringMVC+MyBatis整合工程实例 完整版源码,这个SSM框架整合工程是基于IntelliJ IDEA完成的的,工程里面配置文件均有注释,可直接拷贝使用(工程代码可导入IDEA中直接运行),可供学习设计参考。

    Spring+SpringMVC+Mybatis+Maven+bootstrap+ajax+jQuery整合开发简单的员工后台管理系统

    在本项目中,"Spring+SpringMVC+Mybatis+Maven+bootstrap+ajax+jQuery整合开发简单的员工后台管理系统",我们看到一个基于Java技术栈的Web应用开发实例。这个系统利用了多个核心技术来构建一个功能完备的员工管理...

    SpringMVC+Mybatis+Spring项目整合实例

    SSM整合的一个项目,数据库用的MYSQL,附带数据库文件,在项目里面修改db....项目里面的spring、springMVC、mybatis的.xml文件都是分开写的,每个配置都有注释,很简洁和简单,一看就会!希望对新学习的童鞋有帮助。

    SpringMvc+Spring+MyBatis+Maven项目

    这是一个基于Java技术栈的经典组合——SpringMvc、Spring、MyBatis和Maven的项目整合教程。这个项目旨在帮助开发者理解并掌握如何将这些组件有效地集成到一个完整的Web应用程序中。以下将详细介绍这些技术和它们在...

    ssm框架整合(springMVC + spring + MyBatis,)

    SSM框架整合是Java开发中常见的技术栈,它结合了SpringMVC、Spring和MyBatis三个强大的组件,用于构建高效、灵活的企业级应用。在这个实例中,我们不仅会探讨这三个框架的核心功能,还会看到如何将它们有效地整合在...

    SSM(Spring+springmvc+mybatis)项目实例.zip

    在这个"SSM(Spring+springmvc+mybatis)项目实例.zip"压缩包中,包含了一个实际的SSM项目和相关的SQL文件,这将有助于我们深入理解SSM框架的工作原理和应用。 首先,Spring框架是整个SSM中的核心,它负责管理对象...

    ZooKeeper+dubbo+spring+springMvc+mybatis实例源码下载

    本实例源码涉及的核心技术栈包括ZooKeeper、dubbo、spring、springMvc和mybatis,这些组件共同构成了一个完整的微服务架构。下面将详细解析这些技术及其在项目中的应用。 首先,ZooKeeper是一个分布式的,开放源码...

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...

    SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    SSM框架,即SpringMVC、Spring和Mybatis的集成,是Java开发中常见的Web应用框架。本教程将深入探讨这三个组件如何协同工作,构建高效、灵活的企业级应用程序。 SpringMVC是Spring框架的一部分,专注于处理HTTP请求...

    Springmvc+dubbo+mybatis+mysql+redis

    **SpringMVC** 是Spring框架的一部分,它提供了一种模型-视图-控制器(MVC)的设计模式来构建Web应用程序。SpringMVC通过DispatcherServlet接收请求,将请求分发到对应的处理器,并最终返回响应。它支持多种视图技术...

Global site tag (gtag.js) - Google Analytics