Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对老牌的MVC框架Struts 2的超越。现在版本已经到了Spring7.x了,我们这是基于Spring5.0.6的SpringMVC框架来写案例。现在绝大多数的开发团队选择了Spring MVC。
感受一下SpringMVC:
一个简单的例子。新建一个maven项目springmvcdemo
,sts开发工具建maven项目,参考spring例子中的,springdemo整合hibernate。
1.导包,其它和Spring项目中一样
xml
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
2.web.xml中配置DispatcherServlet。把单标签变成双标签,即把'/>'改成'>'
使用springmvc的核心的调度器,servlet配置之。
xml
<web-app......>
<!-- 使用springmvc的核心的调度器,servlet配置之 -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定springmvc的配置文件所在的位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 指定映射地址,一般是网站根目录,包括静态资源,但不包括其它servlet,一般用jsp文件对应控制层的名字 -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<!-- 不能写成 /*,这种是用在filter,拦截器中 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3.springmvc.xml ---bean configuration file
以下一定要勾选如图所示的命名空间。配注解创建bean所在包基本类包和视图解析器。
xml
<?xml version="1.0" encoding="UTF-8"?>
<beans .....>
<!-- 指定注解所在的基本包 -->
<context:component-scan base-package="cn.ybzy.springmvcdemo"></context:component-scan>
<!-- 为springmvc指定视图解析器,视图指定在WEB-INF/jsp中 ,视图扩展名为jsp-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
4.创建视图(/WEB-INF/jsp/index.jsp)
html
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>index</title>
</head>
<body>
这里是index.jsp,你可能是由控制的@RequestMapping("/index")映射过来的
</body>
</html>
5.控制层IndexController.java,跳转或转发到视图
java
@Controller //不象在spring中,那样要继承HttpServlet了
public class IndexController {
@RequestMapping("/index")
public String index() {
return "index";
}
}
6.测试:localhost:8080/springmvcdemo/index回车
这个例子的大致流程分析:
@RequestMapping注解
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到控制器(controller类)的处理方法上。在 Spring MVC 应用程序中,RequestDispatcher (在 Front Controller 之下) 这个 servlet 负责将进入的 HTTP 请求路由到控制器的处理方法。 在对 Spring MVC 进行的配置的时候, 需要我们指定请求与处理方法之间的映射关系。
@RequestMapping 注解在前面的例子中是在方法的级别上使用。除此外,这个注解还可使用在类级别的:
在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后才是另外添加在方法级别的注解来进一步指定到处理方法的映射关系。
下面是一个同时在类和方法上应用了 @RequestMapping 注解的示例:
说白了,体现在浏览器上访问地址上,就是父目录:xxxxxx/index/index
RequestMapping里面的注解包含的参数
1、value, method
value(别名:path): 指定请求的实际地址,指定的地址可以是URI Template 模式;
value的uri值为以下三类:
java
/*
* localhost:8080/springmvcdemo/indexid/100回车,控制台会打印ids====12,网页会是index.jsp内容
*/
@RequestMapping("/indexid/{id}")
public String indexid(@PathVariable ("id") int ids) {
System.out.println("ids====="+ids);
return "index";
}
method:默认会自动匹配GET或POST请求,可以指定请求的method类型 取值可以是GET、POST、PUT、DELETE等;
举例说明一下method,看JSP 页面
java
<a href="springmvc/testMethod">Test Method</a> //href 默认为get 请求。
//controller里限制接收post 请求。
@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod() {
System.out.println("testMethod");
return "index";
}
2、 consumes,produces;
consumes: 指定处理请求的提交内容类型(Content-Type)
例如application/json, text/html;
JSP 页面,仍以testMethod为例,提交表单。
默认contentType为Content-Type:application/x-www-form-urlencoded。
例:controller--限制接收post 请求以及consumes="application/json"。
【状态码415表示:由于媒介类型不被支持,服务器不会接受请求。。】
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;