入门案例
将spring-framework-3.1.1.RELEASE-with-docs.zip/dist/下的所有jar 包拷贝到项目的WEB-INF/lib 目录下;2、 Spring 框架依赖的 jar 包:
需要添加 Apache commons logging 日志,此处使用的是 commons.logging-1.1.1.jar;
需要添加 jstl 标签库支持,此处使用的是 jstl-1.1.2.jar 和 standard-1.1.2.jar;
load-on-startup:表示启动容器时初始化该 Servlet;
url-pattern:表示哪些请求交给 Spring Web MVC 处理, “/” 是用来定义默认 servlet 映射的。也可以如“*.html”表示拦截所有以 html 为扩展名的请求。
自此请求已交给 Spring Web MVC 框架处理,因此我们需要配置 Spring 的配置文件,默认 DispatcherServlet 会加
载 WEB-INF/[DispatcherServlet 的 Servlet 名字 ]-servlet.xml 配置文件。本示例为 WEB-INF/ chapter2-servlet.xml。
Spring 配置文件中配置 HandlerMapping、HandlerAdapter
BeanNameUrlHandlerMapping:表示将请求的 URL 和 Bean 名字映射,如 URL 为 “上下文/hello”,则 Spring 配置文件
必须有一个名字为“/hello”的 Bean,上下文默认忽略。
SimpleControllerHandlerAdapter:表示所有实现了 org.springframework.web.servlet.mvc.Controller 接口的 Bean 可以作为
Spring Web MVC 中的处理器。如果需要其他类型的处理器可以通过实现 HadlerAdapter 来解决。
Spring 配置文件中配置 ViewResolver
InternalResourceViewResolver:用于支持 Servlet、JSP 视图解析;viewClass:JstlView 表示 JSP 模板页面需要使用 JSTL 标签库,classpath 中必须包含 jstl 的相关 jar 包;
prefix 和 suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为 hello,则该该
jsp 视图页面应该存放在“WEB-INF/jsp/hello.jsp”;
开发处理器/页面控制器
org.springframework.web.servlet.mvc.Controller:页面控制器/处理器必须实现 Controller 接口
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) :功能处
理方法,实现相应的功能处理,比如收集参数、验证参数、绑定参数到命令对象、将命令对象传入业务对象进行业务处理、最后返回 ModelAndView 对象;ModelAndView:包含了视图要实现的模型数据和逻辑视图名;“mv.addObject("message", "Hello World!");
”表示添加模型数据,此处可以是任意 POJO 对象;“mv.setViewName("hello");”表示设置逻辑视图名为“hello”,视图解析器会将其解析为具体的视图,如前边的视图解析器 InternalResourceVi。wResolver 会将其解析为“WEB-INF/jsp/hello.jsp”。
我们需要将其添加到 Spring 配置文件(WEB-INF/chapter2-servlet.xml),让其接受 Spring IoC 容器管理:
name="/hello":前边配置的 BeanNameUrlHandlerMapping,表示如过请求的 URL 为 “上下文/hello”,则将会交给该 Bean 进行处理。
开发视图页面
${message}:表示显示由HelloWorldController处理器传过来的模型数据。
到此 HelloWorld 就完成了,步骤是不是有点多?而且回忆下我们主要进行了如下配置:
1、 前端控制器 DispatcherServlet;
2、 HandlerMapping
3、 HandlerAdapter
4、 ViewResolver
5、 处理器/页面控制器
6、 视图
POST 中文乱码解决方案
spring Web MVC 框架提供了 org.springframework.web.filter.CharacterEncodingFilter 用于解决 POST 方式造成的中文乱码