轻松上手SpringMVC框架

Spring MVC是一个基于Java的实现了Web MVC设计思想的请求驱动类型的轻量级Web框架。它是Spring家族中的一个web成员,使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型。

其主要目的是帮助我们简化日常Web开发。Spring MVC强化注解的使用,在控制器、Service、Dao都可以使用注解,方便灵活。同时它方便整合Strtus、MyBatis、Hibernate、JPA等其他框架。此外,Spring MVC提供了非常灵活的数据验证、格式化和数据绑定机制,以及强大的约定大于配置(惯例优先原则)的契约式编程支持。

Spring MVC的优点有

  1. 清晰的角色划分:Spring MVC在Model、View和Controller方面提供了一个清晰的角色划分,这三个方面真正是各司其职,各负其责。
  2. 灵活的配置:Spring MVC允许使用JavaBean来配置MVC组件,这使得配置更加灵活。
  3. 支持多种视图技术:Spring MVC支持多种视图技术,如JSP、Velocity、Tiles、iText和POI等。模型数据可以通过各种视图技术展示给用户,具有很好的灵活性。
  4. 方便的注解驱动:通过注解可以很方便的将请求映射到处理器方法上,不需要额外的配置文件。

Spring MVC的缺点有

  1. 过度设计:由于Spring MVC过于细分,有时会导致开发效率降低,以及存在过度设计的风险。
  2. 与Servlet API的耦合:Spring MVC与Servlet API存在耦合,这使得它难以脱离容器独立运行。

下面是一个实例,带你轻松上手SpringMVC:

1.首先配置web.xml:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Springmvc-1</display-name>
     <!-- 配置中央控制器(中央调度器)DispatcherServlet 
             1.为啥要配置?
                     因为DispatcherServlet在创建的过程中,会同时创建springmvc的容器对象
                     读取springmvc的配置文件
     -->
     <servlet>
         <servlet-name>Dis</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>
         <!-- web服务器启动时调用执行该Servlet的初始化方法,值必须是整数 
              >0,容器启动时就加载,数值越小,优先级越高,创建的也就越早
         -->
         <load-on-startup>1</load-on-startup>
     </servlet>
     
     <servlet-mapping>
          <servlet-name>Dis</servlet-name>
          <url-pattern>/</url-pattern>
     </servlet-mapping>
</web-app>

servlet

该元素定义了一个Servlet。Servlet是Java Web应用中的一个核心组件,用于处理HTTP请求。

  • servlet-name: 定义了Servlet的名称,用于后续的引用。

  • servlet-class : 指定了Servlet的完整类名,这里是Spring MVC的DispatcherServlet

  • init-param: 用于初始化Servlet的参数。这里用于设置Spring MVC配置文件的位置。

    • param-name : 参数的名称,这里是contextConfigLocation
    • param-value : 参数的值,这里是classpath:springmvc.xml,表示从类路径加载springmvc.xml文件。
  • load-on-startup: 指定Servlet的加载顺序。这里的值为1,表示该Servlet在容器启动时就会加载,并且优先级很高。

servlet-mapping

该元素用于映射Servlet到URL模式。

  • servlet-name: 引用之前定义的Servlet名称。
  • url-pattern : 指定该Servlet处理的URL模式,这里是/,表示处理所有的请求。

这个web.xml文件配置了Spring MVC的DispatcherServlet,这是Spring MVC框架中的核心组件,用于接收所有的HTTP请求,并根据配置分发给相应的Controller处理。同时,通过init-param元素,指定了Spring MVC的配置文件为springmvc.xml,该文件包含了Spring MVC的各种设置和Bean定义。

2.编写Spring的配置文件:

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:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    <!-- 组键扫描器 -->
    <context:component-scan base-package="com.lexed.controller"></context:component-scan>
    <!--  -->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!-- 配置视图解析器
         SpringMVC框架,为了避免请求资源路径与扩展名上的冗余,
                       在视图解析器中,引入请求的前缀和后缀,我们只需要给出要跳转的文件名即可,
                       对于具体的文件路径与文件扩展名,视图解析器会自动完成
     -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"></property>
         <!-- 后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

component-scan

  • <context:component-scan base-package="com.lexed.controller"></context:component-scan>: 这个元素告诉 Spring 去扫描 com.lexed.controller 包(以及其子包)中的所有类,查找 Spring 的注解(如 @Component, @Controller, @Service, @Repository 等),并自动注册这些类为 Spring Beans。

annotation-driven

  • <mvc:annotation-driven></mvc:annotation-driven>: 启用 Spring MVC 的注解驱动模式,这样你就可以使用如 @RequestMapping, @RequestParam 等注解在 Controller 类和方法上。

InternalResourceViewResolver

  • <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">: 定义了一个视图解析器,用于解析视图名称到具体的视图实现。

    • <property name="prefix" value="/WEB-INF/jsp/"></property>: 设置 JSP 文件的前缀路径。
    • <property name="suffix" value=".jsp"></property>: 设置 JSP 文件的后缀。

例如,如果你在 Controller 中返回一个视图名为 "home",则该视图解析器会自动将其解析为 "/WEB-INF/jsp/home.jsp"。

3.编写SpringMVC的控制器:

kotlin 复制代码
package com.lexed.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/*     @Controller:表示这个类为处理器类
 *     @RequestMapping():可以修饰在类上和方法上
 *                              修饰在方法上:表示当前方法为处理器方法
 * 
 * */
@Controller
@RequestMapping("/mycon")
public class MyController {
	
	/*@RequestMapping:请求映射,作用:把一个请求地址和一个方法绑定在一起
	 * value:首先是String,表示请求的url地址,不能重复
	 * method:用于被注解方法所处理的提交方法进行限制,
	 *     只有满足该method属性指定的提交方式的请求,才会执行该注解的方法
	 * 处理器方法的返回值:
	 *     ModelAndView:model-数据,view-视图
	 *     String:处理器方法返回的字符串可以指定逻辑视图名,
	 *     再通过视图解析器可以将其转成物理视图地址
	 *     void
	 *     object
	 * */
	/*@RequestMapping(value="/dosome")
	public ModelAndView dosome(){
		
		ModelAndView mv=new ModelAndView();
		mv.setViewName("show.jsp");
		return mv;
		
	}*/ //不推荐
	
	//只显示视图
	@RequestMapping(value="/dosome")
	public String dosome(){
		
		return "show";//逻辑视图名,视图解析器  转发
         // /WEB-INF/jsp/show.jsp
	}
	
	//视图  数据
	@RequestMapping(value="/dosome1")
	public String dosome1(HttpServletRequest request){
		request.setAttribute("k", "你好世界");
		return "show";//逻辑视图名,视图解析器  转发
         // /WEB-INF/jsp/show.jsp
	}
}

@Controller 注解表示这是一个 Spring MVC 控制器类。@RequestMapping("/mycon")表示所有映射到此控制器的 URL 都将以/mycon` 为前缀。

typescript 复制代码
@RequestMapping(value="/dosome1")  
public String dosome1(HttpServletRequest request){  
    request.setAttribute("k", "你好世界");  
    return "show";//逻辑视图名,视图解析器  转发  
    // /WEB-INF/jsp/show.jsp  
}

这个方法处理路径为 /mycon/dosome1 的请求,在 HttpServletRequest 对象中设置一个属性 "k",值为 "你好世界",然后也返回一个逻辑视图名 "show"。这意味着,当这个方法被调用后,将会渲染 "show" 视图,并且在该视图中可以使用请求属性 "k"。

4.然后可以在WEB-INF下面创建一个文件,命名为jsp,在这个jsp文件下,创建一个jsp,命名为show.jsp

xml 复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>Hello World</h1>
    <a>${k}</a>
</body>
</html>
  1. <a>${k}</a>:

    • 这是一个 HTML 锚标签,通常用于链接到其他页面或文档的部分。
    • ${k} 是 JSP 的表达式语言 (EL)。它会尝试输出名为 k 的变量的值。此变量应在 JSP 的后端代码中定义并赋值,或者在某些作用域中(如 request, session, application 等)。如果没有定义该变量,这里将不会显示任何内容。(这里的k就是我们之前作用域里面的那个k)。

5.把这个项目加入tomcat服务器,并且启动,然后打开浏览器输入url地址:localhost:8080/Springmvc-1/mycon/dosome1

dosome1()方法中,设置了一个请求属性k,值为你好世界,并返回了逻辑视图名show。因此,当你访问localhost:8080/Springmvc-1/mycon/dosome1这个URL时,Spring MVC应用会处理这个请求,设置属性,并渲染相应的视图。

下面是spring和springmvc的区别,不要搞混了

Spring和Spring MVC主要有以下区别:

  1. 本质和定位不同:Spring是一个开源的Java平台,它为开发者提供了全面的基础设施支持,包括IoC容器、AOP等核心功能,主要用于企业级应用程序的开发。而Spring MVC是Spring框架中的一个模块,它是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,主要用于Web应用程序的开发。
  2. 功能不同:Spring的功能更加丰富和全面,包括数据访问、安全性、消息传递和集成等。而Spring MVC主要集中在Web开发方面,例如解析请求、处理响应、协调视图等。
  3. 技术特点不同:Spring是一个容器框架,可以集成不同的技术实现应用程序的开发。而Spring MVC则是基于Servlet技术实现的Web框架,它是Spring功能的扩展和增强。

总结起来,Spring是一个更全面、更强大的企业级应用程序开发框架,而Spring MVC是在Spring基础上针对Web开发进行优化的一个模块。这两者可以配合使用,使Web应用程序的开发更加高效和便捷。

相关推荐
hx862278 分钟前
Java MySQL 连接
java·mysql·adb
lpfasd12310 分钟前
Kubernetes (K8s) 底层早已不再直接使用 Docker 引擎了
java·docker·kubernetes
aq553560013 分钟前
SpringBoot有几种获取Request对象的方法
java·spring boot·后端
lierenvip1 小时前
Spring Boot中Tomcat配置
spring boot·tomcat·firefox
Detachym1 小时前
InsightFlow 服务配置优化与部署实践
java·spring boot·tomcat·maven·状态模式·jar
y = xⁿ1 小时前
【LeetCodehot100】T23:合并k个升序链表
java·数据结构·链表
流水武qin1 小时前
SpringAI多模态的基本使用
java·spring boot·spring·ai
共享家95271 小时前
Java入门(多态)
java·开发语言
毕设源码-赖学姐2 小时前
【开题答辩全过程】以 基于Java的婚礼策划平台的设计与实现为例,包含答辩的问题和答案
java·开发语言
吾诺2 小时前
Spring Boot--@PathVariable、@RequestParam、@RequestBody
java·spring boot·后端