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