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

相关推荐
玛丽莲茼蒿8 小时前
javaSE 集合框架(五)——java 8新品Stream类
java·开发语言
程序员小假8 小时前
设计一个支持万人同时抢购商品的秒杀系统?
java·后端
L***d6708 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
C雨后彩虹8 小时前
竖直四子棋
java·数据结构·算法·华为·面试
疾风sxp8 小时前
nl2sql技术实现自动sql生成之langchain4j SqlDatabaseContentRetriever
java·人工智能·langchain4j
一勺菠萝丶9 小时前
PDF24 转图片出现“中间横线”的根本原因与终极解决方案(DPI 原理详解)
java
姓蔡小朋友9 小时前
Unsafe类
java
一只专注api接口开发的技术猿9 小时前
如何处理淘宝 API 的请求限流与数据缓存策略
java·大数据·开发语言·数据库·spring
荒诞硬汉9 小时前
对象数组.
java·数据结构
期待のcode9 小时前
Java虚拟机的非堆内存
java·开发语言·jvm