springmvc

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)类型中包含该指定类型才返回;

相关推荐
Chase_______8 分钟前
静态变量详解(static variable)
java·开发语言·jvm
厚衣服_310 分钟前
第15篇:数据库中间件高可用架构设计与容灾机制实现
java·数据库·中间件
勇闯IT26 分钟前
有多少小于当前数字的数字
java·数据结构·算法
蜗牛编程之路1 小时前
RabbitMQ的使用--Spring AMQP(更新中)
spring·rabbitmq·java-rabbitmq
小皮侠1 小时前
【算法篇】逐步理解动态规划模型6(回文串问题)
java·开发语言·算法·动态规划
勤奋的小王同学~1 小时前
(javaSE)抽象类和接口:抽象类概念语法和特性, 抽象类的作用;接口的概念 接口特性 实现多个接口 接口间的继承 Object类
java·开发语言
Ai财富密码1 小时前
【Linux教程】Linux 生存指南:掌握常用命令,避开致命误操作
java·服务器·前端
LUCIAZZZ2 小时前
项目拓展-Jol分析本地对象or缓存的内存占用
java·开发语言·jvm·数据库·缓存·springboot
GalaxyPokemon2 小时前
LeetCode - 69. x 的平方根
java·数据结构·算法
在未来等你2 小时前
设计模式精讲 Day 1:单例模式(Singleton Pattern)
java·设计模式·面向对象·软件架构