Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)

首先感谢一下润和软件,指引我走上了spring MVC Web开发的道路。

下面进入正题

搭建开发环境:

Netbeans8.0.2 + MySql5.6 + JDK1.7 + tomcat8.0.15

  1. 本次采用的Spring MVC Jar包如下:
  2. spring-aop-4.1.3.RELEASE.jar
  3. spring-beans-4.1.3.RELEASE.jar
  4. spring-context-4.1.3.RELEASE.jar
  5. spring-context-support-4.1.3.RELEASE.jar
  6. spring-core-4.1.3.RELEASE.jar
  7. spring-expression-4.1.3.RELEASE.jar
  8. spring-jdbc-4.1.3.RELEASE.jar
  9. spring-oxm-4.1.3.RELEASE.jar
  10. spring-tx-4.1.3.RELEASE.jar
  11. spring-web-4.1.3.RELEASE.jar
  12. spring-webmvc-4.1.3.RELEASE.jar

1.首先创建Web项目

web.mvc

2.引入所有的jar文件

3.配置web.xml

做web开发的都知道,web.xml是项目的入口,我们既然使用spring那么当然要添加Spring的支持啦!

spring默认加载的是applicationContext.xml,由于我们需要集成MyBatis

所以我把Spring的配置文件强制指定名称,并与MyBatis一起配置,减少配置文件数量

先指定spring配置文件名名称与路径

<!-- Spring 上下文参数 加载Spring配置文件 -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:xmlconfig/springmvc-mybatis.xml</param-value>
 </context-param>

再执行Spring上下文监听配置

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

添加支持Spring mvc 的配置

说明:添加支持目前有3种方式。

第一种:拦截 /*.do

<!-- spring mvc 拦截器配置 -->
<servlet>
 <servlet-name>springmvc</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>springmvc</servlet-name>
 <url-pattern>/*.do</url-pattern>
</servlet-mapping>

优势:拦截明确,不会和其他的拦截冲突

缺点:URL不美观

第二种:拦截 /*

<!-- spring mvc 拦截器配置 -->
<servlet>
 <servlet-name>springmvc</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>springmvc</servlet-name>
 <url-pattern>/*</url-pattern>
</servlet-mapping>

优点:支持rest风格,Url美观

缺点:会拦截静态资源

第三种,也是我推荐的一种:拦截 /

<!-- spring mvc 拦截器配置 -->
<servlet>
 <servlet-name>springmvc</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>springmvc</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>

优点:支持rest风格,URL美观,不拦截静态资源

我们采用第三种做为我们的拦截方案,将配置添加到web.xml中。

大家都知道,web项目最怕的就是乱码,而spring为我们提供了字符编码的过滤器,我们也给配置到web.xml中

<!-- 字符编码配置 -->
<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>
 <init-param>
  <param-name>forceEncoding</param-name>
  <param-value>true</param-value>
 </init-param>
</filter>
<filter-mapping>
 <filter-name>characterEncodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

我们采用的是tomcat服务器,为了让静态的资源直接交给tomcat处理,所以我们在web.xml中配置了以下配置

<!-- 激活Tomcat的defaultServlet来处理静态文件 -->
<servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>*.css</url-pattern>
</servlet-mapping>

4.配置springmvc-mybatis.xml和springmvc-servlet.xml

相信很多人都在这里卡主了,因为配置实在是太多了,各种方式都有

为了不妨碍大家,我决定直接将完整的配置直接贴出来

springmvc-mybatis.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:p="http://www.springframework.org/schema/p"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:util="http://www.springframework.org/schema/util"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-4.1.xsd
   http://www.springframework.org/schema/mvc
   http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
   http://www.springframework.org/schema/util
   http://www.springframework.org/schema/util/spring-util-4.1.xsd"> 

 <!-- 数据源定义-->
 <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource">
  <property name="driverClass" value="jdbc:mysql://127.0.0.1:3306/web" />
  <property name="jdbcUrl" value="root" />
  <property name="username" value="123456" />
  <property name="password" value="com.mysql.jdbc.Driver" />
 </bean> 

 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mapperLocations" value="classpath*:dbmap/*Mapper.xml" />
 </bean> 

 <!-- 配置事务管理器 -->
 <bean id="transactionManager"
   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
 </bean> 

 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
  <property name="dataSource">
   <ref bean="dataSource" />
  </property>
 </bean>
 <bean id="defaultLobHandler"
   class="org.springframework.jdbc.support.lob.DefaultLobHandler"
   lazy-init="true"/>
 <!-- 查 找 类 路 径 下 的 映 射 器 并 自 动 将 它 们 创 建 成 MapperFactoryBean-->
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.ansitech.web.orm.mapper" />
 </bean>
</beans>

spring-servlet.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: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-4.1.xsd
  http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
  http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 

 <description>Spring MVC Configuration</description> 

 <!-- 对静态资源文件的访问,交给default servlet handler处理 -->
 <mvc:default-servlet-handler/> 

 <!-- 启用spring mvc 注解 -->
 <context:annotation-config /> 

 <!-- 默认的注解映射的支持 -->
 <mvc:annotation-driven /> 

 <!-- 设置使用注解的类所在的jar包 -->
 <context:component-scan base-package="com.ansitech.web"></context:component-scan> 

 <!-- 完成请求和注解POJO的映射 -->
<bean class=
  "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 

 <!-- JSP视图文件解析配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
 <property name="prefix" value="/WEB-INF/view/"/>
 <property name="suffix" value=".jsp"/>
 <property name="viewNames" value="jsp/*"/>
 <property name="order" value="1"/>
</bean> 

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
 <property name="prefix" value="/WEB-INF/view/"/>
 <property name="suffix" value=".jsp"/>
 <property name="order" value="2"/>
</bean> 

 <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes -->
 <bean id="multipartResolver"
   class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <!-- one of the properties available; the maximum file size in bytes -->
  <property name="maxUploadSize">
   <value>5242880</value>
  </property>
 </bean>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?> 

<web-app 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_3_0.xsd"
   version="3.0">
 <!-- 程序Session配置 -->
 <session-config>
  <!-- Session过期时间(单位:分) -->
  <session-timeout>30</session-timeout>
 </session-config> 

 <!-- 激活Tomcat的defaultServlet来处理静态文件 -->
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.jpg</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.gif</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.png</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.js</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.css</url-pattern>
 </servlet-mapping> 

 <!-- Spring 上下文参数 加载Spring配置文件 -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:xmlconfig/springmvc-mybatis.xml</param-value>
 </context-param> 

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

 <!-- spring mvc 拦截器配置 -->
 <servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath*:/xmlconfig/springmvc-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>/</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>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping> 

 <!-- 欢迎页 -->
 <welcome-file-list>
  <welcome-file>/index.html</welcome-file>
 </welcome-file-list>
</web-app>

接下来就是包的结构了

前缀大家可以自己定义自己喜欢的,但是后边的结构,是整个框架的核心,所以请大家按照我的格式去建

前缀com.ansitech

com.ansitech.orm

com.ansitech.orm.base

com.ansitech.orm.mapper

com.ansitech.service

com.ansitech.service.po

com.ansitech.service.impl

com.ansitech.web

com.ansitech.web.controller

大家可能不理解,为什么要这么建呢?

那么我们来以用户管理模块来解释,用户对象为User

那么我们需要建立基础对象:

com.ansitech.orm.base.User.Java

package com.ansitech.orm.base; 

/**
 * 用户对象
 *
 * @author qsyang
 */
public class User { 

 private int id;
 private String loginName;
 private String loginPwd;
 /**
  * 用户类型 1 管理员 2 普通用户
  */
 private int typeId; 

 public int getId() {
  return id;
 } 

 public void setId(int id) {
  this.id = id;
 } 

 public String getLoginName() {
  return loginName;
 } 

 public void setLoginName(String loginName) {
  this.loginName = loginName;
 } 

 public String getLoginPwd() {
  return loginPwd;
 } 

 public void setLoginPwd(String loginPwd) {
  this.loginPwd = loginPwd;
 } 

 public int getTypeId() {
  return typeId;
 } 

 public void setTypeId(int typeId) {
  this.typeId = typeId;
 }
}

基础对象建好了,我们需要做一个Mapper来实现用户对象的增删改查

com.ansitech.orm.mapper.UserMapper.java

package com.ansitech.orm.mapper; 

import com.ansitech.orm.base.User;
import org.apache.ibatis.annotations.Param; 

/**
 * 用户数据接口
 *
 * @author qsyang
 */
public interface UserMapper { 

 void add(User user); 

 User get(@Param("id") int id); 

 void update(User user); 

 int delete(@Param("id") int id); 

}

使用ORM模式,我们需要创建一个抽象的用户对象来解决额外属性查询的问题

com.ansitech.orm.AbstractUser.java

package com.ansitech.orm; 

import com.ansitech.orm.base.User; 

/**
 * 抽象用户对象
 *
 * 提供其他属性获取
 *
 * @author qsyang
 */
public abstract class AbstractUser extends User{ 

 //获取当前用户所属分类名称
 public abstract String findTypeName();
}

有了数据接口了,我们需要对外提供服务

com.ansitech.service.IUserService.java

package com.ansitech.service; 

import com.ansitech.orm.AbstractUser;
import com.ansitech.orm.base.User; 

/**
 * 用户服务接口
 *
 * @author qsyang
 */
public interface IUserService { 

 //添加系统管理员
 void addSystemUser(String loginName, String loginPwd); 

 //添加普通用户
 void addNormalUser(String loginName, String loginPwd); 

 //根据用户Id查询抽象用户
 AbstractUser getAbstractUserById(int userId); 

 //根据用户Id查询用户
 User getUserById(int userId); 

 //修改用户信息
 void updateUser(int userId, String loginName, String loginPwd); 

 //根据用户Id删除用户
 int deleteUser(int userId);
}

有了服务接口,就要有实现接口

com.ansitech.service.impl.UserService.java

package com.ansitech.service.impl; 

import com.ansitech.orm.AbstractUser;
import com.ansitech.orm.base.User;
import com.ansitech.orm.mapper.UserMapper;
import com.ansitech.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; 

/**
 * 用户接口实现类
 *
 * @author qsyang
 */
@Service
public class UserService implements IUserService { 

 @Autowired
 private UserMapper userMapper; 

 @Override
 public void addSystemUser(String loginName, String loginPwd) {
  User user = new User();
  user.setLoginName(loginName);
  user.setLoginPwd(loginPwd);
  //用户类型 1 管理员 2 普通用户
  user.setTypeId(1);
  userMapper.add(null);
 } 

 @Override
 public void addNormalUser(String loginName, String loginPwd) {
  User user = new User();
  user.setLoginName(loginName);
  user.setLoginPwd(loginPwd);
  //用户类型 1 管理员 2 普通用户
  user.setTypeId(2);
  userMapper.add(null);
 } 

 @Override
 public AbstractUser getAbstractUserById(int userId) {
  throw new UnsupportedOperationException("Not supported yet.");
 } 

 @Override
 public User getUserById(int userId) {
  return userMapper.get(userId);
 } 

 @Override
 public void updateUser(int userId, String loginName, String loginPwd) {
  //先根据用户Id查询用户对象
  User user = userMapper.get(userId);
  if (user != null) {
   user.setLoginName(loginName);
   user.setLoginPwd(loginPwd);
   //修改用户
   userMapper.update(user);
  }
 } 

 @Override
 public int deleteUser(int userId) {
  return userMapper.delete(userId);
 } 

}

细心的便宜,可能已经看到了,getAbstractUserById()这个方法我们还没有实现

因为AbstractUser还有具体的实现类,所以我们来新建实现类

package com.ansitech.service.po; 

import com.ansitech.orm.AbstractUser;
import com.ansitech.orm.base.User;
import com.ansitech.service.impl.UserService; 

/**
 * 用户数据操作对象
 *
 * @author qsyang
 */
public class UserPO extends AbstractUser { 

 private final UserService userService; 

 public UserPO(UserService userService) {
  this.userService = userService;
 } 

 public UserPO copyFrom(User obj) {
  this.setId(obj.getId());
  this.setLoginName(obj.getLoginName());
  this.setLoginPwd(obj.getLoginPwd());
  this.setTypeId(obj.getTypeId());
  return this;
 } 

 @Override
 public String findTypeName() {
  return userService.findTypeName(this.getTypeId());
 } 

}

对象已经创建好了,这个时候我们可以修改下service实现类的方法了,并且我们增加了一个方法

增加这个方法,只是因为我们有可能需要继续调用其他的Mapper去查询。

修改的实现方法

@Override
public AbstractUser getAbstractUserById(int userId) {
 User user = userMapper.get(userId);
 if (user != null) {
  UserPO po = new UserPO(this);
  po.copyFrom(user);
  return po;
 }
 return null;
}

新增的方法:

public String findTypeName(int typeId) {
 if (typeId == 1) {
  return "系统管理员";
 } else {
  return "普通用户";
 }
} 

只有一来,Service架构和orm架构就已经完成了,下面只需要建立控制器就可以了

package com.ansitech.web.controller.user; 

import com.ansitech.orm.base.User;
import com.ansitech.service.impl.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; 

/**
 * 用户控制器
 *
 * @author qsyang
 */
@Controller
public class UserController { 

 @Autowired
 private UserService userService; 

 @RequestMapping("/user/user-index")
 public String index() {
  User user = userService.getUserById(1);
  if (user != null) {
   System.out.println("user name = " + user.getLoginName());
  }
  return "jsp/user/index";
 }
}

大家到现在有没有理解这个架构呢?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解spring+springmvc+mybatis整合注解

    每天记录一点点,慢慢的成长,今天我们学习了ssm,这是我自己总结的笔记,大神勿喷!谢谢,主要代码!! ! spring&springmvc&mybatis整合(注解) 1.jar包 2.引入web.xml文件 <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param

  • Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)

    首先感谢一下润和软件,指引我走上了spring MVC Web开发的道路. 下面进入正题 搭建开发环境: Netbeans8.0.2 + MySql5.6 + JDK1.7 + tomcat8.0.15 本次采用的Spring MVC Jar包如下: spring-aop-4.1.3.RELEASE.jar spring-beans-4.1.3.RELEASE.jar spring-context-4.1.3.RELEASE.jar spring-context-support-4.1.3.RE

  • 零基础搭建boot+MybatisPlus的详细教程

    目录 1.准备工作 1.1 创建数据库表 1.2 创建boot项目 1.3 创建实体类(映射数据库表) 2.使用mybatisPlus(操作数据库) 2.1 添加mybatisPlus依赖 2.2 配置数据库信息 2.3 创建mapper接口 2.4 配置mapper扫描 2.5 test 3. 常用设置 3.1 设置表映射规则 3.2 主键生成策略(默认基于雪花算法) 3.3 全局设置 3.4 字段与列名的驼峰映射(默认开启) 3.5 日志设置 4.基操 4.1 插入 insert() 4.2

  • 零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门

    本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Express, Jade, Mongodb服务器>,之所以把Jade换成Ejs,是因为我觉得ejs更符合WEB编程人员的习惯,更确切说应该是更符合PHP.ASP程序员的使用习惯.好了,废话不多说,直接开始教程. 第1部分 – 15分钟安装 如果你真的是从零开始学,那就花点时间先把环境搭建起来吧.这不难,我用的是Win8,所以这看上去跟那些用Mac和Ubuntu或者其它*nix系统的教程有点区别,不过大致是一样的. 第

  • 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程

    前言 SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不知道大家有没有留意,在我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配合注解的方式,编程非常快捷,而且通过restful风格定义url,让地址看起来非常优雅. 另外,MyBatis也可以替换Hibernate,正因为MyBatis的半自动特点,我们程

  • Spring Boot基础入门之基于注解的Mybatis

    前言 今天学习下SpringBoot集成mybatis,集成mybatis一般有两种方式,一个是基于注解的一个是基于xml配置的.今天先了解下基于注解的mybatis集成.下面话不多说了,来一起看看详细的介绍吧 一.引入依赖项 因为是mybatis嘛,肯定是要有mybatis相关的,同时用的是mysql,所以也需要引入mysql相关的. <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-b

  • 详解spring mvc对异步请求的处理

    在spring mvc3.2及以上版本增加了对请求的异步处理,是在servlet3的基础上进行封装的. 1.修改web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001

  • 基于Spring Mvc实现的Excel文件上传下载示例

    最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring mvc的项目如何搭建,传送门在这里. 这次就基于这个工程,继续实现上传下载的小例子.需要做下面的事情: 1 增加index.html,添加form提交文件 2 引入commons-fileupload.commons-io.jxl等工具包 3 创建upload download接口 4 注入mul

  • spring mvc路径匹配原则详解

    在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径的.例如: <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.i360r.platform.webapp.runtime.view.interceptor.GenericInterceptor"

  • spring mvc DispatcherServlet之前端控制器架构详解

    前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端.前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架). DispatcherServlet 作为前置控制器是web服务器的入口,是spring mvc最重要的一个类,通过它的生命周期可以加深对web服务器的理解. servlet的生命周期 首先我们回忆一下ser

  • Spring MVC框架配置方法详解

    本文实例为大家分享了Spring MVC框架配置方法,供大家参考,具体内容如下 1.概述 Spring MVC 作用:用来实现前端浏览器与后面程序的交互 Spring MVC 是基于Spring 的MVC框架,所谓MVC(model,controller,view) ,整个Spring MVC 作用就是,基于Spring 将model(数据)在controller(后台程序) ,view(前端浏览器)之间交互 至于Spring MVC优点缺点,了解不深 不作评价, 2.引用的jar包 既然是基于

随机推荐