SpringMVC框架也定义了自己的一套注解,并利用这些注解简化xml配置,进行开发。
SpringMVC框架应用在控制层及视图层,Spring启用servlet技术作为总控制器,用于处理请求并找到具体指定的控制器进行处理。
相比于struts2,SpringMVC框架具有以下优势:
1.利用注解技术极大简化xml文件配置。
2.采用Model作为数据传递容器,比ongal更加方便。
3.SpringMVC和Struts2的比较的优点
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>
是不是极大地简化了开发流程及配置?!