基于Spring MVC的一个简单例子

MVC思想

将一个应用分为3个基本部分:Model(模型)、View(视图)、Controller(控制器),这三个部分以最低的耦合协同工作,从而提高应用的可扩展性及可维护性。

 

Spring MVC框架

Spring MVC是一款优秀的基于MVC思想的应用框架,它是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。

Spring MVC架构主要有DispatcherServlet、处理器映射(HandlerMapping)、控制器(Controller)、视图解析器(ViewResolver)、视图(View)组成

 

Spring MVC的工作流程:

 

 

 

Spring MVC所有请求都经过DispatcherServlet来统一分发。

HandlerMapping接口负责完成客户端请求到Controller映射,找到相应的一个或多个Controller处理客户请求。

Controller负责处理用户请求。Controller处理请求后返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。

ViewResolver接口负责查找View对象,从而将相应的结果渲染给客户。

 

-----------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------

一个案例:在eclipse中新建一个基于Spring MVC项目

在eclipse中新建一个Dynamic Web Project,命名为TestSpringMVC

 

导入Spring MVC相关的JAR包

 

在web.xml中部署DispatcherServlet

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet> 
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

 

在WebContent下新建一个index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    没注册的用户,请<a href="index/register">注册</a><br>
    已注册的用户,去<a href="index/login">登录</a></body>
</html>

 

在src下新建一个Controller包,包下新建一个TestSpringMVC类

package Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**“@Controller”表示IndexController的实例是一个控制器
 * @Controller相当于@Controller("indexController")
 * 或@Controller(value = "indexController")
 */
@Controller
@RequestMapping("/index")
public class IndexController {
    @RequestMapping("/login")
    public String login() {
        /**login代表逻辑视图名称,需要根据Spring MVC配置
         * 文件中internalResourceViewResolver的前缀和后缀找到对应的物理视图
         */
        return "login";
    }
    @RequestMapping("/register")
    public String register() {
        return "register";
    }
}

 

创建Spring MVC的配置文件,在WEB-INF下新建一个springmvc-servlet.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/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 
    <!-- 使用扫描机制,扫描控制器类 -->
    <context:component-scan base-package="Controller"/>  
    <mvc:annotation-driven />
    <!-- 使用resources过滤掉不需要dispatcher servlet的资源(即静态资源,如css、js、html、images)。
    使用resources时,必须使用annotation-driven,不然resources元素会阻止任意控制器被调用。
    -->  
    <!-- 允许css目录下所有文件可见 -->
    <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>                
      <!-- 配置视图解析器 -->
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            id="internalResourceViewResolver">
       <!-- 前缀 -->
       <property name="prefix" value="/WEB-INF/jsp/" />
       <!-- 后缀 -->
       <property name="suffix" value=".jsp" />
  </bean>
</beans>

 

最后是视图,在WEB-INF下新建一个jsp目录,在jsp下新建register.jsp和login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>注册界面</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>登录界面</p>
</body>
</html>

 

posted on 2021-10-08 23:55  小白成长变大神  阅读(582)  评论(0)    收藏  举报