第一节 SpringMVC在知识体系中的坐标
在我们学习框架知识以前,JavaSE+JDBC+JavaWeb+SQL这样的技术组合已经可以实现任何业务逻辑了。为什么还要学习SSM这样的框架呢?
很简单,MyBatis是对JDBC的封装,而SpringMVC是对JavaWeb的封装。
其中JavaWeb和SpringMVC提供了表述层(或称表示层)的解决方案,而JDBC和MyBatis是持久化层的解决方案。那Spring到哪去了?Spring中的IOC容器为我们的整个项目管理组件,而我们配置的各种bean、切面类、事务通知等等其实都是在容器中工作的组件,我们开发人员的任务其实就两件事:开发组件、组装组件。
第二节 使用SpringMVC前后代码的对比
使用原生ServletAPI获取请求参数:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName = request.getParameter("userName"); System.out.println("userName="+userName); }
使用SpringMVC获取请求参数:
@RequestMapping("/user/login") public String login(@RequestParam("userName") String userName){ System.out.println("userName="+userName); return "result"; }
这仅仅是其中一个例子,使用SpringMVC后确实大大简化了表述层开发。
通过这个HelloWorld,大家初步体会SpringMVC使用过程中的总体流程。
第一步 创建DynamicWebProject项目
第二步 导入jar包
commons-logging-1.1.3.jar spring-aop-4.0.0.RELEASE.jar spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0.RELEASE.jar spring-web-4.0.0.RELEASE.jar spring-webmvc-4.0.0.RELEASE.jar
第三步 在web.xml中配置SpringMVC的前端控制器:DispatcherServlet
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
第四步 在src目录下创建Spring配置文件spring-mvc.xml并指定自动扫描的包
<context:component-scan base-package="com.mvc.controllers"/>
注意:Spring配置文件的文件名必须和web.xml中classpath:后一致,否则将无法找到。
第五步 在自动扫描的包下创建类HelloHandler
import org.springframework.stereotype.Controller; @Controller public class HelloHandler { }
第六步 在HelloHandler类中声明一个方法用来处理请求
@RequestMapping("/hello") public String hello() { System.out.println("SpringMVC处理了这个请求!"); return "/WEB-INF/pages/result.jsp"; }
第九步 访问测试
控制台输出:
SpringMVC处理了这个请求!
看看其它类似的项目,相比对SpringMVC使用过程中的总体流程有所了解了吧
疑问 url-pattern中为什么是“/”而不是“/*”?
SpringMVC在url-pattern的配置中支持两种风格
REST风格:
<url-pattern>/</url-pattern>
扩展名风格:
<url-pattern>*.action</url-pattern>
以“/”开头的路径会被认为是REST风格,而“/*”的写法是不符合REST风格规范的。只有在SpringMVC这里有映射“/”的情况,其他地方一切照旧。