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

相关推荐
好奇的菜鸟1 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
DuelCode2 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社22 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理2 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码2 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot
YuTaoShao3 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
Dcs3 小时前
超强推理不止“大”——手把手教你部署 Mistral Small 3.2 24B 大模型
java
东阳马生架构4 小时前
订单初版—1.分布式订单系统的简要设计文档
java
Code blocks4 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
荔枝吻4 小时前
【沉浸式解决问题】idea开发中mapper类中突然找不到对应实体类
java·intellij-idea·mybatis