SpringMVC框架(1)之(1.2 入门程序—常用的处理器映射器和处理器适配器)

1. 程序结构:

  1. 创建一个Web项目,导入 Spring的 jar包:
    使用 Spring3.2.0(带SpringMVC模块)
  2. web.xml 文件中配置 DispatcherServlet前端控制器
    (DispatcherServlet作为 springmvc的中央调度器存在,降低了各个组件之间的耦合度;)
  3. springmvc.xml 文件中配置 SpeingMVC架构三大组件中的 HandlerMapping处理器映射器:
    1. BeanNameUrlHandlerMapping:表示将定义的 Bean的名字作为请求的 url,根据 bean的 name查找 Handler,将 action的 url配置在 bean的 name中;
    2. SimpleUrlHandlerMapping:是 BeanNameUrlHandlerMapping的增强版;
  4. springmvc.xml 文件中配置 HandlerAdaptor处理器适配器:
    SimpleControllerHandlerAdaptor:简单控制器处理适配器;(类的源码中的 supports方法中,将实现了 Controller接口的 bean作为 springmvc的 handler后端控制器;)
  5. springmvc.xml 文件中开发 Handler后端控制器:
    (创建一个 ItemListController类 ItemListController.java实现 Controller;再在 springmvc.xml 文件中配置 Handler;)
  6. springmvc.xml 文件中配置 ViewResolver视图解析器:
    InternalResourceViewResolver:支持 Jsp视图解析;
  7. 请求路径: http://localhost:8080 /项目名/配置适配器Handler中的name名即请求路径
    (ItemListController.java类中已经将数据填充到 request域中;为将 request域中内容显示出来,需要在 jsp页面中进行视图开发;)
  8. 视图开发:
    (jsp页面进行视图开发)

1. web.xml
(① < servlet> 标签中:如果不配置 < init-param> 的contextConfigLocation,则默认查找的是classpath下的:servlet名称+"-servlet.xml"(springmvc-servlet.xml) ;② < servlet-mapping> < url-pattern>标签中可配置 /,此工程所以请求全部由SpringMVC解析;可以配置 * .do, * .action,所有请求以*.do,*.action的有SpringMVC解析;不可配置 / *;③ 为了让 servlet运行加快,在< servlet>标签中添加 < load-on-startup>1< /load-on-startup>,让 DispatcherServlet在服务器启动时自动启动;)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
         version="3.0">
         
         <!-- 1.DiapatcherServlet前端控制器 -->
         <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>
	        <load-on-startup>1</load-on-startup> //
         </servlet>
         <servlet-mapping>
         	<servlet-name>springmvc</servlet-name>
         	<url-pattern>*.action</url-pattern> //
         </servlet-mapping>

         <welcome-file-list>

         </welcome-file-list>
</web-app>

2. springmvc.xml
①. HandlerMapping 处理器映射器中: BeanNameUrlHandlerMapping:表示将定义的 Bean的名字作为请求的 url;
SimpleControllerHandlerAdaptor:简单控制器处理适配器;根据配置的 handler的 id进行查找;
②. HandlerAdaptor 处理器适配器:
SimpleControllerHandlerAdaptor:简单控制器处理适配器;(下图1类的源码中的 supports方法中,将实现了 Controller接口的 bean作为 springmvc的 handler后端控制器;)
HttpRequestHandlerAdaptor:要求 Handler(即Controller)实现 HttpRequestHandler接口;(下图2类的源码中的 supports方法中,将实现了 Controller接口的 bean作为 springmvc的 handler后端控制器;下新建 3’. ItemListController2.java 类;)
在这里插入图片描述在这里插入图片描述
③. Handler 后端控制器:
因为 HandlerMapping 处理器映射器中是根据 bean的 name查找 handler(即 BeanNameUrlHandlerMapping类,因为使用BeanNameUrlHandlerMapping处理器映射器,name的配置是url),所以配置 Handler的 bean要有 name,name设为 name="/itemsList.action";

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> 
	
	<!-- 3.配置Handler(因为使用BeanNameUrlHandlerMapping处理器映射器,name配置是url) -->
	<bean  id="itemsListController1" name="/itemsList.action" class="com.asd.ItemListController"></bean>
	<bean  id="itemsListController2" class="com.asd.ItemListController2"></bean>

	<!-- 1.处理器映射器 -->
	<!-- 法一:根据bean的name(自定义)查找handler,将action的url配置在bean的name中 -->
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
	</bean>
	<!-- 法二:根据bean的name(自定义)查找handler,将action的url配置在bean的name中 -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mapping">
			<props>
				<prop key="/items1.action">itemsListController1</prop>
			  //<prop key="/items2.action">itemsListController1</prop>
			    <prop key="/items2.action">itemsListController2</prop>
			</props>
		</property>
	</bean>

	<!-- 2.处理器适配器 -->
	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
	<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

	<!-- 4.视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>

</beans>

3. ItemListController.java
(类中List < Items> itemsList,所以需要创建一个 Items.java类;需要转发到指定的 jsp页面,所以需要一个 itemsList.jsp页面,放在 WEB-INF下创建的 jsp文件夹中(所以类中 modelAndView.setViewName("/WEB-INF/jsp/itemsList.jsp");):
在这里插入图片描述

public class ItemListController implements Controller{
	public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response)throws Exception{
		//静态数据(商品列表)
		List<Items> itemsList=new ArrayList<Items>();
		Items item1=new Items();
		item1.setName("笔记本");
		item1.setPrice(5000);
		item1.setDetail("笔记本电脑");

		Items item2=new Items();
		item2.setName("手机");
		item2.setPrice(5000);
		item2.setDetail("华为手机");

		itemsList.add(item1);
		itemsList.add(item2);

		ModelAndView modelAndView=new ModelAndView();
		//填充数据到 request域中
		modelAndView.addObject("items",itemsList);
		//视图
		//指定转发的jsp页面
		modelAndView.setViewName("/WEB-INF/jsp/itemsList.jsp");
		return modelAndView;
	}
}

3’. ItemListController2.java
(使用 HandlerAdaptor 处理器适配器: HttpRequestHandlerAdaptor:要求 Handler(即Controller)实现 HttpRequestHandler接口 的适配器方式;以下类完成后。 ①.2. springmvc.xml 文件 配置 处理器适配器< bean class=“org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter”>< /bean>;②. 再在 2. springmvc.xml 文件 配置 Handler,即 添加 handler的 bean其 id=“itemsListController2” ; 再在 ③. 处理器映射器 中配置< prop key="/items2.action">itemsListController2< /prop>;自总结:根据处理器映射器中的 key值 /items2.action(即请求的url)对应的值 itemsListController2即为 handler的 bean的 id,根据 itemsListController2找到对应的 Controller类;

public class ItemListController2 implements HttpRequestHandler{
	public void handleRequest(HttpServletRequest request,HttpServletResponse response)throws ServletExpection,IOException{
		//静态数据(商品列表)
		List<Items> itemsList=new ArrayList<Items>();
		Items item1=new Items();
		item1.setName("笔记本");
		item1.setPrice(5000);
		item1.setDetail("笔记本电脑");

		Items item2=new Items();
		item2.setName("手机");
		item2.setPrice(5000);
		item2.setDetail("华为手机");

		itemsList.add(item1);
		itemsList.add(item2);

		request.setAttribute("items",itemsList);
		request.getRequestDispatcher("/WEB-INF/jsp/itemsList.jsp").forward(request,response);
	}
}

3’. Items.java

public class Items{
	private int id;
	private String name;
	private double price;
	private String detail;
	private String pic;
	private Date createDate;
	get、set();
}

3’’. ItemsList.jsp
(< c:foreach>显示要用到 jstl标签,所以文本头要添加一行:)

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<body>
	<table width="100%" border="1">
		<tr><td>商品名称</td><td>商品价格</td><td>商品详情</td></tr>
		<c:foreach items="${items}" var="item">
			<tr><td>${item.name}</td><td>${item.price}</td><td>${item.detail}</td></tr>
		</c:foreach>
	</table>
</body>

运行结果:
URL请求路径:http://localhost:8080 /项目名/配置适配器Handler中的name名即请求路径(可显示 表中结果)

猜你喜欢

转载自blog.csdn.net/qq_41029923/article/details/84451512
今日推荐