基于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>