前言
SpringMVC是今年来各大公司中使用比较频繁的一个框架,虽说随着最近微服务和SpringBoot的兴起,它的使用率没有以前那么高,但是它还是值得我们去学习的一个框架。
正文
我们先来看看SpringMVC的处理流程。
可以看到,不管是SpringMVC还是Struts2,都是基于经典Web的请求和响应的模型来实现的。用户发送一个请求给服务器,这个请求被SpringMVC中一个叫前端控制器(DispatcherServlet)的东西拦截,这个前端控制器我们会在后面详细了解,这里不多做解释。前端控制器将请求交给处理器Handler来处理,最后将结果转发给jsp,渲染成html来返回给用户。这就是一个简单的SpringMVC中的请求响应过程。下面我们将使用Maven来构建一个简单的Demo熟悉一下SpringMVC的使用。
如果你不使用Maven的话,可以直接在javeWeb工程中引入以下jar包来完成Demo:
下面是使用Maven构建Demo案例:
pom文件如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiaojian.springmvc</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>4.1.3.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
接着,我们在WEB-INF下面创建一个jsp目录,然后在web.xml里面配置DispatcherServlet,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>demo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置前端控制器 -->
<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:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
在这里我们可以看到,所谓前端控制器,其实就是配置一个servlet,所以某个方面来说,SpringMVC其实也是对servlet的一种封装。
在这里,我们配置了url的拦截形式为.action,所有以.action结尾的请求都会被SpringMVC拦截。其次,我们还配置了springMVC的配置文件的路径,现在我们在类路径下创建一个springmvc.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:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 配置包扫描,扫描指定包下面的类 加载到spring容器中 -->
<context:component-scan base-package="com.xiaojian.springmvc.controller"/>
</beans>
OK,准备工作差不多了,现在我们创建一个包,在里面创建好我们的controller,demo的大概路径如下:
在controller中我们定义一个访问方法,来使我们的请求被处理:
package com.xiaojian.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class LoginController {
@RequestMapping("/login")
public ModelAndView login(String username, String password) {
ModelAndView model = new ModelAndView();
model.addObject("data", "登录成功");
model.setViewName("/WEB-INF/jsp/login.jsp");
return model;
}
}
代码中的注解和对象我们将在下一篇博文中详细讲解,好了,我们来测试一下我们的demo吧!
在浏览器中输入http://localhost:8080/项目名/login.action后页面发生跳转,跳转的目的地是一个简单的jsp页面,我在里面放入了两个input标签作为展示.
总结
OK,至此我们springmvc的小demo成功了,在下面的文章中将介绍springMVC的各个组件,以及注解,标签的作用和用法~~