配置SpringMVC应用的过程和使用

springMVC 小海豚博客管理员 2020-06-27 19:51:24.0 148 0条

由于Web应用是基于请求/响应架构的应用,所以不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心Servlet或Filter,这样才可以让该框架介入Web应用中。Spring MVC也提供了一个DispatcherServlet的Servlet充当前端控制器名为org.springframework.web.servlet.DispatcherServlet的Servlet,所有的请求驱动都围绕这个DispateherServlet来分派请求。
A994ln.jpg
1.配置web.xml文件:
DispateherServlet是一个Servlet(它继承自HttpServlet基类),因此使用时需要把它配置在Web应用的部署描述符web.xml文件当中,配置信息如下:

  1. springmvc
  2. org.springframework.web.servlet.DispatcherServlet
  3. contextConfigLocation
  4. /WEB-INF/springmvc-config.xml
  5. 1
  6. springmvc
  7. /

以上配置了一个DispatcherServlet,该Servlet在Web应用程序启动时立即加载,DispatcherServlet加载时会需要一个Spring MVC的配置文件,默认情况下,应用会去应用程序文件夹的WEB-INF下查找对应的[servlet- name]-servlet.xml文件,例如本例的是springmvc,默认查找的就是/WEB-INF/springmvc-servlet.xml。也可以把Spring MVC的配置文件放到应用程序文件夹中的任何地方,用servlet元素的init-param子元素进行描述,本例的param-name元素的值contextConfigLocation表示参数名称,param-value元素的值/WEB-INF/springmvc-config.xml则表示Spring MVC的配置文件路径和名称。则DispatcherSemlet会查找/WEB-INF/springmvc-config.xinl文件,作为Spring MVC的配置文件,解析该文件内容并根据文件配置信息创建一个WebApplicationContext容器对象,也称为上下文环境。WebApplicationContext继承自ApplicationContext容器,它的初始化方式和BeanFactory, ApplicationContext有所区别,因为WebApplicationContext需要ServletContext实例,也就是说,它必须在拥有Web容器的前提下才能完成启动Spring Web应用上下文的工作。有了WebApplicationContext容器,开发者就可以很自然地使用Spring的IOC, AOP等其他功能了。

2.编写控制器
DispatcherServlet在Spring当中充当一个前端控制器的角色,它的核心功能是分发请求。请求会被分发给对应处理的Java类,Spring MVC中称为Handle。

2.1 基于Controller接口的控制器
在Spring2.5版本以前,开发一个Handle的唯一方法是实现org. springframeworlc.web. servlet.mvc. Controller接口。Controller接口必须实现一个方法,该方法的签名如下:

  1. ModelAndView handleRequest(HttpServletReques request, HttpServletResponse response) throws Exception

第一步
配置Spring MVC的配置文件:WebContent/WEB-INF/springmvc-config.xml,这个文件再配置web.xml文件中要用到

  1. name=“/hello” class=“org.fkit.controller.He1loController”>
  2. class=“org.springframework.web.serelet .handler.BeanNameUrlHandlerMapping”>
  3. class=“org.springframework.web.servle七.mvc. SimpleControl工erHandlerAdapter”>
  4. class=“org.springframework.web.servlet.view.工nternalResourceViewResolver”>

第二步

springmvc-config.xml文件声明了HelloController业务控制器类,并将其映射到/hello请求,此处还配置了一个处理映射器BeanNameUrlHandlerMapping,这样可以Bean的名称为url进行查找;同时配置了处理器适配器SimpleControllerHandlerAdapter,来完成对HelloController类的handleRequest方法的调用;最后配置了视图解析器InternalResourceViewResolver来解析视图,将View呈现给用户。需要注意的是,在Spring4.0之后,如果不配置处理映射器、处理器适配器和视图解析器,也会使用默认的完成Spring内部MVC工作,笔者在此处显示配置处理过程,是希望读者能够了解Spring MVC的每一个动作,之后则可以更好地理解SpringMVC的工作流程。

  1. public class HelloController implements Controlter{
  2. /
  3. handleRequest是Controller接口必须实现的方法。
  4. 该方法的参数是对应请求的HttpServletReque。和HttpServletResponse
  5. 该方法必须返回一个包含视图名或视图名和模型的ModelAndView对象。
  6. /
  7. @Override
  8. public ModelAndView handleRequest(HttpServletRequest request,
  9. HttpServletResponse response)throws Exception{
  10. //创建准备返回的ModelAndView对象,该对象通常包含了返回视图名、模型的名称以及模型对象
  11. ModelAndView my=new ModelAndView();
  12. //添加模型数据,可以是任意的POJO对象
  13. mv.addObject(“message”“Hello World!”);
  14. //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
  15. my.se七ViewName(“/WEBINF/content/welcome.jsp }} ) ;
  16. //返回ModelAndView对象。
  17. return mv;
  18. }

}

HelloController是一个实现Controller接口的控制器,它可以处理一个单一的请求动作。

2.2基于注解的控制器
Spring2.5版新增了可基于注解的控制器,也就是说控制器不用实现Controller接口,通过注释类型来描述。而且也不用再springmvc-config.xml配置文件中配置映射请求了

第一步

  1. /
  2. HelloController是一个基于注解的控制器
  3. 可以同时处理多个请求动作,并且无须实现任何接口。
  4. org.springframework.stereotype.Controller注解用于指示该类是一个控制器
  5. /
  6. @Controller
  7. public class HelloController implements Controlter{
  8. /
  9. handleRequest是Controller接口必须实现的方法。
  10. 该方法的参数是对应请求的HttpServletReque。和HttpServletResponse
  11. 该方法必须返回一个包含视图名或视图名和模型的ModelAndView对象。
  12. /
  13. @RequestMapping(value=“/hello”)
  14. public ModelAndView handleRequest(HttpServletRequest request,
  15. HttpServletResponse response)throws Exception{
  16. //创建准备返回的ModelAndView对象,该对象通常包含了返回视图名、模型的名称以及模型对象
  17. ModelAndView my=new ModelAndView();
  18. //添加模型数据,可以是任意的POJO对象
  19. mv.addObject(“message”Hello World!”);
  20. //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面
  21. my.seViewName(/WEBINF/content/welcome.jsp }} ) ;
  22. //返回ModelAndView对象。
  23. return mv;
  24. }
  25. }

HelloController是一个基于注解的控制器,org.springframework.stereotype.Controller注释类型用于指示Spring类的实例是一个控制器。org. springframework. web.bind. annotation.RequestMapping注释类型用来映射一个请求和请求的方法,value=”/hello’,表示请求由hello方法进行处理。方法返回一个包含视图名或视图名和模型的ModelAndView对象
第二步 修改Spring MVC的配置文件

  1. base-package=“org.fkit.controller”>
  2. class=“org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping”>
  3. class=“org.springframework.web.servlet.view.工nternalResourceViewResolver”>

由于使用了注解类型,因此不需要再在配置文件中使用XNIL描述Beano Spring使用扫描机制查找应用程序中所有基于注解的控制器类。指定需要Spring扫描。rg.fkit.controlle:包及其子包下面的所有Java文件。

3.需要的jar包
为了让Web应用具有Spring支持的功能,将所有Spring框架的class文件的JAR包和Spring所依赖的comrnons-logging-1.2. j ar复制到Web应用的lib文件夹下
4.总结:
Controller接口的实现类只能处理一个单一请求动作,而Spring2.5之后新增的基于注解的控制器可以支持同时处理多个请求动作,并且无须实现任何接口,其更加好用。下一篇说明DispateherServlet又是如何分派请求的呢?

暗锚,解决锚点偏移

文章评论

嘿,来试试登录吧!