Spring MVC入门
1、Spring MVC概述
1)、Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。
2)、Spring MVC具有以下特点:
a)、是Spring框架的一部分,可以方便的利用Spring所提供的其他功能。
b)、灵活性强,易于与其他框架集成。
c)、提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象。
d)、可自动绑定用户输入,并能正确的转换数据类型。
e)、内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
f)、支持国际化。可以根据用户区域显示多国语言。
g)、支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。
h)、使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。
2、第一个Spring MVC应用
1)、导入jar包
2)、配置前端控制器---在web.xml中,配置Spring MVC的前端控制器DispatcherServlet:
①WebContent/WEB-INF/web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 6 id="WebApp_ID" version="3.0"> 7 8 <servlet> 9 <!-- 配置前端过滤器 10 前端控制器DispatcherServlet 11 --> 12 <servlet-name>springmvc</servlet-name> 13 <servlet-class> 14 org.springframework.web.servlet.DispatcherServlet 15 </servlet-class> 16 17 <!-- 初始化时加载配置文件 --> 18 <init-param> 19 <!-- 配置springMVC配置文件的位置和名称 20 contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等) 21 若不配置它,则默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml) 22 --> 23 <param-name>contextConfigLocation</param-name> 24 <param-value>classpath:springmvc-config.xml</param-value> 25 </init-param> 26 27 <!-- 1表示容器在启动时立即加载Servlet --> 28 <load-on-startup>1</load-on-startup> 29 </servlet> 30 31 <servlet-mapping> 32 <servlet-name>springmvc</servlet-name> 33 <!-- '/',拦截所有所有URL的请求,并交给前端控制器DispatcherServlet处理 34 ①*.action,访问以.action结尾由DispatcherServlet进行解析 35 ②/,所有访问的地址都由DispatcherServlet进行解析,使用此种方式可以实现restful风格的url; 36 ③/*,这样的配置不对,使用这种配置,最终要转发到一个jsp页面 ,仍然会由DispatcherServlet解析jsp, 37 不能根据jsp页面找到Handle,会报错。 38 --> 39 <url-pattern>/</url-pattern> 40 </servlet-mapping> 41 </web-app>
②创建Controller类:controller/FirstController.java
1 package com.itheima.controller; 2 import javax.servlet.http.HttpServletRequest; 3 import javax.servlet.http.HttpServletResponse; 4 import org.springframework.web.servlet.ModelAndView; 5 import org.springframework.web.servlet.mvc.Controller; 6 /** 7 * 控制器类 8 */ 9 public class FirstController implements Controller{ // 实现Controller接口 10 /* 11 * handleRequest()是Controller接口的实现方法 12 * FirstController类会调用该方法来处理请求,并返回一个包含视图名或包含视图名和模型的ModelAndView对象 13 */ 14 @Override 15 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { 16 17 // 1、创建ModelAndView对象 18 ModelAndView mav = new ModelAndView(); 19 20 // 2、向模型对象中添加数据 21 mav.addObject("msg", "Spring MVC!!!"); 22 23 // 3、设置逻辑视图名,请求就会转发到first.jsp页面 24 mav.setViewName("/WEB-INF/jsp/first.jsp"); 25 26 // 4、返回ModelAndView对象 27 28 return mav; 29 } 30 }
③src/springmvc-config.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> 6 7 8 <!-- 1、配置处理器Handle,映射“/firstController”请求 9 该Bean会将控制器类FirstController映射到/firstController请求中 10 --> 11 <bean name="/firstController" class="com.itheima.controller.FirstController" /> 12 13 <!-- 2、处理器映射器,将处理器Handle的name作为url进行查找 --> 14 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> 15 16 <!-- 3、处理器适配器,配置对处理器中handleRequest()方法的调用--> 17 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> 18 19 <!-- 4、视图解析器 20 InternalResourceViewResolver来解析结果视图 21 --> 22 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean> 23 24 </beans>
④创建视图(view)页面:WebContent/WEB-INF/jsp/first.jsp(在该页面中使用EL表达式获取msg中的信息)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 4 "http://www.w3.org/TR/html4/loose.dtd"> 5 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9 <title>入门程序</title> 10 </head> 11 <body> 12 ${msg} 13 <!-- 用EL表达式获取后台处理器封装的信息 --> 14 </body> 15 </html>