欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【SpringMVC】(一)基本用法

程序员文章站 2024-03-24 14:03:58
...

        备注:最近复习到Spring MVC,本文记录SpringMVC的四大“器具”的基本配置和基本使用,便于以后回来快速上手。


       一、基本结构

  【SpringMVC】(一)基本用法

       如上图所示(图片来自于尚硅谷的学习教案),是Spring-MCV的基本架构图,其中重要的几个要点分别是:

      (1)DispatcherServlet -- *控制器

      (2)HandlerMapping -- 处理器映射器

      (3)HandlerAdapter -- 处理器适配器

      (4)ViewResolver --  视图解析器


       对于这个架构的架构流程:

1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、执行处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户



     二、实战应用

      需求:使用SpringMVC做一个简单的页面查询

      操作:

     (1)环境:jar包,tomcat服务器,Eclipse。

     (2)web.xml

       1.配置“前端控制器”

<servlet>
	<servlet-name>springmvc</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:springmvc.xml</param-value>
	</init-param>
</servlet>

<servlet-mapping>
	<servlet-name>springmvc</servlet-name>
	<url-pattern>*.action</url-pattern>
</servlet-mapping>

     (3)springmvc.xml

       1.配置“Handler”

<bean id="itemsController1" name="/queryItems.action" class="cn.itcast.ssm.controller.ItemsController1"/>
         Handler对应于Controller中的类。


        2.配置“处理器映射器”

<!-- 处理器映射器将bean的name作为url进行查找,需要在配置Handler时指定beanname(url) -->
<bean
	class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- 简单url映射 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	<property name="mappings">
		<props>
			<prop key="/queryItems1.action">itemsController1</prop>
			<prop key="/queryItems2.action">itemsController1</prop>
		</props>
	</property>
</bean>
        这里列举了两种”映射器”的配置形式,一种是使用“BeanNameUrlHandlerMapping”,另外一种使用的是“SimpleUrlHandlerMappng”简单url映射器,前者通过Handler中的“name”属性就能映射Controller,后者需要使用"id"属性。


       3.适配器

       非注解类型:

      (1)Controller需要实现,controller接口

<bean	
    class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
      (2)Contorller需要实现,HttpRequestHandler接口

<bean 
    class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

        同时建议适配器写完之后,就写Controller。

       (1)基于SimpleControllerHandlerAdapter的Controller写法

public class ItemsController1 implements Controller {
	@Override
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		//调用service查找 数据库,查询商品列表,这里使用静态数据模拟
		List<Items> itemsList = new ArrayList<Items>();
		//向list中填充静态数据
		
		Items items_1 = new Items();
		items_1.setName("联想笔记本");
		items_1.setPrice(6000f);
		items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
		
		Items items_2 = new Items();
		items_2.setName("苹果手机");
		items_2.setPrice(5000f);
		items_2.setDetail("iphone6苹果手机!");
		
		itemsList.add(items_1);
		itemsList.add(items_2);
		//返回ModelAndView
		ModelAndView modelAndView =  new ModelAndView();
		//相当 于request的setAttribut,在jsp页面中通过itemsList取数据
		modelAndView.addObject("itemsList", itemsList);
		
		//指定视图
		modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
		return modelAndView;
	}
}

      (2)基于“HttpRequestHandlerAdapter”的Controller类的写法

public class ItemsController1 implements HttpRequestHandler {

	@Override
	public void handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws ServletException,IOException {
		
		//调用service查找 数据库,查询商品列表,这里使用静态数据模拟
		List<Items> itemsList = new ArrayList<Items>();
		//向list中填充静态数据
		
		Items items_1 = new Items();
		items_1.setName("联想笔记本");
		items_1.setPrice(6000f);
		items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
		
		Items items_2 = new Items();
		items_2.setName("苹果手机");
		items_2.setPrice(5000f);
		items_2.setDetail("iphone8苹果手机!");
		
		itemsList.add(items_1);
		itemsList.add(items_2);

		//设置模型数据
		request.setAttribute("itemsList", itemsList);
		
		//设置转发的视图
		request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
		
		//这种方式,因为没有返回ModelAndView,可通过response修改定义响应内容,比如返回json数据:
		//response.setCharacterEncoding("utf-8");
		//response.setContentType("application/json;charset=utf-8");
		//response.getWriter().write("json串");
	}

}
       以上内容都省略了PO实体类的定义。着重学习两种Controller中对数值的处理。


       之后的jsp页面不再赘述了。

       That's all,通过非注解形式,应用了SpringMVC中的四大“器”实现的SpringMVC访问。