SpringMVC框架也定义了自己的一套注解,并利用这些注解简化xml配置,进行开发。
SpringMVC框架应用在控制层及视图层,Spring启用servlet技术作为总控制器,用于处理请求并找到具体指定的控制器进行处理。
相比于struts2,SpringMVC框架具有以下优势:
1.利用注解技术极大简化xml文件配置。
2.采用Model作为数据传递容器,比ongal更加方便。
SpringMVC的核心:
(1)经典的MVC框架,其特征是:使用Servlet作为总控制器
总控制器:DispatcherServlet.
具体的作用:请求分发;它可以处理多个请求,并且通过注解指定具体的控制器来处理相应的请求!
(2)请求路径"/"的含义:
①基于当前web应用的任何请求
②默认Servlet(处理静态资源)
注意:
在web服务器中,原有的默认Servlet是DefaultServlet.
①默认Servlet的功能是:负责向浏览器发送静态的资源,比如html文件;
②默认Servlet的请求路径规定为:"/".
(3)具体控制器的方案:
①pojo类
②基于注解技术:
@Controller
利用注解的方式,声明某各类为action
@RequestMapping
利用注解的方式,定义某个action的请求路径
@RequestParam
利用注解的方式获取参数
(4)SpringMVC框架中的数据模型:Model对象(是SpringMVC的数据结构)
①Model对象是一个map集合,用来存储Controller的数据,供jsp使用;
②凡是存入Model中的对象,也会存入reqeust域中.
(5)SpringMVC框架中的视图组件
①支持丰富的视图组件技术
②需要在xml文件中注册视图解析器
支持jsp视图技术的解析器是:InternalResourceViewResolver
Demo
下面通过一个简单的例子来说明:
获取用户输入数据,进行判断并反馈。
控制层:
1 package controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.ui.Model; 5 import org.springframework.web.bind.annotation.RequestMapping; 6 import org.springframework.web.bind.annotation.RequestMethod; 7 import org.springframework.web.bind.annotation.RequestParam; 8 9 @Controller//该注解声明该类为控制器 10 public class QuestionController { 11 12 @RequestMapping(value="/questionForm")//该注解声明该action的请求路径 13 public String showFrom(){ 14 return "QuestionForm"; 15 } 16 17 @RequestMapping(value="/handleQuestion", method = RequestMethod.POST)//该注解声明该action的请求路径,并声明提交方法为post 18 public String handleQuestion(@RequestParam("city") String anwser, Model model){//利用注解获取参数 19 if("北京".equals(anwser)) 20 model.addAttribute("anwser", "正确"); 21 else 22 model.addAttribute("anwser", "错误"); 23 return "HandleQuestion"; 24 } 25 }
在控制器的方法中,return后面的参数对应jsp页面的名称,最终会通过框架找到对应的页面。
控制器将数据封装到Model对象中,该对象会通过框架封装到request域中,可以直接用el表达式获取。
视图层:
1 视图1: 2 <body> 3 <h2>请回答下面问题</h2> 4 <form action="handleQuestion" method="post"> 5 中国的首都是:<input type="text" name="city"/> 6 <input type="submit" value="提交"/> 7 </form> 8 </body> 9 10 视图2: 11 <body> 12 <h2>反馈结果:</h2> 13 ${anwser} 14 </body>
控制器的配置有几个要点:
1.注解扫描
告诉框架那些类需要扫描,并按照注解执行相应操作。
2.注册驱动请求
3.注册静态资源请求处理和视图解析器
SpringMVC框架对项目资源的请求分静态请求(请求静态资源)和动态请求(jsp),静态请求用默认servlet处理。视图解析器专门处理jsp请求,这就时控制器return的参数找到对应的jsp的关键。
控制器配置:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/mvc 12 http://www.springframework.org/schema/mvc/spring-mvc.xsd 13 "> 14 <!-- 指定扫描的基准路径 --> 15 <context:component-scan base-package="controller"/> 16 17 <!-- 注解驱动的请求处理 --> 18 <mvc:annotation-driven/> 19 <!-- 指明静态资源的请求处理是DefaultServlet --> 20 <mvc:resources location="/css/" mapping="/css/**"/> 21 <mvc:resources location="/js/" mapping="/js/**"/> 22 <mvc:resources location="/image/" mapping="/image/**"/> 23 <mvc:resources location="/" mapping="/*.html" /> 24 25 <!-- 注册视图解析器,指明视图资源是jsp --> 26 <bean id="viewResolver" 27 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 28 <property name="prefix" value="/WEB-INF/jsp/"/> 29 <property name="suffix" value=".jsp" /> 30 </bean> 31 32 </beans>
web配置:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="3.0" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 7 <!-- 注册springmvc的总控制器DispatcherServlet --> 8 <servlet> 9 <servlet-name>springmvc</servlet-name> 10 <servlet-class> 11 org.springframework.web.servlet.DispatcherServlet 12 </servlet-class> 13 <init-param> 14 <param-name>contextConfigLocation</param-name> 15 <param-value>/WEB-INF/config/springmvc-config.xml</param-value> 16 </init-param> 17 <!-- web服务器启动时创建DispatherServlet对象 --> 18 <load-on-startup>1</load-on-startup> 19 </servlet> 20 21 <servlet-mapping> 22 <servlet-name>springmvc</servlet-name> 23 <!-- 表明当前Servlet是默认Servlet --> 24 <url-pattern>/</url-pattern> 25 </servlet-mapping> 26 27 </web-app>
是不是极大地简化了开发流程及配置?!