likes
comments
collection
share

轻松上手SpringMVC框架

作者站长头像
站长
· 阅读数 4

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 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 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的控制器:

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` 为前缀。

@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

<%@ 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应用程序的开发更加高效和便捷。