Spring MVC 初体验
相信很多搞过Java的人都用过 Struts,或者转到用 Spring 框架后使用的仍然是Struts提供的MVC,那么是否想更多了解一下 Spring 本身的 MVC 呢,其实 Spring 的 MVC 还是很不错的,它×?Struts 中好的东西,还集 WebWork 的拦截器,下面来让我对 Spring MVC 作一个最简单的体验。
称之谓简单是我觉得要去体验 Spring 的 MVC 的这个例子已经是精小到极致了,应用中没有配置ContextLoaderServlet或者ContextLoaderListener。借鉴于 Struts 的概念,这个实例中的的请求处理过程依次是/helloSpring.unmi->helloSpringController->helloSping.jsp) ,比如通过地址 http://localhost:8080/spring/helloSpring.unmi 访问,在基本Spring 的 Web容器收到这个请求,会通过 DispatcherServlet 根据配置的 Mapping 派发给 helloSpringController 处理,然后通知视图 helloSpring.jsp 显示结果。
下面逐个介绍能演示这一过程的四个文件
1. web.xml (不用说也知道是放在哪里的)
说明:配置了一个 DispatcherServlet 用来处理后缀为 unmi 的请求,后缀随便定义,如果想仿照着 Struts, 你也可以命作 *.do。还配置了要使用 jstl的核心标签库。
2. UnmiServlet-servlet.xml(这个文件也是放在/WEB-INF/下的)
这个文件为什么要命作 UnmiServlet-servlet.xml 呢?因为 web.xml 中配置了 DispatcherServlet 查找的默认 Spring Bean 配置文件就是指定的 servlet-name UnmiServlet + "-servlet.xml", 其中配置了最基本的三个 bean, 分别
视图解析器:告诉从 Controller return 的 ModelAndView 去找哪个视图处理显示。这里的配置是在 WEB 应用路径下找相对应后缀为 jsp 的页面来处理,由下面的 HelloSpringController 可知道会要求 helloSpring.jsp 来显示内容。
处理映射配置:标示匹配模式的 URL 将发给相应的控制器来处理,相当于 Struts 的 ActionMapping 配置项,也可配置多项。这里告诉 Web 容器,/helloSpring.unmi 的请求交给 helloSpringController 来处理。
3. HelloSpringController.java (放到它该呆的 Package中)
说明:往 request 中设置属性待视图显示,最后返回一个 ModelAndView, 逻辑名为 helloSpring, 依据前面配置 UnmiServlet-servlet.xml 的视图解析器会找到 /helloSpring.jsp 来显示。
4. helloSpring.jsp (放在 WEB 应用的根目录下)
说明:JSP 使用 jstl 当成一个显示模板来用,用 EL 标记把 request 中的 helloSpring 属性显示出来。
最后稍加几句,因为本文的读者群是对 Java 并且至少对一种 MVC 框架比较熟悉,对 Spring 稍有常识的人员,所以没解释的太细,比如上面用到的 spring, jstl库,以及tld文件应该要知道需加在什么地方。好啦,确定配置完妥无误时,部署到 Web 容器中,通过形如这样的地址 http://localhost:8080/spring/helloSpring.unmi,你将会看到页面显示出 "Hello, Spring!",祝好运!
参考:1. Spring MVC 入门
2. 书籍《Spring框架高级编程》 -《Professional Java Development with the Spring Framework》 永久链接 https://yanbin.blog/spring-mvc-first/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
称之谓简单是我觉得要去体验 Spring 的 MVC 的这个例子已经是精小到极致了,应用中没有配置ContextLoaderServlet或者ContextLoaderListener。借鉴于 Struts 的概念,这个实例中的的请求处理过程依次是/helloSpring.unmi->helloSpringController->helloSping.jsp) ,比如通过地址 http://localhost:8080/spring/helloSpring.unmi 访问,在基本Spring 的 Web容器收到这个请求,会通过 DispatcherServlet 根据配置的 Mapping 派发给 helloSpringController 处理,然后通知视图 helloSpring.jsp 显示结果。
下面逐个介绍能演示这一过程的四个文件
1. web.xml (不用说也知道是放在哪里的)
1<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
4 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
5
6 <servlet>
7 <servlet-name>UnmiServlet</servlet-name>
8 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
9 <load-on-startup>1</load-on-startup>
10 </servlet>
11
12 <servlet-mapping>
13 <servlet-name>UnmiServlet</servlet-name>
14 <url-pattern>*.unmi</url-pattern>
15 </servlet-mapping>
16
17 <jsp-config>
18 <taglib>
19 <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
20 <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
21 </taglib>
22 </jsp-config>
23</web-app>说明:配置了一个 DispatcherServlet 用来处理后缀为 unmi 的请求,后缀随便定义,如果想仿照着 Struts, 你也可以命作 *.do。还配置了要使用 jstl的核心标签库。
2. UnmiServlet-servlet.xml(这个文件也是放在/WEB-INF/下的)
1<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
2
3<beans>
4
5 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
6 <property name="prefix" value="/" />
7 <property name="suffix" value=".jsp" />
8 </bean>
9
10 <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
11 <property name="mappings">
12 <props>
13 <prop key="/helloSpring.unmi">helloSpringController</prop>
14 </props>
15 </property>
16 </bean>
17
18 <bean id="helloSpringController" class="com.unmi.HelloSpringController">
19 </bean>
20
21</beans>这个文件为什么要命作 UnmiServlet-servlet.xml 呢?因为 web.xml 中配置了 DispatcherServlet 查找的默认 Spring Bean 配置文件就是指定的 servlet-name UnmiServlet + "-servlet.xml", 其中配置了最基本的三个 bean, 分别
视图解析器:告诉从 Controller return 的 ModelAndView 去找哪个视图处理显示。这里的配置是在 WEB 应用路径下找相对应后缀为 jsp 的页面来处理,由下面的 HelloSpringController 可知道会要求 helloSpring.jsp 来显示内容。
处理映射配置:标示匹配模式的 URL 将发给相应的控制器来处理,相当于 Struts 的 ActionMapping 配置项,也可配置多项。这里告诉 Web 容器,/helloSpring.unmi 的请求交给 helloSpringController 来处理。
3. HelloSpringController.java (放到它该呆的 Package中)
1package com.unmi;
2
3importorg.springframework.web.servlet.mvc.Controller;
4importorg.springframework.web.servlet.ModelAndView;
5
6importjavax.servlet.http.HttpServletRequest;
7importjavax.servlet.http.HttpServletResponse;
8
9publicclassHelloSpringController implementsController {
10
11 publicModelAndView handleRequest(HttpServletRequest request,
12 HttpServletResponse response)throwsException{
13
14 request.setAttribute("helloSpring", "Hello, Spring!");
15
16 returnnewModelAndView("helloSpring");
17 }
18
19}说明:往 request 中设置属性待视图显示,最后返回一个 ModelAndView, 逻辑名为 helloSpring, 依据前面配置 UnmiServlet-servlet.xml 的视图解析器会找到 /helloSpring.jsp 来显示。
4. helloSpring.jsp (放在 WEB 应用的根目录下)
1<html>
2<head>
3 <title>Hello Spring!</title>
4</head>
5<body>
6
7 <h1>${helloSpring}</h1>
8
9</body>
10</html>说明:JSP 使用 jstl 当成一个显示模板来用,用 EL 标记把 request 中的 helloSpring 属性显示出来。
最后稍加几句,因为本文的读者群是对 Java 并且至少对一种 MVC 框架比较熟悉,对 Spring 稍有常识的人员,所以没解释的太细,比如上面用到的 spring, jstl库,以及tld文件应该要知道需加在什么地方。好啦,确定配置完妥无误时,部署到 Web 容器中,通过形如这样的地址 http://localhost:8080/spring/helloSpring.unmi,你将会看到页面显示出 "Hello, Spring!",祝好运!
参考:1. Spring MVC 入门
2. 书籍《Spring框架高级编程》 -《Professional Java Development with the Spring Framework》 永久链接 https://yanbin.blog/spring-mvc-first/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。